ich habe eben mal ein Agentileinchen geschrieben, der massenweise Dokumente in einen Ordner verschiebt. Selbiges habe ich dann manuell nachvollzogen (copy & paste). Im Bild siehst Du das Ergebnis. Vulgo: Mir ist da eine Begrenzung im Bereich realistischer Zahlen für Dokumente in Ordnern nichts bekannt
Hallo Bernhard,
vielen Dank für Deine super schnelle und begründete Antwort!
Ein "Ordner" mit 11.149 Do kumenten ist kein Ordner, sondern ein Un-Ordner. Sowas wäre bestenfalls ein Fall für eine Ansicht.
Leider müssen wir anscheinend beim Ordner bleiben:
Ein Benutzer hatte bis vor Kurzem etwa 140.000 Emails in seiner Maildatei - und alle in der Inbox...
Einige Emails wurden inzwischen gelöscht, jetzt hat er dort etwa 60.000 Emails auf welche er nicht verzichten will...
Er hätte nichts dagegen, wenn alle älteren als 60 Tage Emails aus der Inbox in einen anderen Ordner automatisch verschoben würden.
Ich habe eine Kopie seiner Maildatei erstellt und beim Testen des Agenten das o.g. Problem festgestellt.
Egal was ich ändere, bleibt das Problem mit den 11.149 Dokumenten erhalten... :(
Gruß
Leo
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As NotesView
Dim days As Integer
Set db = s.CurrentDatabase
Set view = db.GetView("($Inbox)")
Set doc = view.GetLastDocument
For i = 1 To 1980 'bis zu 990 Stück Emails werden verschoben (bei mehr kommt Fehler "Overflow")
days = Date - doc.Created
If days > 60 Then
Call doc.PutInFolder("Alte Mails")
Call doc.RemoveFromFolder("($Inbox)")
z=z+1
End If
Set doc = view.GetPrevDocument(doc)
i=i+1
Next
Print z 'Anzahl der verschobenen Emails wird angezeigt
End Sub
Hallo Axel,
vielen Dank für Deine Bemerkungen!
Wenn Du schon mit einer numerischen Schleife arbeitest, dann spar Dir das For i = 1 to schießmichtot, dann kannst Du mit while not doc is nothing besser agieren
Ich habe heute die folgende Version erstellt, sieht aber so aus, dass der Agent nicht jedes Dokument, sondern nur jedes zweite nimmt... :(
Gruß
Leo
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim view As NotesView
Dim days As Variant 'kein Integer !
Set db = s.CurrentDatabase
Set view = db.GetView("($Inbox)")
Set doc = view.GetfirstDocument
Do Until doc Is Nothing
days = Date - doc.Created
Print days
If days > 60 Then
'Call doc.PutInFolder("Alt")
Call doc.RemoveFromFolder("($Inbox)")
End If
Set doc = view.GetNextDocument(doc) 'anscheinend dadurch wird nicht jedes sondern nur jedes zweite Dokument verschoben... :(
Loop
End Sub
Hallo Thomas,
Du willst also die Dokumente in der View "$Inbox" von hinten nach vorn abarbeiten
Ja, da als ich in meiner allerersten Variante von oben angefangen hatte, war sofort der Fehler "Overflow" gekommen.
Ich wusste damals nicht, dass dies an der Variable liegt...
... Du sucht jetzt das nächste (vorhergehende) Dokument zu doc in der View $Inbox
doc hast Du aber gerade aus dem Ordner $Inbox entfernt
??? was ist der Vorgänger eines Dokumentes, das nicht mehr in der View
existent ist ???
Vielen Dank für Deine Anmerkungen!
Jetzt ist mir klarer, warum ich in der Bedingung der Schleife die doppelte Zahl der zu verschiebenen Emails angeben musste...
'For i = 1 To 1980 'bis zu 990 Stück Emails werden verschoben (bei mehr kommt Fehler "Overflow")
Gruß
Leo
Lies Dir nochmal Thomas' Post durch. Dein Problem macht er dort offensichtlich, und daraus ergibt sich die Lösung. Begriff für die Forumssuche: "adt argument"
Danke, Bernhard.
Ich habe das Topic gefunden http://atnotes.de/index.php/topic,41612.20.html
In dem Posting von Glombi stehen sehr gute Hinweise.
Jetzt funktioniert der Agent einwandfrei.
VIELEN DANK AN ALLE BETEILIGTEN !!!
:knuddel:
Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim docNext As NotesDocument
Dim view As NotesView
Dim days As Variant
Dim k As Variant
Set db = s.CurrentDatabase
Set view = db.GetView("($Inbox)")
Set doc = view.GetfirstDocument
k = 0
Do Until doc Is Nothing
Set docNext = view.GetNextDocument(doc)
days = Date - doc.Created
Print days 'falls Agent manuell gestartet wird...
If days > 60 Then
Call doc.RemoveFromFolder("($Inbox)")
k=k+1
End If
Set doc = docNext
Call view.Refresh 'ohne Refresh würde nicht jedes sondern nur jedes zweite Dok verschoben !
Loop
Print k & " Emails verschoben" 'Anzahl der verschobenen Emails wird angezeigt
End Sub