Domino 9 und frühere Versionen > ND7: Entwicklung

Inbox bereinigen

(1/3) > >>

HarryB:
Hallo zusammen,

ich schreibe gerade einen Agenten, der einmal die Woche über die Mailbox laufen soll und alle Mails, die älter sind als 30 Tage, in einen anderen Ordner verschieben. Zusätzlich soll das ganze nur laufen, wenn mehr als 200 Dokumente in der Mailbox sind.

Nun ist es so, dass mein Code nicht alle Mails verschiebt, die den Kriterien entsprechen. Lasse ich den Agenten noch mal laufen, verschiebt er wieder ein paar Mails, aber wieder nicht alle. Die Frage ist: wo liegt mein Denkfehler?

Anbei mein Code.


--- Code: ---Sub Initialize

'Inbox Maintenance
'Periodisches Aufräumen des Meileingangs zur Performanceverbesserung

Const archiveFolder = "Maileingang - Archiv"
Const inboxLimit = 200 'Anzahl Dokumente
Const maxAge = 30 'in Tagen

Dim ses As New NotesSession
Dim currentDb As NotesDatabase
Dim inbox As NotesView
Dim mailDoc As NotesDocument
Dim moveDoc As NotesDocument
Dim movedDocs As Integer
Dim mailCreated As NotesDateTime
Dim cutoffDate As NotesDateTime

Set currentDb = ses.CurrentDatabase

'Eingangsordner heranziehen
Set inbox = currentDb.GetView("($Inbox)")

'Prüfen, wie viele Dokumente im Eingang liegen; wenn Limit überschritten, aktiv werden
If (inbox.EntryCount > inboxLimit) Then

'Wenn Schwellwert überschritten, alls Mails die älter sind als x Tage in Archiv verschieben
Set cutoffDate = New NotesDateTime(Cstr(Today))
Call cutoffDate.AdjustDay(-1 * maxAge)
Set mailCreated = New NotesDateTime("")

Set mailDoc = inbox.GetFirstDocument

While Not (mailDoc Is Nothing)

mailCreated.LSLocalTime = mailDoc.Created

If (cutoffDate.TimeDifference(mailCreated) > 0) Then

Set moveDoc = mailDoc

End If '(cutoffDate.TimeDifference(mailCreated) > 0)

Set mailDoc = inbox.GetNextDocument(mailDoc)

If Not (moveDoc Is Nothing) Then

movedDocs = movedDocs + 1

Call moveDoc.PutInFolder(archiveFolder, True)
Call moveDoc.RemoveFromFolder("($Inbox)")

Set moveDoc = Nothing

End If 'Not (moveDoc Is Nothing)

Wend 'Not (mailDoc Is Nothing)

End If '(inbox.EntryCount > inboxLimit)

Print Cstr(movedDocs) + " Dokumente verschoben"

End Sub
--- Ende Code ---

Vielen Dank
Harry

m3:
1) "ich schreibe gerade einen Agenten, der einmal die Woche über die Mailbox Inbox laufen soll und alle Mails, die älter sind als 30 Tage, in einen anderen Ordner verschieben. Zusätzlich soll das ganze nur laufen, wenn mehr als 200 Dokumente in der Mailbox Inbox sind." - dann versteht man auch, was Du meinst.

2) Ich würde eher über NotesView.AllEntries iterieren. Mit Löschen/Verschieben und GetNextDocument bin ich schon mal eingefahren.

3) Oder gleich mit NotesView.FTSearch nur die Dokumente bearbeiten, die den Kriterien entsprechen.

Driri:
Ist sichergestellt, daß der Archivordner existiert ? Sonst müßtest Du das auf jeden Fall noch abfangen.

So auf den ersten Blick fällt mir sonst nichts ins Auge. Alternativ zur Verwendung von 2 NotesDocuments (maildoc, movedoc) könntest Du auch für die Inbox das AutoUpdate deaktivieren und nach der Verarbeitung wieder aktivieren. Damit sparst Du dir das temporäre Zuweisen des zu verarbeitenden Dokumentes in ein zweites NotesDocument.

m3:

--- Zitat von: HarryB am 19.08.08 - 11:04:45 ---Nun ist es so, dass mein Code nicht alle Mails verschiebt, die den Kriterien entsprechen. Lasse ich den Agenten noch mal laufen, verschiebt er wieder ein paar Mails, aber wieder nicht alle. Die Frage ist: wo liegt mein Denkfehler?
--- Ende Zitat ---
In solchen Fällen schreibe ich bei jeder if-Abfrage einen Log-Eintrag. Damit sollte sich herausstellen, warum manche Dokumente nicht gleich genommen werden.

HarryB:

--- Zitat von: Driri am 19.08.08 - 11:25:18 ---Ist sichergestellt, daß der Archivordner existiert ? Sonst müßtest Du das auf jeden Fall noch abfangen.
--- Ende Zitat ---
Ja, das ist mit 'Call moveDoc.PutInFolder(archiveFolder, True)' bereits sichergestellt (das 'True' bezieht sich auf 'CreateOnFail'). Der Ordner wurd auch im ersten Durchlauf korrekt erstellt.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln