Hi,
ein Skript startet einen Agenten und übergibt eine Doc-ID.
Der Agent macht einen SQL-Select gegen DB2 und schreibt das Ergebnis in das Dokument mit der ihm übergebenen DocID.
code in Maske:
idVonEinemDoc = doc.noteID
someAgent.runOnServer(idVonEinemDoc)
call doc.save (true, false)
code in Agent:
/*
Der Agent holt sich eine Referenz auf das Dokument der übergebenen DocID und macht einen SQL-Select gegen DB2 und schreibt das Ergebnis in das Dokument mit der ihm übergebenen DocID.
Genauer: Er iteriert durch das Resultset und hängt die einzelnen Spaltenwerte eines RDBMS-Datensatz jeweils an gewisse Notes-ITems im Dokument an.
*/
Ergebnis ist aus meiner Sicht kurios.
Der Agent läuft an.
Bevor das doc.save im Maskencode das Dokument persistiert (abgespeichert hat) hat der Agent (der ja über das selbe Dokument läuft) bereits einige, aber nicht alle im Select gefundenen Datensätze angehängt.
Irgendwie laufen also beide asynchron.
Synchron hiesse: Der caller (das Skript in der Maske) wartet, bis der von ihm aufgerufene Agent beendet ist.
Asynchron heisst: der code im caller läuft einfach weiter und kümmert sich nicht darum, wann der aufgerufene code terminiert.
Es ist in jedem Fall asynchron.
Aber der Skriptcode in der Maske wartet ziemlich lange bis er das doc.save ausführt (deshalb semi-synchron)
In dieser Zeit hat der Agent auf dem Server:
- sich mit einer remoten DB2 verbunden.
- einen simplen sql-Select gegen eine Tabelle derselben abgesendet.
- ein Resultset erhalten.
- einige (aber nicht alle) Datensätze des Resultsets iteriert
- diese Werte jeweils an die Items des Dokuments angehängt.
Das Verhalten ist so. Das ist weniger eine Frage, als eine Feststellung.
Kann jemand was schlaues dazu sagen?Ich könnte jetzt theoretisch im Maskencode vor doc.save
sowas schreiben wie
while doc.getItemValue("aFlag")(0) <> "1"
wend
und im Agenten:
/*
iteriere gesamtes Resultset
doc.replaceItemValue("aFlag", "1")
*/
und ein paar Sicherheiten einbauen (Zeitvariable in Endlos-while wend in Masken-code.
Das ist mir aber zu sehr gehackt.
Gruß Axel