Your Inbox in your mail file has become corrupt for whatever reason. Because the Inbox is a folder, it does not use selection formulas to give a collection of documents. It is built by the router depositing messages there. Once the folder is destroyed or replaced, the collection is lost with it. After replacing it with a new one, only new documents will be deposited in it from that point on.
Below is a script that can be used to repopulate your Inbox with the older mail messages that have not been currently filed in folders. The script can be placed in a button and mailed to the users who need it.
NOTE: It is very important to make a backup of the mail file before using it.
This script agent moves ANY document that does not exist in a folder to the Inbox. This means that some documents that only exist in the All Documents view will also be moved. This includes documents such as Profile documents and Organizer Setup documents. When finished, the user should select these documents and choose Actions, Remove From Folder from the menu.
NOTE: Deleting a document from any view or folder deletes it entirely from the database.
'************************************************************
' 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.
'************************************************************
Sub Initialize
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
Redim fUNID(0)
' 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
Lotus Software KnowledgeBase Document# 152633
Hi,
I have tested this Script and I found an error in the last part (line 35 and 38). The last part must be look like this:
Enjoy
Wenn das Array fUNID die 65kB-Marke sprengt, tritt ein nicht abgefangener Fehler auf. Das passiert, wenn mehr als ca. 1800 Mails in Ordnern sind.
Vielleicht kann jemand das Script überarbeiten mit der Listenumwandlung.
Hallo,
vielen Dank für den Code.
Habe Ihn ein wenig überarbeitet (Liste statt Array und div. Kleinigkeiten)
Daniel