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 appeared 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
|
Created
| 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 & 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.