Ich habe eine Maske T1 mit einem Text-Feld F1. Das Feld enthält den Wert 'Z'. im Ereignis Onload ist folgendes angegeben:
Sub Onload(Source As Notesuidocument)
Dim s$
s = Source.Document.UniversalID
End Sub
Dann habe ich einen gemeinsamen Ordner T1.
Dann habe ich einen Agenten T1 mit Auslösen: Auswahl im Menü 'Aktionen', Ziel: Keines
und folgendem Code:
@Command([RunAgent]; "A1");
@Command([RunAgent]; "A2")
Der Agent A1 mit Auslösen: Auswahl in der Agentenliste, Ziel: Alle ausgewählten Dokumente
und folgendem Code:
SELECT Form = "T1";
FIELD F1 := "A1";
@AddToFolder("T1"; "")
Der Agent A2 mit Auslösen: Auswahl in der Agentenliste, Ziel: Keines
und folgendem Code:
Sub Initialize
Dim session As New NotesSession
Dim view As NotesView
Dim doc As NotesDocument
Set view = session.CurrentDatabase.GetView("T1")
Call view.Refresh
Set doc = view.GetFirstDocument
MsgBox doc.F1(0)
End Sub
Der Ablauf ist folgender:
Der Ordner T1 wird manuell geöffnet und das Dokument, falls vorhanden, mit der Aktion 'Aus Ordner entfernen' entfernt.
Ein Dokument mit der Maske M1 wird manuell erstellt mit dem Wert 'Z' in dem o. g. Feld F1 und abgespeichert.
Dann wird dieses Dokument in der Ansicht ausgewählt und dann der Agent T1 gestartet.
Dieser ruft zuerst Agent A1 auf, der das Dokument liest, den Wert 'A1' in das Feld F1 schreibt und dann das Dokument in den Ordner T1 kopiert.
Danach wird der Agent A2 gestartet, der das Dokument aus dem Ordner T1 liest und den Wert des Feldes F1 ausgibt.
Wenn der Agent T1 gestartet wird und das Dokument während dieser Zeit nicht geöffnet wird, gibt der Agent A2 auch richtig 'A1' aus.
Wenn das Dokument aber vor dem Aufruf des Agenten T1 geöffnet wurde (auch nur zum Lesen) dann gibt der Agent A2 aber noch den alten Wert 'Z' aus,
obwohl das Dokument durch den Agenten A1 den Wert von Feld F1 in 'A1' geändert hat. Das geöffnete Dokumnent darf natürlich nicht gespeichert werden,
da der Agent dies geändert hat und sonst ein Speicherkonflikt entstehen würde.
Ursache ist das Ereignis Onload in der Maske T1 wo das Backend-Dokument über die Zeile s = Source.Document.UniversalID angesprochen wurde.
Wenn diese Zeile auskommentiert wird und der gleiche Vorgang ebenfalls mit geöffnetem Dokument wiederholt wird, wird dagegen der richtige Wert 'A1' ausgegeben.
Auch der gleiche Code statt Onload in Postopen oder ein Öffnen des Dokuments im Bearbeiten-Modus und über Call Source.Refresh bei Onload oder PostOpen
den Code in Queryreclac ergibt den alten Wert 'Z'.
Es ist auch egal ob es Source.Document.UniversalID oder irgend was anderes ist. Es reicht wenn beim Öffnen das Backend-Dokument angesprochen wird.
Eigentlich sind doch die Maske und der Agent vollkommen verschiedene Prozesse.
Es scheint so, dass der Agent A2 beim Lesen des Ordners sich das geöffnete Dokument statt das aus dem Ordner greift.
Auch der Code von Agent T1 mit
@PostedCommand([ToolsRunMacro]; "A1");
@PostedCommand([ToolsRunMacro]; "A2")
ergibt keine Änderung.
Das Beispiel ist zur besseren Veranschaulichung nur ein stark reduzierter Extrakt aus der eigentlichen Maske bzw. den Agenten beim Kunden.
Gibt es dazu irgendeine Erklärung.