LotusScript: Dokumente auswählen

Agenten, die als auslösendes Ereignis die Einstellung Nachdem Dokument erstellt oder geändert wurde nutzen, spielen vor allem in Workflow- Anwendungen eine große Rolle. In der Version 7 von Notes Domino behebt eine neue Methode das bisherige Problem, dass nach der Bearbeitung des Agenten wieder alle Dokumente als neu angesehen werden.

In Workflow-Anwendungen ist es häufig notwendig, Informationen über neue oder veränderte Dokumente in einer Datenbank zu übermitteln. Dafür bietet sich zum Beispiel die ereignisgestützte Erstellung einer E-Mail mit Hilfe eines LotusScript-Agenten an. Als auslösendes Ereignis wählt man dafür "Nachdem Dokument erstellt oder geändert wurde". Die Dokumente werden in einem Objekt der Klasse NotesDocumentCollection durch die Methode Unprocessed- Documents der Klasse NotesDatabase zusammengestellt (Listing 1).

Sub Initialize
Dim se As New NotesSession
Dim db As NotesDatabase
Dim col As NotesDocumentCollection
Dim doc As NotesDocument
Dim maildoc As NotesDocument
Dim rti As NotesRichTextItem
Set db = se.CurrentDatabase
Set col = db.UnprocessedDocuments
If col.Count > 0 Then
Set doc = col.GetFirstDocument
While Not doc Is Nothing
'Mail erstellen
Set maildoc = New NotesDocument(db)
maildoc.Form ="Memo"
maildoc.SendTo = "Elmar Fuchs"
maildoc.Subject = "Neues Dokument in DB .,.."
Set rti = New NotesRichTextItem(maildoc, "Body")
Call rti.appendText("Link zum neuen Dokument")
Call rti.AddNewline(2)
Call rti.AppendDocLink(doc, "Link")
Call maildoc.Send(False)
'Dokumentstatus aktualisieren
Call se.UpdateProcessedDoc( doc )
Set doc = col.GetNextDocument(doc)
Wend
End If
End Sub

Je nach Auslastungsgrad des Domino-Servers wird die E-Mail innerhalb von 30 Minuten erstellt und an den Empfänger übermittelt. Nach der Programmierung des Agenten läuft dieser bei seiner ersten Ausführung über alle Dokumente. Anschließend werden nur noch neue bzw. veränderte Dokumente berücksichtigt.

Problematisch war in den Versionen bis Notes Domino 6 das Verhalten des Agenten bei einer notwendigen Bearbeitung seines Programmcodes. Bei der nächsten Ausführung des Agenten berücksichtigte er wieder alle Dokumente der Datenbank.

Eine Lösung des Problems stellte die Aufnahme eines zusätzlichen Feldes im Dokument dar, dessen Inhalt bestimmte, ob das Dokument bei der Ausführung des Agenten berücksichtigt wurde oder nicht. Allerdings bewirkt die Änderung des Feldinhaltes einen unter Umständen unangenehmen Nebeneffekt: die Kennzeichnung des Dokuments als ungelesen. Für den Anwender ist dies verwirrend.