Das Notes Forum

Lotus Notes / Domino Sonstiges => Tipps und Tricks => Thema gestartet von: meichhorner am 17.10.03 - 10:53:56

Titel: Inbox Recover
Beitrag von: meichhorner am 17.10.03 - 10:53:56
Hallo,

einige von euch hatten ja schon mal Probleme das nach irgendwelchen Aktionen die Inbox leer war und diese Dokumente nun nur noch in der Ansicht Alle Dokumente vorhanden waren.

Hier ein Script das Abhilfe schaffen sollte (habe es selber noch nicht ausprobiert) ;)

Code
Sub Click (Source As Button)

'**********************************************************************
' This script builds an array of documents that are included in a 
'folder. It then compares each document in the All Documents view to 
'each document in the array. If it finds one, it breaks out and 
'continues onto the next document. If it reaches the end of the array,
'then it hasn't found a match and the document is moved to the Inbox 
'folder.
'**********************************************************************

Dim s As New notessession
Dim db As notesdatabase
Dim fDoc As NotesDocument ' Document in folder
Dim ad As notesview ' All Documents view
Dim aDoc As notesdocument ' document in All Docs view
Dim fUNID() As String ' array of UNID's of docs in folders
Dim i As Integer ' UNID array index
Dim deldate As notesitem
Dim Chair1 As notesitem

i =0
Set db = s.CurrentDatabase

' Build UNID array by looping through folders, then their documents
Forall view In db.views
     If view.IsFolder And Not view.Name=("($All)") Then
           Set fDoc = view.GetFirstDocument
           While Not fDoc Is Nothing
                 Redim Preserve fUNID(i)
                 fUNID(i) = fDoc.UniversalID
                 i=i+1
                 Set fDoc = view.GetNextDocument(fDoc)
           Wend
     End If
End Forall

' Loop through docs in the All Documents view and compare UNIDs to each 
doc
in the array
Set ad = db.GetView("($All)")
Set aDoc = ad.GetFirstDocument
While Not aDoc Is Nothing
     i = 0
     Do While i <= Ubound(fUNID)
           If fUNID(i) = aDoc.UniversalID Then
                 Exit Do
           End If
           i = i + 1
     Loop
     Set deldate = adoc.getfirstitem("delivereddate")
     Set Chair1 = adoc.getfirstitem("CHAIR")
     If i > Ubound(fUNID) And Not deldate Is Nothing And Chair1 Is
Nothing Then
           Call adoc.PutInFolder( "($Inbox)")

      End If
     Set aDoc = ad.GetNextDocument(adoc)
Wend
End Sub

Titel: Re:Inbox Recover
Beitrag von: Glombi am 17.10.03 - 11:29:35
Von der Logik sieht es ok aus. Wegen der Performance: Das würde ich dann mal vor dem Mittagessen anstoßen und ein 5-Gang-Menü einnehmen.

Danke für das Script - könnte mal ganz nützlich sein.

Andreas
Titel: Re:Inbox Recover
Beitrag von: meichhorner am 17.10.03 - 11:49:12
So, hab es jetzt gerade mal getestet ;D

MailDB - 300 MB
Dokumente gesamt 555 davon in der Inbox 105

Script-Laufzeit : ca. 5 Minuten



Titel: Re:Inbox Recover
Beitrag von: Semeaphoros am 17.10.03 - 11:55:20
... abgesehen davon, das ist ja schliesslich ein Flickwerkzeug, ist doch egal, wenn das Ding ein 5GangMenu braucht, lieber das als ein 5-Gang-Auto, das lässt sich nicht aufessen :-)
Titel: Re:Inbox Recover
Beitrag von: Glombi am 17.10.03 - 15:30:23
Die Performance hängt nicht nur von der Anzahl der Dokumente ab , sondern auch von der Anzahl der Folder in der Datenbank.

Auf Deiner Maschine braucht das Script ca. 0,55 Sek pro Dok.
Für ein 5-Gang-Menü braucht man schätzungsweise 2 Std = 7200 Sek.

Also, wenn ich ca. 13000 Dokumente habe, klappts auch mit dem Essen  ;)

Maaaahlzeit!
Andreas
Titel: Re:Inbox Recover
Beitrag von: ghost am 17.10.03 - 16:22:23
Gerade eben rief mich eine Kollegin an, die sich irgendwie den Inbox-Folder gelöscht hatte.

Da kam das Script von meichhorner gerade richtig. Hat perfekt funktioniert.

Vielen Dank und viele Grüße
ghost
Titel: Re:Inbox Recover
Beitrag von: Semeaphoros am 17.10.03 - 16:43:19
 :) meichhorner, der ghost-writer ..... :D
Titel: Re:Inbox Recover
Beitrag von: meichhorner am 17.10.03 - 17:06:12
Danke, danke, danke, .....  ;D ;D ;D
Titel: Re:Inbox Recover
Beitrag von: stefanst am 23.10.03 - 16:21:15
blöde Frage.......
wo muss ich das Script einfügen, bzw. aus welche Ansicht heraus rufe ich es auf.... ?

Danke

Gruß
Stefan
Titel: Re:Inbox Recover
Beitrag von: ghost am 23.10.03 - 17:48:51
Hallo Stefan,

ich habe das Script in einen Agenten gepackt und den Agenten auf 'Run Once' gestellt.

Viele Grüße
ghost
Titel: Re:Inbox Recover
Beitrag von: meichhorner am 24.10.03 - 08:45:51
Hy,

also das Script könnt ihr hinpacken wo ihr wollt ;D

Mail, Button, Agenten etc.

Das Script ist so geschriebeen das es sowieso immer die Ansicht $All verwendet. ;)

Cu
Martin
Titel: Re:Inbox Recover
Beitrag von: Jörg P. am 24.10.03 - 11:29:54
Hi,

Cooles Script. Danke für den Tip.

Zur (möglicherweise schlechten) Performance:

Könnte ich nicht zuerst die Anzahl der Dokumente bestimmen und das Array fUNID gleich passend Dimensionieren. Somit kann ich das Redim sparen, was bei einer grossen Anzahl von Dokumenten recht Zeitfressend sein kann, oder?
Titel: Re:Inbox Recover
Beitrag von: meichhorner am 24.10.03 - 11:33:45
Hy,

kannst es ja mal austesten und uns Bescheid geben ob sich ein Performancevorteil daraus ergibt ;)

Cu
Martin