[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
?
Solved

Notes Databases on the Domino Server

Posted on 2006-05-25
10
Medium Priority
?
470 Views
Last Modified: 2013-12-18
The Notes COM Toolkit comes with a sample VB app called ReadMail.  In the app's initialization, the database "NAMES.NSF" is opened and the view "Locations" retrieved.  From this view, the call GetAllDocumentsByKey is made and a NotesDocumentCollection returned.

In this sample, only the first document is used.  Is there ever more than one document in this collection?

From this document, the item values for "MailServer", "MailFile", and "MailType" are retrieved.  Is there corresponding values for Contacts, ToDo items, Calendar items and Journal items?
0
Comment
Question by:jlalande
  • 6
  • 4
10 Comments
 
LVL 18

Expert Comment

by:marilyng
ID: 16762099
to answer your questions: a collection returns one or more documents, or no documents.  In this example, they only need one document that contains the fields: "MailServer", "MailFile", and "MailType" - in order to open the mail file and access the mail.

 Contacts, ToDo items, Calendar items and Journal items << yes, Contacts can be stored in the mail file, or in the address book, but there are different forms and views/folders for each of these items.   But these are int he MAIL FILE and not the LOCATION DOCUMENT.  Once you have a handle on the MAIL FILE, then you can access the contents:  mail, calendar, todo.  Journal Items reside in a local database called: journal.nsf, and that database name is listed in the "Location" document.  To access either the mail file or the journal database, you would need to declare the database object, open the database and then decide what  you wanted to access.

More explanation and suggestions.......................................
Without really looking at this, the example is using generic properties for the local address book.  It's getting a collection of location documents and reading the first one found in the collection.  Which is fine if you have only one location, "Office" and not "island" or "internet"
Otherwise you would need to step through the collection and figure out which is the one that contains the information you need.

What it is trying to do in gettingalldocumentsbykey, it's getting all the location records stored in the address book.  For the most part they all contain similar information, except that an internet location might have different server(thisserver.thisdomain.com) address than your office ocation (thisserver/thisdomain) or different IP addresses for when you inside the building or outside.  So, if it were me collecting the locations, I'd try for the one that closely matching something that said, "office" or the one that is being used by the user.

A better way to find what location is being used is to open the Notes.ini file and collect the environment: Location. - this will tell you the last location used by the user.  Also, it will contain the default directory and the name of the personal address book.

In VB, you would need to troll the registry to find the lotus notes key and then the startup directory.  once you have that, then the notes.ini file is available to give you the last logon location, username and data file path.

Does this make sense, or do you need more information?

0
 

Author Comment

by:jlalande
ID: 16762544
I am working on a VoIP application that retrieves the titles (and an identifier for later retrieval) of documents associated with an incoming call.  Because I would like to do this in real-time, I must create a couple of indexes, one from phone numbers to contacts, and the other from contacts to documents where the contact's name appears.

Currently, we do this already with Outlook and would like add Notes support.  I am taking the base classes currently used for the Outlook implementation and making concrete implementations for Notes.  At this point I am working on extracting all the Contacts, Emails, To Do items, Calendar items, and Journal items into a data structure that the indexing mechanism can use.  I have done the work for contacts and emails that are on a server-less deployment of Notes, however I would like to support Notes connected to a Domino server.

When I asked "Is there corresponding values for Contacts, ToDo items, Calendar items and Journal items?" what I was trying to ask is is there a location for the databases that hold these kind of items?  You have answered the question for Journal items.  What is the name of the Journal item in the "Location" document?  More generally, how does one programatically retrieve the names of items from a document?

Do I understand you correctly that the other items (Contacts, ToDo items, Calendar items) are in the mail file?  Can I assume that if I retrieve a collection of more than one location document, that I can also retrieve more than one mail file (hence, more than one set of Contacts, ToDo items, and Calendar items)?

I see a lot of stuff in the notes.ini file, however nothing referring to "default directory" or "personal address book".  Are these items named something else?  And can I retieve these values programatically in the manner than the VB sample does, i.e. szTempString1 = domSession.GetEnvironmentString("Location", True) ?

You have been very helpful.  Though I only asked two questions, I knew that the answers would be large and attempted to assign 1000 points for the answer.  However, I was only allowed 500.

Thanks!
0
 

Author Comment

by:jlalande
ID: 16762708
Also, do you know of a good book on this type of programming?
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 18

Expert Comment

by:marilyng
ID: 16763412
jLalande, if you can wait a few hours, I will provide more details for you.  Please tell me your notes version, in the meantime.

The mail, todo, calendar are collected from the mail database, along with some contacts,  the remainder of the contacts are collected from the personal address book.  both may have different file names.  the Mail database will have a different filename for each user.  Personal address book may or may not be the same filename for each user, and journal.nsf is usually created by notes, so it is usually the same for each user.
0
 

Author Comment

by:jlalande
ID: 16769217
I am using the COM API.  I have Notes 7 installed and I am using it to test with.  I am hoping that my solution will be supported for users with 6.0 and all version in between.

Thanks for your help.
0
 

Author Comment

by:jlalande
ID: 16769528
If I capture the contacts that are in the AddressBooks property of the NotesSession object, can I assume I am getting all the contacts available to the user?  The Toolkit documentation describes the AddressBooks property as "both public and personal".
0
 
LVL 18

Accepted Solution

by:
marilyng earned 2000 total points
ID: 16773253
Ah, there can be more than one address book.  IN the notes classes there are public address books and private address books.  

So, the notesDatabaseArray = notesSession.AddressBooks

forall ndb in notesdatabasearray
  if ndb.isPublicAddressBook then
       'do something
  end if
  if ndb.isPrivateAddressBook then
     'do something
  end if
end forall

The public address book is the one that sits on the Notes Server and is usually: names.nsf  but the difference is the forms, and views that it contains.  It contains all active users, server information, connections, etc.  It is the heart of the Domino system.

The private address book is the user's local address book and contains location documents, connection documents, and private contact names, private groups.  

Both address books have a "person" form that contain similar information: firstname, lastname, fullname, middleinitial, phone numbers, address, home address, etc.  Usually the server version doesn't contain any personal contact information, like home address, home phone.

when you get addressbooks using the session class, it will collect all addressbooks on the server or local, depending on where you are calling it.  Then you have to cycle through the books to find the one that you need.   In some places, there are several "public address" books, and some private ones on the server as well.   I have three local, private address books.

The one that is being used  on a user's client is the first one named in the Notes.INI

In the INI are several environment values that can be collected by the session object:
Directory:  the users data directory location
MailFile: the filepath and filename of the user's mail file (or the last person who logged on to that machine)

Location: the name of the Location document that is being used, or was last used by the person who last logged into Notes.  This is a string of three values:  location doc name, some value, cn=john doe/ou=department/o=domain
         >>so you split the value and collect the first and third entry.

NAMES: the name of the primary local address book.  Again, this can be a string of many databases, i.e. names.nsf, myfriends.nsf, officefriends.nsf.
       >>you collect the string, if it has a comma, then split into an array and grab the first entry - that is the user's primary address book.
      >>if you want to collect ALL the contacts, then split, and loop through all the address books listed.

      >>caveat, the second address book MAY be a lite directory, or a condensed listing of all the NAB entries, so you can't cycle through that one.

---------
so, as long as you're collecting the same information, the only thing you're going to have to worry about is duplicates and outdated entries in the local address book.

Best approach is to collect from the server address books first.  Then as you collect from users, check for duplicate names (lowercase fullname).  Users copy entries from the server to their local, and usually don't remember to update them.  You can be overwriting good stuff with old outdated, or getting LOTS of duplicate entries.

That should be enough for this answer.. whew!  Let me know what else.

0
 

Author Comment

by:jlalande
ID: 16773293
You have helped me immensely...and I am so grateful.  I had no idea of the magnitude of this project.  Thanks for sending me all this information.
0
 
LVL 18

Expert Comment

by:marilyng
ID: 16773347
It's actually not too bad with regard to the data mining aspect.  A few forms, and most of the code is looping through the same fields.  You just have to check for duplicates, and with personal address books, hmmm... better tell people ahead of time so they can remove their "personal" stuff..
0
 

Author Comment

by:jlalande
ID: 16773358
Well, their personal stuff will stay personal.  This is a user app and the user's indexes will stay private to the user in their AppData folder.
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I thought it will be a good idea to make a post as it will help in case someone else faces these issues. I trust this gives an idea how each entry in Notes.ini can mean a lot for the Domino Server to be functioning properly. This article discusses t…
Notes Document Link used by IBM Notes is a link file which aids in the sharing of links to documents in email and webpages. The posts describe the importance and steps to create a Lotus Notes NDL file in brief.
Look below the covers at a subform control , and the form that is inside it. Explore properties and see how easy it is to aggregate, get statistics, and synchronize results for your data. A Microsoft Access subform is used to show relevant calcul…
When cloud platforms entered the scene, users and companies jumped on board to take advantage of the many benefits, like the ability to work and connect with company information from various locations. What many didn't foresee was the increased risk…
Suggested Courses
Course of the Month18 days, 4 hours left to enroll

829 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question