Using iNotes' Person Documents

The advantage of relying on the "person" documents contained in the iNotes (Domino Web Access, DWA) mailfile instead of those in the personal addressbook on a Notes workstation, is that they travel with the mailfile, i.e. They replicate with mail and calendar documents.

I have stopped using the address book synchronization, as I recently explained. Instead, a small agent removes existing addresses in the PNAB and copies those from the mailfile.

Before continuing, you ought to create a backup of the personal address book (file, database, new copy)

Create a new Lotusscript agent as follows:

Create agent

And copy this script into it

Sub Initialize
        ' Reload PNAB from mailfile people, destroying target documents
        Dim s As New NotesSession
        Dim maildb As NotesDatabase
        Dim ws As New NotesUIWorkspace
        Dim askme As Variant
       
        Dim doc As NotesDocument
        Dim user As String
        Dim msg As String
        Dim ndocs As Integer
        Dim n As Integer
       
        user = s.UserName
        Set maildb = s.CurrentDatabase
       
        Dim CalendarProfile As NotesDocument
        Set CalendarProfile = maildb.GetProfileDocument("CalendarProfile")
        If user <> CalendarProfile.owner(0) Then
                Messagebox "This is not your mailfile. Will not do restore!", 16, "PNAB"
                Exit Sub
        End If
       
        Set maildb = s.CurrentDatabase
       
        Dim pnab As New NotesDatabase( "", "names.nsf" )
        If Not pnab.IsOpen Then
                Messagebox( "Can't open PNAB (names.nsf): Stop" )
                Exit Sub
        End If
       
        Dim collection As NotesDocumentCollection
        Dim selection As String
        Dim formula As String
       
        ' Find and remove all Person & Group documents in current names.nsf
       
        formula = "Form = ""Person"" | Form = ""Group"" "
        Set collection = pnab.Search( formula, Nothing, 0 )
        If collection.Count > 0 Then
                msg = "The current Personal Address Book has " & _
                collection.Count & " documents which need to be deleted. Is it OK to delete these?"
                askme = ws.Prompt(PROMPT_YESNO, "PNAB: Delete old documents?", msg)
                If askme = 0 Then
                        Messagebox "Nothing deleted. Nothing restored. Exit", 0, "PNAB"
                        Exit Sub
                End If
               
                For n = 1 To collection.Count
                        Set doc = collection.GetNthDocument(n)
                        Call doc.Remove(True)
                Next
        End If
       
        ' Find all Person and Group documents in the Mailfile.
        ' copy these documents from mailfile to PNAB
       
        formula = "Form = ""Person"" | Form = ""Group"" "
       
        Set collection = maildb.Search( formula, Nothing, 0 )
       
        ndocs = 0
        For n = 1 To collection.Count
                Set doc = collection.GetNthDocument(n)
                doc.FUPPSdn = user
               
                ' doc.NameDisplaypref = "1"   ' Firstname Lastname
                doc.NameDisplayPref = "2"   ' Lastname, Firstname
               
                ' Contacts which are created by a Web browser have no
                ' Type in the document. I'm going to set it here...
                ' The same occurs in Groups, but I cannot set them here because
                ' WebGroups are created with email address only and NotesGroups
                ' with the FullName of the Contact
                If doc.Form(0) = "Person" And doc.Type(0) = "" Then
                        doc.Type = "Person"
                End If
                If doc.Form(0) = "Group"  Then
                        If Not doc.HasItem("Type")  Then
                                Dim f1 As NotesItem
                                Set f1 = doc.AppendItemValue( "Type" , "Group")
                        End If
                        If Not doc.HasItem("GroupType") Then
                                Dim f2 As NotesItem
                                Set f2 = doc.AppendItemValue( "GroupType" , "1")
                        End If
                End If
                Call doc.Save(True,True)
                Call doc.CopyToDatabase(pnab)
                ndocs = ndocs + 1
        Next
        msg = ndocs & " restored to personal address book from mailfile"
        Messagebox msg, 0, "PNAB"
End Sub
 

Download this code: lotus/pnab-reload.lss

Depending on whether you prefer names sorted by first or last names, adjust the line which sets the preference. I want names sorted by surname, which is how it is set. If you prefer sorting by first or given name, set NameDisplayPref to the value 1.

Notice that I have removed the Synchronize Address Book agent from my mail file in so as to not use it by mistake.

Actions menu

Choose Recreate PNAB People from the Actions menu to launch the agent. If you already have people in your personal address book on the workstation (names.nsf), the agent will request permission to delete those.

Start the agent

If you answer with No, the agent terminates and doesn't otherwise alter anything. Answering yes to the question lets the agent remove all person (not connection or other documents) from your names.nsf, and it then copies all person and group documents from your mail file into your personal address book, indicating how many where thus created

Agent result

This function can be used on each of your workstations without endangering the addresses in the person documents of the mail file. Do note that any changes to the names.nsf will of course be clobberred at the next run.

If you want read/write access to the address book in your mailfile, use iNotes to access it.

Post a Comment

*Required Full name
*Required (Never published)