Domino 9 und frühere Versionen > ND7: Entwicklung
Profildokument mit Serveragent?
Demian:
Moin,moin,
also über die Suche hab ich da nichts passendes zu gefunden. Ich experiemtiere etwas mit Profildokumenten.
Ich habe eine Ansichtsaktion in der das Profildokument mit diversen Werten gefüllt und gespeichert wird. Danach ruft die Aktion einen Agenten via .runonserver auf. Der Serveragent soll nun bei vorhandensein einer bestimmten Datei den Status 1 oder 0 (bei nicht vorhandensein der Datei) in das Profildokument schreiben und ebenfalls speichern.
In der Aktion wird nach Aufruf des Agenten das Profildokument auf diesen Wert abgefragt. Leider wirft er mir nicht den Wert aus, den das Profildok laut meinen Logs haben müsste.
Das Ganze ist irgendwie leicht mysteriös. Setze ich zum Beispiel in der Aktion den Wert im Profildok auf 0 wirft mir mein Serveragent danach den Wert 1 aus???
Das die Aktion mir nicht den Wert auswirft, den der Serveragent reingeschrieben hat, ist wahrscheinlich ein Timing-Problem, oder? Wird der Code in der Aktion pausiert, bis der Agent via .runonserver fertig gelaufen ist, oder läuft er ganz normal weiter?
Hintergrund des Ganzen ist, der Agent darf nur von einem User gestartet werden, wenn eine bestimmte Datei nicht vorhanden ist. Wenn diese vorhanden ist, sollen andere User halt den Hinweis bekommen, dass sie es später erneut probieren sollen.
Gruß
Demian
PS: Cache hatte ich schon gelöscht. Hatte es vorher auch schon mit einem normalen Dok probiert, und den Agenten via runonserver (ID) aufgerufen, jedoch mit dem selben Ergebnis. Deswegen die Vermutung, dass es sich um ein Timing-Problem handelt. Der einzige Lösungsweg der mir dann jetzt spontan einfallen würde, wäre in der Aktion ne Schleife einzubauen, die solange läuft, bis das Dokument vom Server signiert wurde. Fände es aber sehr unschön, dass so zu lösen.
Werner Götz:
Nein, das ist kein Timing-Problem, ich denke, dass es schon ein Caching Problem ist.
Profildokumente werden bei Zugriff via GetProfileDoc nur einmal pro "Datenbank-Session" (also solange man sich in einer Datenbank befindet) gelesen. Da kann dann ein Server-Agent reinsschreiben, was er will, die Werte werden nicht aktualisiert.
Bei normalen Dokumenten muss man die Referenz auf das bereits geholte (das ja "mit diversen Werten gefüllt" wurde) erst löschen (z.B. Delete doc).
-Werner
Demian:
--- Zitat von: Werner Götz am 03.04.10 - 09:18:10 ---Bei normalen Dokumenten muss man die Referenz auf das bereits geholte (das ja "mit diversen Werten gefüllt" wurde) erst löschen (z.B. Delete doc).
--- Ende Zitat ---
oh mann...delete...da muss man auch erstmal drauf kommen. Hatte diese Vermutung nämlich auch schon und es mit set doc = nothing probiert, weil ich es von anderen Sprachen so kenne, nur in Notes mag er das wohl nicht.
Werde es dann heut nachmittag/abend mal so probieren und berichten.
Vielen Dank.
Gruß
Demian
pram:
ein doc=nothing sollte aber auch reichen, wenn man es richtig macht und keine weitere Referenz mehr existiert. So z.B.:
--- Code: ---set doc = new NotesDocument(db)
... doc füllen
call doc.save(false,false)
id = doc.NoteID
set doc = nothing
call agent.runOnServer(id)
set doc = db.getDocumentById(id)
... doc lesen
call doc.remove()
--- Ende Code ---
Frohe Ostern
Roland
koehlerbv:
Es sei aber angemerkt, dass weder Delete noch Set to Nothing in diesem Zusammenhang mit ProfileDocs irgend etwas nützen. Man bräuchte ja sonst auch nur den Agent zweimal starten - das erste Terminate hätte ja das ProfileDocument-Object mit absoluter Sicherheit in die ewigen Jagdgründe geschickt ;)
Bernhard
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln