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 aged. If you do not have more than the maximum number of contacts, no contacts will be deleted. The aging process happens when a new user is processed after the aging time. The aging time is checked once per week by default. This can be changed using notes.ini DPAB_VALIDATE_INTERVAL. For example setting DPAB_VALIDATE_INTERVAL=4320 (3*24*60) would cause this to checked every three days.
Known issues: In 851 reducing the limit and then later on increasing it back would have no effect and the reduced limit would still be enforced. Fixed in 852.
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.
Pre-8.52 FP2
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.
8.52 FP2 and Higher
In 8.52 FP2 and later the delete processing was changed. Now when you delete a Contact from Recent Contacts, It immediately hard deletes the Recent Contact and removes it from the weighting (DIP) table. No additional processing is needed.
Q. How can you prevent a name from being re-added to recent contacts after it was deleted.
In 8.53 a new feature, "Hide In Typeahead" was created as an alternative to deleting unwanted recent contacts.
When a bad address is in general use, it keeps getting re-added to your recent contacts. To prevent this, mark the Recent Contact as "Hide in Typeahead" instead of deleting. When a Recent Contact record is marked as "Hide In Typeahead" it is ignored by typeahead and Send. Processing new mail with this address will not change this contact. Opening a Non Delivery Report with status failure, will also mark a Recent Contact as "Hide In Typeahead".
You can restore a contact marked as "Hide In Typeahead" by using the button "Show In Typeahead",
Q. How do you turn off Recent Contacts?
A. To do this, follow these steps:
Pre-8.53 FP2
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.”
8.52 FP2 and Higher
1. Select File > Preferences, and click on the Contacts section.
2. Select the check box next to “Choose how names are added to Recent Contacts: Do not add any names.”
3. From Recent Contacts View, select all documents and press delete.
Note: If you are a roaming user,
1. You should only be running one Notes client at a time.
2. you must exit notes so that preferences are saved, before starting on a new computer.
When you exit notes and save the roaming information, the DIP info is saved. The Recent Contact entries in your local Contacts do not replicate. They are recreated from the DIP information.
You must restart Notes on the new workstation in order to get the DIP table installed.
When you restart notes, sending mail, closing Memos and saving chats to Notes file trigger Recent Contact processing. This will cause the names in the DIP table to queue up for creation of recent contacts.
This creation does not happen all the time to minimize server transactions, however you can change the delay time by changing notes.ini DPAB_PROMOTE_INC=
. The default is thirty minutes.
8.52

Do not antomatically add:
Any names to Recent Contacts DisableDPABprocessing=1
CC and BCC names to Recent Contacts DisableDPABCCprocessing=1
Names from e-mails I receive (Only add names from emails I send) DisableDPABReceivedprocessing=1
8.53

Do not add any names DisableDPABprocessing=1
Add the following names:
All names nothing
Only Sender's name from emails I receive DisableDPABCCandToprocessing=1
Only the 'To' recipient names from emails I send & recieve DisableDPABCCprocessing=1
Only names from e-mails I send DisableDPABReceivedprocessing=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.
Note: turning of type-ahead does not automatically disable or delete the existing Recent Contacts.
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.
Q. When do new names get added to Recent Contacts.
A. The processing of all Recent Contact actions is tied to the user actions of sending mail or closing opened unread emails. Viewing emails in the preview screen is not a Recent Contact action. Notes tries to balance the need for immediate updated information against impacting server or UI performance. To accomplish this, the new names are queued up waiting for the next Recent Contacts promote time.
When a user action occurs that results in a name being processed, the Recent Contacts promote time is checked. If it is time for promotion, than the server information for the names queued is retrieved and the new Recent Contact Records are created. The interval for the Recent Contacts promote time is thirty minutes by default. This can be changed using notes.ini DPAB_PROMOTE_INC. For example DPAB_PROMOTE_INC=15 would change this to every fifteen minutes. Changing this value can impact server and UI performance.
Q. When do already existing Recent Contact records get updated with new server information.
A. The processing of all Recent Contact actions is tied to the user actions of sending mail or closing opened unread mail. When a user action occurs that results in a name being processed, Notes checks to see if it is time to Sync the Recent Contact information with the Server Contact record. By default this occurs once per week. This can by changed by setting notes.ini NABEntriesSyncInterval. For example setting NABEntriesSyncInterval=4320 (3*24*60) would cause this to checked every three days. CHANGING THIS VALUE CAN HAVE A SERVER IMPACT ON THE SERVER PERFORMANCE. In 8.51 FP4 and higher the Recent Contacts sync is tied is a Recent Contacts actions. Because additional sync time is from the time of the current Sync, this causes the Recent Contacts Sync impact on the server to be staggered accross the users.
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. For example setting DPAB_MAX_DIP_TABLE_SIZE=500 would cause the table to only send down a maximum of 500 items. Variations of a users name can cause the visible Recent Contacts to be less than this maximum.
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).
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:
Pre-8.53 FP2
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.
8.52 FP2 and Higher
In 8.52 FP2 and later the delete processing was changed. Now when you delete a Contact from Recent Contacts, It immediately hard deletes the Recent Contact and removes it from the weighting (DIP) table. No additional processing is needed.
Hide In Typeahead
This is a new feature for 8.53
When a bad address is in general use, it keeps getting re-added to your recent contacts. To prevent this, mark the Recent Contact as "Hide in Typeahead" instead of deleting. When a Recent Contact record is marked as "Hide In Typeahead" it is ignored by the typeahead code and the mailer code. Processing new mail with this address will not change this contact. Opening a Non Delivery Report with status failure, will also mark a Recent Contact as "Hide In Typeahead". The bad address from the report is searched for in Recent Contacts. If it is found it is marked as "Hide In Typeahead".

You can restore a contact marked as "Hide In Typeahead" by using the button "Show In Typeahead",

Purge Recent Contacts
8.53 and Higher
You can Clean the DIP table and remove all the Recent Contacts from the view by setting notes.ini PURGE_RECENT_CONTACTS=1
When this is set it will cause the purge to happen and than togle the notes.ini variable (PURGE_RECENT_CONTACTS=0).
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 addresses containing widget 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.
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. The Recent Contact entries in your local Contacts do not replicate. They are recreated from the DIP information.
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.
8.52

8.53

This action sets DisableDPABProcessing=1 in the Notes.ini.
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.
Choosing how names are added to Recent Contacts.
By default all the names from the To field and the cc field of a memo are processed for Recent Contacts.
You can limit what names are processed through the Contacts Preference settings.
8.52

8.53

A new option was added in 8.53 to only capture the sender's address from emails I receive. All other addresses are ignored.
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
Fixed in 8.5.2 FP2
| SPR Number | Description |
| ASCR89KJ4K | Fixed a problem where the recent contact preference "Only names from emails I send" failed to work properly |
| ATAI7WSABL | When a Delivery Failure report is processed, the failed address will be automatically deleted from Recent Contacts and put into Contacts... |
| RKRY8A2NNX | Fixed an issue where deleting a Recent Contact would sometimes result in the recent contact reappearing unexpectedly. Now, Recent Contacts, once... |
| RKRY8BNKYL | Fix adds a one time validation on the email field of Recent Contacts. No server lookup is being done. |
| RRAL8D2KG8 | Fixed a problem where name lookup failed with "formula error" against a Directory Catalog (DirCat). |
| VASR876SSW | Syntax validation was added to Recent Contacts. The following are considered invalid: (1) Any address ending in period, backslash, forwardslash, @,... |
| RCFE85KUDT | Fixed the issue where only one local contact is displayed in typeahead if there are many contacts with the same full name |
| TONN8ADMZP | Fixed a problem where type-ahead would fail with a mobile directory sorted by Last Name in Basic client |
Fixed in 8.5.2 FP3
| SPR Number | Description |
| RKRY8DVP24 | Fixed an issue where local contacts in typeahead are not sorted using DIP ranking |
| RKRY8G2S3S | The code has been modified to treat internet addresses containing % as illegal for Recent Contacts. If there already exists such entries they will... |
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.