Willkommen
Gast
. Bitte
einloggen
oder
registrieren
.
23.05.12 - 16:30:50
News:
Schnellsuche:
Das Notes Forum
Lotus Notes / Domino 7
ND7: Entwicklung
(Moderatoren:
eknori
,
Glombi
,
koehlerbv
)
Inbox bereinigen
« vorheriges
nächstes »
Seiten:
[
1
]
Autor
Thema: Inbox bereinigen (Gelesen 1799 mal)
HarryB
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 521
Inbox bereinigen
«
am:
19.08.08 - 11:04:45 »
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
Vielen Dank
Harry
«
Letzte Änderung: 19.08.08 - 14:02:16 von HarryB
»
Gespeichert
Harald "HarryB" Börger
2 x 7.0.2FP1 auf AIX (Cluster)
1 x 7.0.2FP2 auf AIX
1 x 6.5.5 auf AIX
4 x 7.02.FP2 auf WIN
Clients: 7.0.2
m3
Moderatoren
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 7269
Non ex transverso sed deorsum!
Re: Inbox bereinigen
«
Antworten #1 am:
19.08.08 - 11:19:46 »
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.
Gespeichert
HTH
m³ aka. Martin --
leyrers online pamphlet
|
LEYON - All things Lotus (IBM Collaborations Solutions)
All programs evolve until they can send email.
Except Microsoft Exchange.
-
Memorable Quotes from Alt.Sysadmin.Recovery
"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett
Weeks of programming can save you hours of planning!
Driri
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 6136
Re: Inbox bereinigen
«
Antworten #2 am:
19.08.08 - 11:25:18 »
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.
Gespeichert
Gruß, Ingo
------------------------------------------------------------
11 Domino-Server (8.5.3 auf i5 und Windows)
2500 Notes 8.0.2, 100 Notes 6.5
IBM Content Manager / Content Collector für Mailarchivierung
ClearSwift Appliance (Anti-Spam, Anti-Virus)
Axceler NOTRIX
iAnywhere MobileOffice 5.7, in Ablösung
ca. 320 Smartphones (SymbianOS)
Lotus Notes Traveler 8.5.3
ca. 300 Smartphones (Android)
m3
Moderatoren
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 7269
Non ex transverso sed deorsum!
Re: Inbox bereinigen
«
Antworten #3 am:
19.08.08 - 11:32:04 »
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?
In solchen Fällen schreibe ich bei jeder if-Abfrage einen Log-Eintrag. Damit sollte sich herausstellen, warum manche Dokumente nicht gleich genommen werden.
Gespeichert
HTH
m³ aka. Martin --
leyrers online pamphlet
|
LEYON - All things Lotus (IBM Collaborations Solutions)
All programs evolve until they can send email.
Except Microsoft Exchange.
-
Memorable Quotes from Alt.Sysadmin.Recovery
"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett
Weeks of programming can save you hours of planning!
HarryB
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 521
Re: Inbox bereinigen
«
Antworten #4 am:
19.08.08 - 11:41:45 »
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.
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.
Gespeichert
Harald "HarryB" Börger
2 x 7.0.2FP1 auf AIX (Cluster)
1 x 7.0.2FP2 auf AIX
1 x 6.5.5 auf AIX
4 x 7.02.FP2 auf WIN
Clients: 7.0.2
HarryB
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 521
Re: Inbox bereinigen
«
Antworten #5 am:
19.08.08 - 11:43:39 »
Zitat von: m3 am 19.08.08 - 11:19:46
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.
Wir korrigiert.
Zitat von: m3 am 19.08.08 - 11:19:46
2) Ich würde eher über NotesView.AllEntries iterieren. Mit Löschen/Verschieben und GetNextDocument bin ich schon mal eingefahren.
Über AllEntries bin ich auch gestolpert. Ich probiere das mal.
Zitat von: m3 am 19.08.08 - 11:19:46
3) Oder gleich mit NotesView.FTSearch nur die Dokumente bearbeiten, die den Kriterien entsprechen.
Es sind nicht alle Datenbanken volltextindiziert. Das ist dann auch kein Spaß.
Viele Grüße
Harry
Gespeichert
Harald "HarryB" Börger
2 x 7.0.2FP1 auf AIX (Cluster)
1 x 7.0.2FP2 auf AIX
1 x 6.5.5 auf AIX
4 x 7.02.FP2 auf WIN
Clients: 7.0.2
HarryB
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 521
Re: Inbox bereinigen
«
Antworten #6 am:
19.08.08 - 13:26:48 »
Zitat von: m3 am 19.08.08 - 11:19:46
2) Ich würde eher über NotesView.AllEntries iterieren. Mit Löschen/Verschieben und GetNextDocument bin ich schon mal eingefahren.
Damit klappt es.
Anbei das funktionierende Script.
Code:
Sub Initialize
'Inbox Maintenance
'Periodisches Aufräumen des Meileingangs zur Performanceverbesserung
Const archiveFolder = "Maileingang - Archiv" 'Name des anzulegenden Ordners
Const inboxLimit = 200 'Anzahl Dokumente
Const maxAge = 30 'in Tagen
Dim ses As New NotesSession
Dim currentDb As NotesDatabase
Dim inbox As NotesView
Dim allEntries As NotesViewEntryCollection
Dim mailEntry As NotesViewEntry
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 allEntries = inbox.AllEntries
Set mailEntry = allEntries.GetFirstEntry
While Not (mailEntry Is Nothing)
Set mailDoc = mailEntry.Document
mailCreated.LSLocalTime = mailDoc.Created
If (cutoffDate.TimeDifference(mailCreated) > 0) Then
Set moveDoc = mailDoc
End If '(cutoffDate.TimeDifference(mailCreated) > 0)
Set mailEntry = allEntries.GetNextEntry(mailEntry)
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)
End Sub
Gespeichert
Harald "HarryB" Börger
2 x 7.0.2FP1 auf AIX (Cluster)
1 x 7.0.2FP2 auf AIX
1 x 6.5.5 auf AIX
4 x 7.02.FP2 auf WIN
Clients: 7.0.2
Hirnbeisz
Frischling
Offline
Geschlecht:
Beiträge: 26
Re: Inbox bereinigen
«
Antworten #7 am:
19.08.08 - 19:23:18 »
Im Ausgangsscript hätte aus meiner Sicht auch ein
If Not (moveDoc Is Nothing) Then
Set mailDoc = inbox.GetfirstDocument
else
Set mailDoc = inbox.GetNextDocument(mailDoc)
gereicht!
Gruß Aloisius!
«
Letzte Änderung: 19.08.08 - 21:52:46 von Hirnbeisz
»
Gespeichert
Gruß Aloisius
koehlerbv
Moderator
Gold Platin u.s.w. member:)
Online
Geschlecht:
Beiträge: 19050
Re: Inbox bereinigen
«
Antworten #8 am:
19.08.08 - 20:28:04 »
Das ist richtig.
Probleme treten sonst allein schon bei ResponseDocs auf, da mit RemoveFromFolder diese automatisch mitgenommen werden. An sich ist das lieb und nett von Notes, aber mit solchen Konstrukten fällt man dann eben auf die Nase.
Bernhard
@"Hirnbeisz": Hast Du auch einen richtigen Namen? Das wird hier sehr gern gesehen.
Auf jeden Fall aber Danke einen Deinen helfenden Einstieg hier.
Gespeichert
HarryB
Gold Platin u.s.w. member:)
Offline
Geschlecht:
Beiträge: 521
Re: Inbox bereinigen
«
Antworten #9 am:
26.08.08 - 09:43:24 »
Zitat von: koehlerbv am 19.08.08 - 20:28:04
Probleme treten sonst allein schon bei ResponseDocs auf, da mit RemoveFromFolder diese automatisch mitgenommen werden. An sich ist das lieb und nett von Notes, aber mit solchen Konstrukten fällt man dann eben auf die Nase.
Ist das auch bei Ansichten/Ordnern so, in denen die Antworten nicht hierarchisch angezeigt werden?
Viele Grüße
Harry
Gespeichert
Harald "HarryB" Börger
2 x 7.0.2FP1 auf AIX (Cluster)
1 x 7.0.2FP2 auf AIX
1 x 6.5.5 auf AIX
4 x 7.02.FP2 auf WIN
Clients: 7.0.2
koehlerbv
Moderator
Gold Platin u.s.w. member:)
Online
Geschlecht:
Beiträge: 19050
Re: Inbox bereinigen
«
Antworten #10 am:
27.08.08 - 23:17:29 »
Da dort ebenso mit der Responses-Property gearbeitet wird: Ja.
Bernhard
Gespeichert
Seiten:
[
1
]
« vorheriges
nächstes »
Gehe zu:
Bitte wählen Sie ein Ziel:
-----------------------------
ATNOTES TEAM
-----------------------------
=> Neuigkeiten - Wichtiges
===> Archiv
-----------------------------
Lotus Notes / Domino 8
-----------------------------
=> ND8: Administration & Userprobleme
=> ND8: Entwicklung
=> ND8: Entwicklung - XPages
-----------------------------
Lotus Notes / Domino 7
-----------------------------
=> ND7: Administration & Userprobleme
=> ND7: Entwicklung
-----------------------------
Lotus Notes / Domino 6
-----------------------------
=> ND6: Administration & Userprobleme
=> ND6: Entwicklung
-----------------------------
Domino 5 und frühere Versionen
-----------------------------
=> Administration & Userprobleme
=> Entwicklung
-----------------------------
Lotus Notes / Domino Sonstiges
-----------------------------
=> Tipps und Tricks
=> Tools & Downloads
=> Projekt Bereich
===> Help-Desk Applikation !!Help!!
=> Java und .NET mit Notes/Domino
=> Companion Products
=> OLE/COM-Programmierung
=> Aus- und Weiterbildung
-----------------------------
Best Practices
-----------------------------
=> At Notes Best Practices
=> Diskussionen zu Best Practices
-----------------------------
Sonstiges
-----------------------------
=> Offtopic
=> Kritik & Vorschläge
=> Infrastruktur
=> Job Suche/Angebote
1 Stunde
1 Tag
1 Woche
1 Monat
Immer
Einloggen mit Benutzername, Passwort und Sitzungslänge
Powered by SMF 1.1.16
|
SMF © 2006, Simple Machines
Impressum Atnotes.de -
Powered by Syslords Solutions -
Datenschutz
| Partner:
Tinte / Toner günstig