Lookup Email from NAB using first name and last name ONLY!

Following on from http://www.experts-exchange.com/Software/Office_Productivity/Office_Suites/Lotus_SmartSuite/Lotus_Notes/Q_26622828.html

Large company, plenty of duplicate First/Last names, haven't even looked at how they resolve that, either with different OU's or using middle names.

I have a field with first name and last name e.g. "Robert Smith", I need to lookup their email address from the NAB. There may or maybe not be multiple Robert Smith's. If there is only one, then I just want to populate the email field on my form with their email address. If there are multiple entries, I want a dialogue box to appear showing ONLY the people with that last name, so that the user can select the correct one from the list.

I am using LotusScript for this.
LVL 7
Sam654Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
mbonaciConnect With a Mentor Commented:
The line 12 is missing an argument, so it should be:

Set c = getAllUserDocumentsFromNAB( commonName )

Open in new window

0
 
RonaldZaalConnect With a Mentor Commented:
Hello,  you can try with this:

Dim adress As String
Dim sFormula As String
Dim eMail As Variant
dim thename as string

thename = "Smith"
sFormula = {@NameLookup([NoUpdate];"}+thename+{";"InternetAddress")}    ' formula to return emailaddress (es) from NAB
eMail = Evaluate(sFormula) ' returns array with 0,1 or multiple names
Msgbox eMail(0)   ' to test to return the first one found
0
 
RonaldZaalCommented:
and then you check the returning eMail array for number of values returned by the formula with a test on the Ubound value.

if ubound(eMail) = 0 then
msgbox "no name found!"
end
end if

if ubound(eMail) > 1 then .....
dialogbox to let the user choose one name from the arr eMail
else
msgbox eMail(0)   ' got only on name
end if
0
 
mbonaciCommented:
Modification of the function I mentioned in the previous thread to get all documents by user name:
Function getAllUserDocumentsFromNAB( UserCommonName As String ) As NotesDocumentCollection
        'MbĀ¤, 23.11.2010
        'The function returns all user documents from server's NAB
        Dim s As New NotesSession
        Dim nab As NotesDatabase
        Dim v As NotesView

        'if you're running this locally change the first (server) param
        'or you can use notesDatabaseArray = notesSession.AddressBooks
        Set nab = s.GetDatabase( s.CurrentDatabase.Server, "NAMES.NSF", False)
        If Nab Is Nothing Then Exit Function
        
        Set v = nab.GetView("($Users)")
        If v Is Nothing Then Exit Function
        
        Set getAllUserDocumentsFromNAB = v.GetAllDocumentsByKey( s.CommonUserName, True )
        
End Function

Open in new window


How to use the function in your case (i wrote it here so expect errors):
        Dim w As New NotesUIWorkspace
        Dim c As NotesDocumentCollection
        Dim cur As NotesDocument
        Dim lstUsers List As NotesDocument
        Dim arrUsers() As String
        Dim commonName As String
        Dim i As Integer
        Dim response As Variant
        
        commonName = "common username" 'you get this from somewhere...

        Set c = getAllUserDocumentsFromNAB(  )
        If c.Count = 0 Then Exit Sub 'or handle this case differently

        Set cur = c.GetFirstDocument

        If c.Count > 1 Then 'there's more than one - prompt the user to choose
                Redim arrUsers( c.Count - 1 )
                Do Until cur Is Nothing

                        'collect the values for dialog
                        arrUsers( i ) = cur.InternetAddress(0) & " " & cur.someOtherDistinctiveFieldFromUserDoc(0) '& more fields if you need more distinction, but be sure this is unique for each document, because duplicates wont be visible

                        'add document in our list (using the large key defined above) for later field retrieval
                        lstUsers( arrUsers( i ) ) = cur

                        i = i + 1
                        Set cur = c.GetNextDocument( cur )
                Loop

                response = w.Prompt( 4, "Select user", "Multiple users with the same name found. Select the correct one:", arrUsers(0), arrUsers )
                If Isempty( response ) Then
                        Messagebox "Cancelation", , "User was not chosen"
                Else
                        Set cur = lstUsers( CStr( response ) ) 'lookup document by key from our list
                End If
        End If

        'now cur is our document, regardless of whether we found one or more in view
        'pull data you want from it

Open in new window



Ask if this is too complicated...
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.