Search this blog...


Get Rules From Users Mailfile

A few days ago I was asked to create a report about all rules in all mailfiles. The easiest way to do this is to write an agent to examine the mailfiles.
The result of this scan is stored in a Notes database.
Put the following code into an agent ( start: manually from menue, target: All Selected Documents 

Sub Initialize
On Error Resume Next
Dim session As New NotesSession
Dim NAB As NotesDatabase
Dim resultDocs As NotesDocumentCollection
Dim MailFiles As NotesDocumentCollection

Dim doc As NotesDocument
Dim NABDoc As NotesDocument
Dim rtitem As Variant
Dim MailFileItem As NotesItem
Dim i As Integer
Dim NabDocCounter As Integer
Dim fNAME As String
Dim logline As String
Set NAB = session.CurrentDatabase
Set MailFiles = NAB.UnprocessedDocuments

Dim RetCode As Integer
Dim MailServer As String
Dim MailFile As String

Dim db_AllDocsCol As NotesDocumentCollection
Dim db_User As String
Dim archiveDb As New NotesDatabase( "", "RULEZ.NSF" )
Dim k As Integer
For NabDocCounter = 1 To MailFiles.Count
  db_User = ""
  Set NABDoc = MailFiles.GetNthDocument ( NABDocCounter )
  Set MailFileItem = NABDoc.GetFirstItem ( "LastName" )
  db_User = MailFileItem.Text & ", "
  Set MailFileItem = NABDoc.GetFirstItem ( "FirstName" )
  db_User = db_User + MailFileItem.Text

  Set MailFileItem = NABDoc.GetFirstItem ( "MailServer" )

  MailServer = MailFileItem.Text
  Set MailFileItem = NABDoc.GetFirstItem ( "MailFile" )
  MailFile = MailFileItem.Text
  Dim db As New NotesDatabase ("", "" )
  Call db.Open ( MailServer, MailFile )

  If db.IsOpen Then

  Dim dateTime As New NotesDateTime(_
  Cstr(Datenumber(2000, 5, 1)))

  Set resultDocs = db.Search( {@UpperCase(Form)="MAILRULE"}, dateTime,0)

  Call ResultDocs.StampAll ("RuleOwner", db_user)
  For k = 1 To resultDocs.Count
    Set doc = resultDocs.GetNthDocument ( k )
    Call doc.CopyToDatabase ( archiveDB )
  End If
End Sub

No comments:

Post a Comment