by Gregory Mazarakis
23. April 2009 02:03
It didn’t take much time to find out that approaching your Lotus Notes client using .NET technology can be done by using an interop assembly, name Interop.Domino.dll. After I found this piece of information I got so excited because there seemed to be a standardized way to approach the Lotus Notes client. And indeed, the assembly is filled with objects, interfaces, variables and methods that all reassemble around the functionality used within the client.
In a second stage into my research I thought I would “quickly” gather some documentation in regards to the interop assembly so I can understand the structure of the objects, the relation they have as also to locate the exact location of the data I need, to synchronize both collaboration platforms. It turned out that finding documentation on the interop assembly for the Domino directory is a challenge on its own. All I was able to find was maybe a dozen articles presenting some examples on how to use the assembly, but I failed to find even the smallest piece of information in regards to object structure, relations and contained data.
I did some reverse engineering by examining the assembly, assisted by useful information I found on www-12.lotus.com. The information provided here describes the properties and methods of an object, as also the hierarchy but its examples are limited to Lotus Notes Script. The syntax is similar to a Visual Basic syntax, but for iteration through collections they make use of commands that are not available in VB.NET. A bit of casting and converting will be necessary to get to the final data. As a result of this reverse engineering I think the following can be stated:
We have several physical files we need to access (I prefer to sync with local repository, instead of syncing with the server).
These files contain views; it is a matter of finding the correct one in order to synchronize contacts.
We have a Lotus Notes Session, which contains several databases represented by their physical names.
Both views and databases contain documents. Documents are the essence of the platform as they contain the actual information. The way they are presented on the screen seems to depend on which view they are outputted through.
Documents contain items; an item is an individual piece of data.
Off course I was able to gather much more information in regards to the assembly but I don’t think it is applicable to post it in this entry. It is to late... I need some sleep! If somebody needs additional information feel free to contact me... I will start building some prototypes now to see how I can reach the data.
by Gregory Mazarakis
21. April 2009 21:27
Maintaining my personal data has always been a challenge to me, as organized as I might be, according to some people. Working in different environments also implies that there is a need for a central storage of data, accessible to any environment and without that environment being predefined. How can I achieve that? This is a question that has kept me busy many times in the past. Every day I am confronted with some kind of a hole in my collaboration data... wrong contact info, missing contacts, etc, etc.
Keeping my documents and development in sync is something I succeeded to do pretty much from the beginning when the problem arose. I keep my files in sync between my laptop and my PC at home with the help of some tools that use the concept of "workspaces". On the other hand, as stated above, synchronizing my collaboration data (aka Contacts, Appointments, etc, etc) remains still a challenge. That challenge became even bigger when I started doing projects for a client of mine that makes use of the Lotus Notes application as their collaboration platform... I am lost... contacts in Lotus Notes, contacts in MS Outlook on my laptop, contacts in MS Outlook on my PC, contacts on my mobile phone... everywhere I turn I have a different set of contacts! Imagine the chaos in my calendar!
I decided to confront the issue. I will start building a tool to synchronize some collaboration data between the two platforms and I will make the code available when it is ready.