Das Notes Forum
Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: Schnubbel am 30.07.19 - 15:38:33
-
Hallo liebe Gemeinde,
ich habe nachfolgendes Problem:
Ein neues Dokument wird erzeugt und gespeichert. Im Hintergrund (RunOnServer) wird ein Agent angeschmissen, der mit der NoteID gefüttert wird. Dieser Agent ändert einen Wert in dem Dokument (er prüft, ob gleiche Dokumente vorhanden sind, an denen der Ersteller keine Berechtigung hat). Natürlich nicht mit der NoteID, sondern anhand anderer Kriterien.
Noch im Script des Erstellungsbuttons möchte ich diesen Wert abfangen. Ich komm aber nicht dran. Er ist immer leer. Wenn ich dann das neue Dokument öffne, ist der Wert gefüllt.
Call perdoc.CopyAllItems(NewMaDoc,True) ' Das Dokument wird aus einer Vorlage kopiert
NewMaDoc.Form="(TM)MAOrga"
Uid = newMadoc.UniversalID
Call newMaDoc.Save(1,1)
Dim agent As notesagent
Set agent = db.GetAgent("(TM)Doppelt")
If agent.RunOnServer(newMaDoc.NoteID) = 0 Then
Set Uebdoc = db.Search({FORM="(TM)MAOrga" & @Text(@DocumentUniqueID)="} & Uid & {"},Nothing,0).getfirstdocument
Print Uebdoc.LastModified
Msgbox UebDoc.Nachname(0) <-- der Wert wurde über eine EIngabe erzeugt, und es gibt eine MSgbox mit Inhalt
Msgbox UebDoc.neuerWert(0) <-- der Wert wurde mit dem Agenten erzeugt, die MSgbox ist leer
Egal wie ich das Dokument hier nochmal hole (also ich hab es mit der NoteID versucht und über eine Suche mit der UniversalID. Beides male ist der durch den Agenten geänderte Wert leer.
Jemand ne Idee oder nen Zaunpfahl für mich?
Lieben Gruß
Thorsten
-
Das Problem ist: So lange Du eine Variable (newMaDoc) hast, die auf das "alte" Dokument verweist, wirst Du im Code IMMER diese Instanz des Dokuments bekommen, und das ist das unveränderte.
Am einfachsten ist es, wenn Du einfach ein
Delete newMaDoc
oder
Set newMaDoc = Nothing
einfügst, nachdem Du Dir die NoteID in eine Variable weggeschrieben hast. Dann bekommst Du später auch tatsächlich das "Neue" Dokument, und nicht das aus dem Scriptcache.
Nebenbemerkung: Diese Sache wird ganz besonders geil, wenn newMaDoc nicht in der selben Prozedur sondern an einer ganz anderen Stelle gesetzt wird (als globale variable in einer Script- Lib zum Beispiel, dann gilt das nämlich auch, und dann rauszufinden, woher das kommt ist echt besch...
-
Vielen Dank für die Erklärung und die Lösung.
Die Sache in der Nebenbemerkung trifft bei mir glückerweise nicht zu.