IBM Lotus Notes 8 Recent Contacts and Type-ahead features: FAQs and more
Robert Ransdell Software Developer
IBM Software Group
Westford, MA
May 2009
Abstract: This article provides answers to frequently asked questions about the IBM® Lotus® Notes® 8 Recent Contacts feature and the Type-ahead drop-down list in Local Contacts and the Search directory.
1 FAQ's
Q. How does Lotus Notes determine who goes into Recent Contacts?
A. Your Recent Contacts are the people you communicate with the most. Lotus Notes determines this by keeping track of the number of times you send and receive mail from each person. After you send an email or close an email after reading it, Lotus Notes stores the contacts' information and uses it to determine your Recent Contacts.
Note: If you read an email only in the preview pane, Lotus Notes will not process the contacts' information unless you have selected to “Mark documents as read when opened in preview pane” in your Basic Notes Client Configuration preferences.
Q. Are integrated IBM Lotus Sametime chats added to my Recent Contacts?
A. If you choose in Notes preference
s to save your chat to the Notes mail file, the participants of the chat are used to determine your Recent Contacts as well. Their information is added when the chat is saved.
Q. How does Lotus Notes determine the order in my type-ahead list?
A. Lotus Notes does this the same way that it determines who goes in your Recent Contacts. After you send an email, or close an email after reading it, Lotus Notes stores the sender's or recipients' information and uses it to determine the order for your type-ahead drop-down. Contacts that you send or receive e-mail from more frequently will appear higher on the type-ahead drop-down list.
Q. How long do people's names stay in my Recent Contacts list?
A. There is a maximum number of people who can be in your Recent Contacts; the default is approximately 3000. (You or your administrator can change the maximum number of contacts allowed with the Notes.ini parameter DPAB_MAX_DIP_TABLE_SIZE=3000.)
If you have more than the maximum number of contacts, the people you communicate with the least will be deleted from your Recent Contacts whenever your Recent Contacts are updated, which happens approximately every seven days. If you do
not have more than the maximum number of contacts, no contacts will be deleted.
Q. How do you add people to your Recent Contacts?
A. You cannot add or edit your Recent Contacts. However, if you would like to edit a Recent Contact's information, or if you are worried someone might drop off of your Recent Contacts, you can add that person to your My Contacts list. You cannot, however, manually make someone appear higher in your type-ahead list.
Q. How do you delete people from your Recent Contacts?
A. If you have a bad email address in Recent Contacts, you can remove it, but the procedure is a bit tedious:
NOTE: You can delete a Recent Contact
only in Notes 8.0.1 and later.
1. If you have not already, open your Contacts database; select Recent Contacts
in the left-hand navigation pane.
2. Right-click on the contact you would like to delete, and select Delete from the context menu.
3. Select Trash in the navigation pane at left , and click Empty Trash in the action bar above the message list.
4. Send
an email to yourself.
5. Restart Notes.
Q. How do you turn off Recent Contacts?
A. To do this, follow these steps:
1. Delete all Recent Contacts by following the steps in the “How do you delete people from your Recent Contacts? Answer above.
Tip: You can select all recent contacts by clicking the first contact on the list and then holding down the Shift key as you click the last contact on the list. You can then right-click on any contact in between.
2. Select File > Preferences, and click on the Contacts section.
3. Select the check box next to “Do not automatically add contacts to the Recent Contacts view.”
To do this for all users, use the Notes.ini parameter DisableDPABProcessing=1 .
Q. How do you turn off type-ahead?
A. To do this, use these steps:
1. Select File > Preferences, and click on the Basic Notes Client Configuration section.
2. Check the option “Disable type-ahead for all name fields and use the Notes Basic type-ahead.”
To do this for all users, use the Notes.ini $DISABLE_TYPEDOWN=1.
Q. Can you synchronize your Recent Contacts with your BlackBerry?
A. Although you can choose to synchronize your contacts with your BlackBerry, your Recent Contacts are not included in this.
2 Technical details This section explains key terms that are relevant to Recent Contacts and type-ahead:
DPAB,or “Dynamic Personal Address Book”. DPAB is a repository of recently seen high-value contacts. It is represented in the user's Personal Contacts as Recent Contacts.
DIP,or “Dynamic Interest Profiler”. DIP controls the weighting that determines the order of the type-ahead drop-down list in Local Contacts and the Search Directory.
This weighting represents the user's relationship to a person. It is based on the number of times the user sends and receives mail from that person, either as a To or CopyTo recipient. The DIP weighting is not visible to the user.
User Summary. The DPAB/DIP starts processing the names on unread mail when the Note is closed.
The DPAB/DIP does not process mail from the preview pane, unless the user has selected to mark documents viewed in preview as READ.
Processing is also done when the user sends mail. It's done in background queues so as to not disrupt the user, collecting the list of names and queueing up that list for DIP weighting.
Next, the names that are new to the DIP list are queued up to be added to the user's Recent Contacts. For each new recent contact, a new Recent Contact record is created. This record is created from the server contact when that can be found. If it cannot be found, the Recent Contact record is still created, but it contains only the information that was available from the mail.
A special case is made for Groups. The Group Recent Contact contains only a stub record with no members. It was assumed that information in the Recent Contact group record was more likely to be obsolete than the content of a Person record. The members of the group are retrieved from the server copy of the group record when they are needed.
The information in Recent Contacts is updated from the server contact information once every seven days.
The Recent Contacts and their weighting value are used when creating the type-ahead drop-down list
. The names displayed in both the Local Contact type-ahead drop-down and the Search Directory drop-down are sorted by “weight”, not alphabetically, either by first or last name. Weight is defined as how often a person or group has appe
ared in message address fields.
For the Local Contacts drop-down, names are obtained from local Contact records, which include Recent Contacts, My Contacts, and any additional local address books the user has set up in user preferences. For the Search Directory, results are obtained from the server directories and are limited to fifty matches. The drop-down displays a maximum of twenty names sorted by weight. Weight values are not displayed.
With a common name such as “John,” it's possible that a search might not return the person you are searching for. In that case, it might be better to use part or all of the surname.
DPAB/DIP Aging. The DIP table does not purge any entries; however, it's possible for the user to manually delete a Recent Contacts record. This feature is available in releases 8.01 and higher.
Recent Contacts does, however, have a maximum record count. The default maximum record count is approximately 3000, which can be changed via the Notes.ini parameter DPAB_MAX_DIP_TABLE_SIZE=1.
When the recent contacts are being updated, any low-weight records exceeding the maximum count will be deleted from Recent Contacts. The number of Recent Contact records can temporarily exceed the maximum number as the low-weight records are not purged until the weekly update.
3 Other functionality
Moving Recent Contact records to My Contacts Recent Contacts are not editable. If you want to modify the information on a Recent Contact or are concerned that an occasionally used contact might “age off” the Recent Contacts, you should move the contact to My Contacts, using the Move to My Contacts button at the top of the view (see figure 1).
Figure 1. Move to My Contacts button 
Removing Recent Contacts If you happen to get a bad email address into Recent Contacts, you need to fix the problem in both the Recent Contacts and in the weighting table, as follows:
1. Delete Recent Contact entries.
2. Delete Contacts Trash.
3. Send mail to yourself to cause DIP to clear recent history flags. This is important because the code will not re-add a recent history name.
4. Restart Notes.
Excluding addresses from Recent Contacts The notes.ini setting DPABRemoveRule=
is the primary Recent Contacts filter list.
If the user wanted to filter out all the addresses from the widget company. All of those addresses contain a sub-string of widget. For example tom@widget.com, bob@widget.com etc. Setting DPABRemoveRule=widget will cause Notes to ignore all the widget addresses when creating Recent Contact entries. Now if the user also wanted Notes to ignore the addresses from the foobar company they would add foobar to the list separated by a comma. DPABRemoveRule=widget, foobar.
In addition to the DPABRemoveRule list, the user can set Notes.ini DPABRemoveRuleSetting=1.
When DPABRemoveRuleSetting=1 is set, the addresses containing sub-strings =exchange and /exchange will also be filtered out without being explicitly added to the list by the user.
Ambiguous Names dialog box
The Ambiguous Names dialog box comes up when the code finds multiple hits when trying to resolve mail addressing (see figure 2). This can occur whenever there are multiple Jill Smiths or, more likely, when the name is slightly different due to formatting, for example, in the case of John T. Doe and John T Doe.
If the Ambiguous Names dialog is coming up where you do not expect it, check Recent Contacts and My Contacts for entries that can be removed.
Figure 2. Ambiguous Names dialog box

Managed users
Recent Contact records are stored in the same file as the Local Contacts. The Recent Contacts for an Admin Assistant will be combined with the Recent Contacts that were created from the Mail files they are managing.
Roaming users
Because the Recent Contacts are stored with the Local Contacts, that information roams with the user. Starting in Notes 8.5 the user's DIP information is roamed so that the type-ahead drop-down list order is consistent.
BlackBerry synchronization
You can synchronize Notes contacts with BlackBerry contacts if you choose the option to store a copy of the local contacts in the mail file. However, Recent Contact records are not currently replicated as part of this copy, so the BlackBerry cannot use this information.
Template developer information
The type-ahead drop-down list is presented whenever the template form creates a native OS-style “Names”- type field with the attribute “Look up names as each character is entered”.
Disabling DPAB/DIB and Standard Type-ahead
If you want to disable DPAB/DIP/RecentContacts, you should probably first follow the “Removing Recent Contacts” steps to remove all the Recent Contacts. Then select the check box in User Contacts Preferences for “Do not automatically add names to the Recent Contacts view”, before restarting Notes (see figure 3).
Enabling the “Do not automatically add names to the Recent Contacts view” preference sets DisableDPABProcessing=1 in the Notes.ini.
Figure 3. Contacts Preferences dialog

Notes Standard Type-ahead can be disabled via Preferences > Basic Notes Client Configuration. Select “Disable type-ahead for all name fields and use the Notes Basic type-ahead” from Basic Notes Client Configuration (see figure 4). This action sets $DISABLE_TYPEDOWN=1 in the Notes.ini.
Figure 4. Basic Notes Client Configuration dialog

DPAB/DIP Flow
The flow of DPAB/DIP is diagrammed in figure 5.
Figure 5. DPAB/DIP Flow (high level)
Documents Opened or Created
Edit NEM SameTime Recent Contacts
d/dsave.c nem/nemsub.cpp ?? | (DPAB entries)
| NEMAddRLToHistory | Crea
ted
| NEMAddRLToHistoryEx | |
| CSubprogram::AddToHistory | |
| | | dpabBackgroundThread
| | | CManageDPAB class
| | |
| | |
_ |__ | Create\Put MQ & Thread
| THREAD_GROUP "ProcessDpab"
| THREAD_MQ "ProcessDpabQueue"
| |
DESK |
desk\deskwct.cpp DBmisc\ManageDPAB.cpp
DeskWCT_ProcessDIPnRCusers CManageDPAB class
DBmisc\ManageDPAB.cpp desk\ProcessDPABRequest.cpp
__ CManageDIP class all
| | |
| | |
Others: Create/Put MQ &a
mp; Thread desk\deskmsg.cpp
| THREAD_GROUP "PostToDip" Main MQ
Recent THREAD_MQ "PostToDipQueue"
Collaborators
|
Total Recall
| dipBackgroundThread Main MQ
|_ CManageDIP class XML command
XML command |
| |
|_ (Java) DIP handler |
| |
| Weighted List
Queue |
|_ DIP |
Processing
The name information is captured whenever you send or receive mail or calendar invitations. The hook routine for this capture is:
DeskWCT_ProcessDIPnRCusers
edit\d\dsavq.c\DocMailAndSave – Mail Only
edit\d\dsave.c\DocSave – Save Mail
nem\nemsub.cpp\FindDuplicateHistory – New Mail/Sametime Chats
The DIP weighting uses a count value and an importance value. The count value is constructed from:
• Sent To [one per contact] - Stores the number of emails sent by the user to each given person (as identified by email address).
• Received From [one per contact] – Stores the number of emails received from each person (as identified by their email address).
• Cc To [one per contact] – Stores the number of times a person (as identified by their email address) is carbon copied on e-mails received or sent by the user.
The importance value represents the relationship between
the user and the person, as identified by their email address.
Type-ahead flow
edit\t\tvalue.c ProcessTextValue processes the key strokes from the user. When the user pauses in his/her entry, these key strokes (token) are sent through the IPC to the Java™ side.
The Java side packages up the token as an IPC name lookup request against either local or server contacts.
Wct\notes.process\tonotes\namelookuprequest.cpp does the lookup and sends the results back to the Java side. A maximum of fifty names are retrieved.
The Java code gets the weight from the DIP table and displays the drop-down widget in weighted order. A maximum of twenty names are displayed. When the user makes a selection, the address from the item of focus is returned to the editor through the IPC, and the editor replaces the user keystrokes with the selected item:
(Ccode)Editor gets token->(Java)Format lookup request against local or server->(C code)Lookup request done->(Java)DIP weighting applied->(Java)List trimmed and sorted on weight->(C code)User selection replaces token
Resources
• How many type-ahead recent contacts can display in Lotus Notes?:
http://www-01.ibm.com/support/docview.wss?uid=swg21320717
• Can you disable the Recent Contacts feature using a policy?:
http://www-01.ibm.com/support/docview.wss?uid=swg21368098
• IBM Lotus Notes and Domino 8 Deployment Guide
http://www.redbooks.ibm.com/abstracts/sg247506.html?Open
• Lotus Notes documentation (incl. the InfoCenter):
http://www.ibm.com/developerworks/lotus/documentation/notes/
• Lotus Notes and Domino wiki:
http://www-10.lotus.com/ldd/dominowiki.nsf
• IBM Software Support site:
http://www-01.ibm.com/software/support/index.html?ibmsst=allSupport
About the author
Robert Ransdell lives in Massachusetts and has been working for IBM for thirteen years, eight of which he's worked on the Notes client.