LotusScript: Dokumente auswählen

Dokumentauswahl per Stichtag

In der Version 7 steht Ihnen die neue Methode GetModifiedDocuments der Klasse NotesDatabase zur Lösung des Problems zur Verfügung. Über die beiden optionalen Parameter der Methode bestimmen Sie das Alter und die Art der vom Agenten zu berücksichtigenden Dokumente. Der erste Parameter since ist vom Typ NotesDateTime. Darin legen Sie das Datum fest, ab welchem die Dokumente berücksichtigt werden sollen. Wenn Sie für diesen Parameter keinen Wert angeben, wird als Defaultwert das Erstellungsdatum der Datenbank genutzt. Es werden somit alle Dokumente berücksichtigt.

Der zweite Parameter noteClass ist vom Typ Integer. Er bestimmt die Art der zu berücksichtigenden Dokumente. Als Defaultwert ist hier DBMOD_DOC_DATA gesetzt. Geben Sie also keinen Typ an, werden Datendokumente in die zu erstellende NotesDocumentCollection aufgenommen.Alternativ können Sie einen anderen Typ (Tabelle 1) oder auch mehrere Typen, verknüpft durch ein logisches Oder, angeben.

Konstante

Integerwert

DBMOD_DOC_ACL

64

DBMOD_DOC_AGENT

512

DBMOD_DOC_ALL

32767

DBMOD_DOC_DATA

1

DBMOD_DOC_FORM

4

DBMOD_DOC_HELP

256

DBMOD_DOC_ICON

16

DBMOD_DOC_REPLFORMULA

2045

DBMOD_DOC_SHAREDFIELD

1024

DBMOD_DOC_VIEW

8

Den Stichtag speichern

Zur Festlegung des Stichtags über den Parameter since verwenden Sie ein fixes Datum, einen Datumswert in Abhängigkeit vom Status der Anwendung oder auch einen im Dialog vom Anwender festgelegten Wert.

Eine weitere Möglichkeit bietet die Eigenschaft UntilTime der Klasse NotesDocumentCollection.Diese Eigenschaft ist vom Typ Readonly und beinhaltet den Zeitpunkt der Erstellung des Objekts NotesDocumentCollection – vorausgesetzt, die Methode GetModifiedDocuments wurde zu seiner Erstellung genutzt. Speichern Sie den von der Eigenschaft UntilTime zurückgegebenen Wert, zum Beispiel in einem Datenbankprofildokument, können Sie ihn bei der nächsten Ausführung des Agenten als Wert für den Parameter since verwenden. Es werden somit genau die Dokumente erfasst, welche seit der letzten Ausführung des Agenten erstellt oder verändert wurden. Eine Bearbeitung des Programmcodes des Agenten hat somit keine Auswirkung mehr auf die vom Agenten berücksichtigten Dokumente (Listing 2).

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
Dim ndt As NotesDateTime
Dim profildoc As NotesDocument
Set db = se.CurrentDatabase
'Kontrolle des Profildokuments ob Datum der letzten
'Agentausführung vorhanden
Set profildoc = db.GetProfileDocument("Profildok")
If profildoc.HasItem("DatAgentLauf") Then
' Agent wurde bereits ausgeführt
Set ndt = profildoc.GetItemValueDateTimeArray("DatAgentLauf")(0)
Set col = db.GetModifiedDocuments(ndt, DBMOD_DOC_DATA)
Else
' Erster Lauf des Agenten
Set col = db.GetModifiedDocuments(, DBMOD_DOC_DATA)
End If
If col.Count > 0 Then
Set doc = col.GetFirstDocument
While Not doc Is Nothing
'Mailerstellung analog zu Listing 1
...
...
Set doc = col.GetNextDocument(doc)
Wend
End If
'Zeitpunkt der Erstellung der NotesDocumentCollection in das
'Profildokument schreiben
Call profildoc.ReplaceItemValue("DatAgentLauf", col.UntilTime)
Call profildoc.Save(True, True, True)
End Sub

Analog zu LotusScript stehen Ihnen für die Programmierung von Java-Agenten die Methode Database.getModifiedDocuments und die Eigenschaft DocumentCollection.UntilTime zur Verfügung.