Sam654
asked on
Lookup Email from NAB using first name and last name ONLY!
Following on from https://www.experts-exchange.com/questions/26622828/How-to-lookup-a-users-email-address-in-a-Notes-Application.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.
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.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Modification of the function I mentioned in the previous thread to get all documents by user name:
How to use the function in your case (i wrote it here so expect errors):
Ask if this is too complicated...
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
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
Ask if this is too complicated...
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
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