Hello
Ich habe einen Agent, er alle 5 Minuten läuft und - sofern Dokumente vorhanden sind - eine andere Datenbank öffnet.
Mein Problem ist jetzt, dass hin und wieder der andere Server nicht erreichbar ist, was weniger ein Problem ist, da das abgefangen wird (siehe unten.)
Allerdings wird der Verbindungsstatus scheinbar zwischengespeichert, denn sobald die Verbindung einmal weg war, bleibt sie für den Agent weg. Starte ich den Agent später wieder von Hand funktionierts wieder. Bis zum nächsten mal wenn die Verbindung nicht hinhaut.
Woran kann das liegen und wie kann den Agent überreden es immer wieder von neuem zu versuchen? Kann ich wo ein Timeout oder dgl. setzen? (müsste ja fast gehen)
Dim targetdb As New NotesDatabase( "server", "target.nsf" )
If Not targetdb.IsOpen Then
Dim agentLog As New NotesLog("Agent log")
Call agentLog.OpenAgentLog
Call agentLog.LogAction("Couldn't connect to target Database!")
Call agentLog.Close
gotowork=False
Else
gotowork=True
End If
lg
Ich gehe normalerweise immer über eine Session zur DB...
dim s as new Notessession
dim db as notesdatabase
set db=s.currentdatabase bzw. s.getdatabase("server","db")
So wie Du es machst arbeitest Du immer im gleichen Session-Kontext und hast evtl. deshalb dieses Problem, welches ich noch nie hatte ::)
Ausprobiert hab ich das nicht, da der Agent funktioniert wenn er nur alle 10 Minuten läuft.
Slightly Off-Topic:
Ich gehe davon aus, dass alle Sessions die der Agent verwenden kann beendet werden, wenn der Agent beendet wird. Denn laut Doku der NotesSession Klasse gibt es immer nur eine Session per Skript.
O-Ton von IBM:
Since there can only be one session per script, the New method always returns the same object each time you call it.
Das würde implizieren, dass es nur eine Session gibt, die beim Start des Agents zurechtgelegt wird. Wenn ich mehrere Sessions initialisiere, ist das für die Katz', denn ich würde immer nur diese eine bekommen.
Weiters sehe ich keine Methode eine Session zu schliessen, was in meinen Augen bedeutet, dass sobald das Skript am Ende ist, die Session(s?) automatisch zerstört wird. Läuft kein Agent und benutzt keiner die Datenbank gibt es keine Sessions - erst wenn ein Agent wieder anstartet.
Ein kleiner Test dazu:
Sub Initialize
Dim session As New NotesSession
Dim doc1 As NotesDocument
Set doc1 = session.SavedData
Sleep(2)
Dim session2 As New NotesSession
Dim doc2 As NotesDocument
Set doc2 = session.SavedData
If (doc1.UniversalID = doc2.UniversalID) Then
Print "Gleiches Dokument?!"
End If
End Sub
Starte ich das Skript oben, sollten 2 Session initialisiert werden, aber das SavedData Dokument ist bei beiden das gleiche, obwohl das ja Session-spezifisch sein sollte. Das würde bedeuten, dass es wirklich immer nur eine Session pro Agent gibt (wie die Doku auch meint). Die wird am Ende des Skripts zerstört und beim neuen Starten wieder neu erstellt, da die UniversalID vom SavedData Dokument immer unterschiedlich ist.
Kann mich natürlich auch irren, aber zumindest sehe ich das so. ;)