Domino 9 und frühere Versionen > ND7: Entwicklung

Agent aktualisiert Dokumente nach antriggern durch LEI nicht

(1/3) > >>

F.Engel:
Hallo,

ich habe ein kleines Problem.

Es werden jede Nacht Daten aus SAP überspielt...
Diese kommen durch ein SOAP Gateway in meine NotesDB.

Die Maske enthält ein berechnetes Feld, welches sich erst nach aktualisierung des Dokumentes auflöst.

Hierfür habe ich nun folgenden Agenten...
Im ersten Teil werden alle neuen Dokumente, in denen das besagte Feld noch leer ist, gegriffen und sollen neu berechnet werden und werden dann gespeichert.

Im 2. Teil werden die Dokumente weiterverarbeitet... der Teil ist jedoch problemlos.


Mein Problem ist nun, dass durch anstupsen durch den LEI Job keine neuen Dokumente aktualisiert werden. Irgendwie greift er an den Dokumenten vorbei.
Der 2. Teil funktioniert komischerweise bei antriggern durch LEI.


Wenn ich den Agenten nun aber im Designer schedule aktualisiert er brav alle Dokumente und macht was er soll...

Wo liegt das Problem? Ich habe erst gedacht, dass evtl ein View refresh hilft. Aber das hat ebenfalls nicht geklappt.
 


--- Code: ---Sub Initialize

Dim s As New NotesSession
Dim vi As NotesView
Dim vi2 As NotesView
Dim vi3 As NotesView
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim doc2 As NotesDocument
        Dim docnext As NotesDocument
Dim key As String
Dim temp As String

Set db = s.CurrentDatabase
Set vi3 = db.GetView("AlleRabattGruppen")
Set vi2 = db.GetView("RabattNEU")
Call vi2.Refresh

Set doc = vi2.GetFirstDocument
While Not doc Is Nothing
Set docnext = vi2.GetNextDocument(doc)
Call doc.ComputeWithForm(False,False)
Call doc.Save(True,False)
Set doc = docnext
Wend


key =""
temp =""

Set vi = db.GetView("RabattGruppen")
Call vi.Refresh
Call vi3.Refresh
Set doc = vi.GetFirstDocument
While Not doc Is Nothing
temp = doc.KUNNR_T(0)+"."+doc.Gruppe(0)+"."+doc.KSCHL(0)+"."+doc.DATAB(0)
If key<> temp Then
key = temp

Set doc2 =  vi3.GetDocumentByKey(key)
If doc2 Is Nothing Then
Set doc2 = New NotesDocument(db)
Call doc.CopyAllItems(doc2)
doc2.Form="RabattGruppe"
Call doc2.RemoveItem("PRODH1")
Call doc2.Save(False,False)
Else
If doc2.DATBI(0) <> doc.DATBI(0) Then
doc2.DATBI = doc.DATBI(0)
Call doc2.Save(False,False)
End If
If doc2.KBETR(0) <> doc.KBETR(0) Then
doc2.KBETR = doc.KBETR(0)
Call doc2.Save(False,False)
End If
End If
End If
Set doc = vi.GetNextDocument(doc)
Wend
End Sub
--- Ende Code ---

Peter Klett:
Meinst Du mit dem ersten Teil dieses hier?

Set doc = vi2.GetFirstDocument
While Not doc Is Nothing
   Set docnext = vi2.GetNextDocument(doc)
   Call doc.ComputeWithForm(False,False)
   Call doc.Save(True,False)
   Set doc = docnext
Wend

Mit LEI hat das sicher nichts zu tun, wenn es so ist, dass LEI diesen einen Agenten mit allen Aktionen anstößt.

Ich würde die Mimik umstellen, da Du mit einer Ansicht arbeitest, dessen Inhalt sich durch den Agenten verändert. Dazu gibt es schon mehrere Beispiele hier im Forum. Entweder schaltest Du die Aktualisierung der Ansicht temporär aus oder Du holst Dir die relevanten Dokumente über eine Collection und verarbeitest die. Die zweite Lösung ist mir persönlich sympathischer.

F.Engel:
Vorab, danke!

Eine DocumentCollection habe ich schon ausprobiert... mit einem db.Search... aus irgendeinem Grund habe ich diese wieder auskommentiert. Ich werds nochmal testen.

Wie kann ich denn in einer View temporär aktualisierungen deaktivieren?
Aus dem Grund, das sich die View verändert, habe ich das docnext vor dem speichern des Dokumentes abgefangen...


--- Code: ---Set doc = vi2.GetFirstDocument
While Not doc Is Nothing
   Set docnext = vi2.GetNextDocument(doc)
   Call doc.ComputeWithForm(False,False)
   Call doc.Save(True,False)
   Set doc = docnext
Wend

--- Ende Code ---

Und ja, dass soll der erste teil sein :-)

Komisch finde ich nur, dass es per Schedule alles funktioniert!!!

ascabg:
Hallo,

Also die automatische Aktualisierung kannst Du so temporaer ausschalten:

view.AutoUpdate = False


Andreas

F.Engel:
So kommt er übrigens auch nicht weiter...



--- Code: ---Set ndt = New NotesDateTime(Cstr(Datenumber(2011, 4, 20)))
Set dc = db.Search(|Form="Rabatt" & Gruppe=""|,ndt,0)
Set doc = dc.GetFirstDocument
While Not doc Is Nothing
Call doc.ComputeWithForm(False,False)
Call doc.Save(True,False)
Set doc = dc.GetNextDocument(doc)
Wend
--- Ende Code ---

Kann es irgendwas mit Berechtigungen zu tun haben?
Der LEI läuft auf einem anderen Server...

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln