Terminate - Event von LotusScript Agenten
Manfred Meise 22 Mai 2012 19:39:47
'1. LS-Tests\4- AgentTerminate:
Option Public
Option Declare
Public blnIsRunnning As Boolean
Sub Initialize
blnIsRunnning = True
' - - Hier folgt die Anwendungslogik ---
blnIsRunnning = False
End Sub
Sub Terminate
If blnIsRunnning = True Then
' - - Behandlung der Abbruchsituation
End If
End Sub
Dieses Vorgehen funktionierte bislang ganz gut - bis heute. Da haben wir (anders als sonst) im Rahmen der Abbruchsituation nicht nur einen einfachen Eintrag in ein Protokolldokument oder die Serverkonsole gemacht, sondern umfangreichere Logik eingesetzt. Hier wurde dann plötzlich die Abarbeitung an beliebigen Stellen (meistens "If Then Else", "Select Case" oder weiteren Unterprogramm-/Methodenaufrufen) beendet (ohne weitere Hinweise). Schnell wird mir klar: hier gibt es eine maximale Ausführungszeit, nach der der Code abgebrochen wird (macht eigentlich viel Sinn!). Frage: Was ist die Ausführungsbegrenzung im Terminate-Event?
Ein einfacher Test sollte Aufschluss geben:
'1. LS-Tests\4- AgentTerminate:
Option Public
Option Declare
Public blnIsRunnning As Boolean
Sub Initialize
blnIsRunnning = True
' - - Hier folgt die Anwendungslogik ---
blnIsRunnning = False
End Sub
Sub Terminate
Dim i As Integer
If blnIsRunnning = True Then
' - - Behandlung der Abbruchsituation
Do While i < 20000
'Sleep (1)
Print "Durchgang: " & Cstr(i)
i = i + 1
Loop
End If
End Sub
Meine Erwartungshaltung war, dass dieser interaktive Agent nach irgendeiner Zeit die Arbeit einstellt. Weit gefehlt ! Für eine gewisse Zeit ist der Client "Busy" (Sanduhr), die dann verschwindet. Der Zähler in der Statusleiste läuft weiter, während einige Funktionen im Client möglich sind. So kann ich z.B. einen Datenbank-Öffnen Dialog starten, jedoch keine Datenbank öffnen. Ich kann in der Datenbankansicht der aktuellen Datenbank wechseln, doch kein Dokument öffnen. Ich kann die laufenden Funktionen nicht abbrechen (z.B. mit Strg-Break) sondern nur indem ich den Client beende.
Warte ich in der Behandlungsschleife pro Durchgang ein wenig, so läuft dieser Code kontrolliert bis zum Ende durch. Überraschend!
Leider habe ich somit immer noch keinen Hinweis, was die maximale Ausführungszeit oder -beschränkung im Terminate Event angeht. Schade - aber vielleicht hat jemand mehr Erkenntnisse gewonnen?
Zielgruppe: Entwickler Kategorien: Agenten LotusScript Diskussion: Kommentare [0]