Thursday, August 17, 2006

Programmatically export Lotus Notes contacts to VCard format

Lotus Notes 6 makes it possible to export contacts to VCard format. You can do it using File-Export menu. In the Export dialog box you can choose to export to VCard 2.1/3.0 format. After that you can import the resulting VCF file into Outlook.

But sometimes you would like to modify the format which the automated function uses. For example instead of "FirstName LastName/Company/Country" format in VCard's FN field you want to use simply "FirstName LastName", or you want to make a lookup to fetch the required field value.
"Export to VCard" option is available only in the databases of type "Domino Directory", you can not see that export option in regular Domino databases where you might have people documents.

Here is a LotusScript agent which runs on selected documents in any database and exports them to VCard fromat. The agent expects that the names of the fields in the documents are the same as in Address Book's "Person" form, so if you used other field names you must modify the agent. The agent's "Target" property is "All selected documents". Agent is run by choosing agent's name in the actions menu in a view after you've selected the documents you want to export.


'------------- AGENT START -----------
Sub Initialize
Dim session As New NotesSession
Dim nabdb As NotesDatabase
Dim nabdoc As NotesDocument
Dim nabcoll As NotesDocumentCollection
Dim vcardfile As String
Dim result As String
Dim linebreak As String
Dim fileNum As Integer

linebreak=Chr(13)+Chr(10)
vcardfile="c:\lotus_notes_contacts.vcf"

Set nabdb=session.CurrentDatabase
Set nabcoll=nabdb.UnprocessedDocuments
Print "Exporting"+Cstr(nabcoll.Count)+" documents to VCard "+vcardfile

If nabcoll.Count=0 Then Exit Sub

fileNum% = Freefile()
Open vcardfile For Output As #fileNum%

Set nabdoc=nabcoll.GetFirstDocument
While Not nabdoc Is Nothing

result="BEGIN:VCARD"+linebreak+ "VERSION:2.1"

result=result+linebreak+ "N:"+nabdoc.LastName(0)+";"+nabdoc.FirstName(0)+";"+nabdoc.MiddleName(0)+";"+nabdoc.Title(0)
If nabdoc.MiddleName(0)="" Then
FullName=nabdoc.FirstName(0)+" "+nabdoc.LastName(0)
Else
FullName=nabdoc.FirstName(0)+" "+nabdoc.MiddleName(0)+" "+nabdoc.LastName(0)
End If
result=result+linebreak+"FN:"+FullName
' result=result+linebreak+"NICKNAME:"+FullName
result=result+linebreak+"ORG:"+nabdoc.CompanyName(0)+";"+nabdoc.Department(0)
result=result+linebreak+"TITLE:"+nabdoc.JobTitle(0)
result=result+linebreak+"NOTE:"+nabdoc.Comment(0)
result=result+linebreak+"TEL;WORK;VOICE:"+nabdoc.OfficePhoneNumber(0)
result=result+linebreak+"TEL;HOME;VOICE:"+nabdoc.PhoneNumber(0)
result=result+linebreak+"TEL;CELL;VOICE:"+nabdoc.CellPhoneNumber(0)
result=result+linebreak+"TEL;WORK;FAX:"+nabdoc.OfficeFaxPhoneNumber(0)
result=result+linebreak+"TEL;HOME;FAX:"+nabdoc.HomeFAXPhoneNumber(0)
result=result+linebreak+"ADR;WORK:;"+nabdoc.OfficeCity(0)+";"+replaceLineBreak(nabdoc.OfficeStreetAddress(0))+";"+nabdoc.OfficeCity(0)+";"+nabdoc.OfficeState(0)+";"+nabdoc.OfficeZIP(0)+";"+nabdoc.OfficeCountry(0)
result=result+linebreak+"ADR;HOME:;;"+replaceLineBreak(nabdoc.StreetAddress(0))+";"+nabdoc.City(0)+";"+nabdoc.State(0)+";"+nabdoc.Zip(0)+";"+nabdoc.Country(0)
' result=result+linebreak+"URL;WORK:"+nabdoc.WebSite(0)
result=result+linebreak+"URL;HOME:"+nabdoc.WebSite(0)
result=result+linebreak+"PREF;INTERNET:"+nabdoc.InternetAddress(0)
result=result+linebreak+"EMAIL;INTERNET:"+nabdoc.MailAddress(0)

result=result+linebreak+"END:VCARD"

Print #fileNum%, result

Set nabdoc=nabcoll.GetNextDocument(nabdoc)
Wend

Close #fileNum%

End Sub


Function replaceLineBreak(oldString)
replaceFrom=Chr(13)+Chr(10)
replaceTo=", "
tmpString = Evaluate(|@ReplaceSubstring("| + oldString + |"; "|+replaceFrom+|"; "|+replaceTo+|")|)
replaceLineBreak=tmpString(0)
End Function

'------------- AGENT END -----------


Technorati:

12 comments:

Anonymous said...

How can I import from exchange 2003 to Lotus notes adressbok ?

Andrei Kouvchinnikov said...

Hello Stefan,
Unfortunately I don't have the Exchange 2003, so I don't know how the file looks like. Send me an example file and I'll take a look at it.

Unknown said...

Any idea why it might only grab one contact from my contacts? It appears the while loop is not working. I'm new to notes, so I don't know how to step through agent code...

Thanks, Mark

Ayyanar Jayabalan said...

I would like extract contacts list from the lotus notes using domino in C#.Net.

CODE:
-----
NotesSession NotesApp = new NotesSession();
NotesDatabase NotesDB = null;
NotesDocument doc = null;
NotesDocumentCollection docColl;
StringBuilder c = new StringBuilder();

try
{
NotesApp.Initialize("");

NotesDB = NotesApp.CurrentDatabase;
docColl = NotesDB.UnprocessedDocuments;


doc = docColl.GetFirstDocument();

while (doc != null)
{
c.Append(doc.GetFirstItem("FirstName"));

doc = docColl.GetNextDocument(doc);
}

MessageBox.Show(c.ToString());
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);

}
finally
{

}



----------------------

the above code is not working perfectly. i am getting exception in docColl = otesDB.UnprocessedDocuments; line.

Please advice how to extract contacts inforamtion .Net.

My mail ID (ayyanarj@gmail.com).

Advance Thanks
Ayyanar. J

Andrei Kouvchinnikov said...

Ayyanar, I think you can not use CurrentDatabase or UnprocessedDocuments property for this in C#.
I would try with something like this:

NotesDB = NotesApp.GetDatabase("","mydb.nsf");
docColl = NotesDB.AllDocuments;

or:
docColl = NotesDB.Search("Form="+chr(34)+"test"+chr(34), 0);

Andrei Kouvchinnikov said...

Mark, the code runs on selected documents. So you must select several documents in the view, otherwise it runs only on currently selected 1 document.

game videos said...

Thanks for posting this information, I will show it to my friend, he is huge fan of this. It's been a pleasure to read this post.
Hannah from SheepArcade
If you like to play games, visit sheep arcade and play adventure games and online games for free.

replacement window virginia said...

Thanks for sharing such useful codes I will sure try them.

Anonymous said...

Get instant NSF file to PST file converter for recovering and exporting Lotus Notes NSF to Outlook PST, EML and MSG file. Software can split converted PST file with whole versions of Lotus Notes and Outlook.


read more
http://www.nsftopst.exportnsfpst.com/

kelly said...

To export Lotus Notes contacts to VCard one can opt programmatical method in which user has to use many commands which need technical skills and are a little bit risky too. For risk-free and cost-free export one can choose a tool like eSoftTools free NSF to PST Converter Software. It is efficient enough to export all components of the mailbox which includes contacts, calendar, messages, notes, and other elements. It can convert NSF file into many different formats like PST, EML, HTML etc. It can even convert Lotus Notes contacts or address book into Vcard easily without leaving or modifying data.
Know more about Lotus Notes NSF to PST conversion here

jan smith said...

If you are looking for an EDB to PST Converter Tool to perform the conversion of Exchange EDB file to PST, So immediately try this best eSoftTools Exchange EDB to PST Converter software that provides the best way to export Offline EDB file database to PST File format. It Exports all mailboxes data like emails, calendars, contact, chats, attachments, journals, etc. It also performs the migration of Offline EDB file to MSG, HTML, EML, and EMLX file formats.

Get More Info:- Exchange EDB to PST Recovery

jonhwillam said...

windows live mail calendar