README.TXT
Sample Address Book 
 
 
The FlatFile.AB is a sample address book service provider (SMPAB.DLL) that is 
part of the prerelease MAPI SDK. 
 
The .SAB File 
------------- 
 
The sample address book provider is based on a read-only file of fixed-length 
records. Each record contains the display name and e-mail address of a 
messaging user. This file supplies the contents of a single, read-only 
address container, which contains only e-mail users. A separate utility 
program, SAB.EXE, converts a text file to an .SAB file. Each line of input 
text must be formatted as follows: 
 
display name<tab>e-mail address 
 
The e-mail address must not contain white space, and the input file must be 
sorted on the display name; the conversion utility does not sort. 
 
Address Type 
------------ 
 
The sample address book supports one e-mail address type; it is hard-coded 
to MSPEER. If you plan to use the sample address book and sample transport 
together, configure the sample transport provider to use MSPEER also. 
 
Entry Identifiers 
----------------- 
 
The sample address book registers one MAPIUID with SetProviderUID(); it is 
also hard-coded. The unique part of a messaging user entry identifier is 
the e-mail address. Messaging user entry identifiers use the hard-coded UID, 
so they are the same across all instances of the sample address book. 
The sample address book chooses a UID at random the first time it is 
configured for use in its top-level container entry identifier. This enables 
multiple instances of the provider, each with its own top-level container, 
to coexist in a single profile. 
 
The sample address book does not distinguish between short- and long-term 
entry identifiers. 
 
Table Implementation 
-------------------- 
 
The sample address book largely delegates the implementation of its hierarchy 
table to the IMAPITableData interface. For its contents table, the sample 
address book implements the IMAPITable interface directly on the .SAB file. 
The contents table is a good example of a caching table implementation; it 
defers reading records from disk until absolutely necessary and can handle 
quite large files with limited memory. The contents table also supports prefix 
searching and ambiguous name resolution (ANR). The contents table 
implementation closes the .SAB file if the table interface is not accessed 
for a while. This makes it possible to update the .SAB file while it is in 
use. If the .SAB file changes, the sample address book notices at the next 
file access and issues a notification on the contents table so that the user 
interface can be updated. It uses the idle task engine to do the closing. 
 
Supported Features 
------------------ 
 
Table restrictions. The sample address book implements the two most commonly 
used types of restrictions for an address book: prefix match and ANR. It does 
not implement the full MAPI restriction language, and restrictions are 
supported only on the display name. 
 
Prefix matching enables incremental searching through an address book 
container in which the user types the initial characters of a display name. 
ANR, on the other hand, matches one or more prefix strings against the entire 
container, regardless of first or last name order, and returns all matching 
entries; this enables checking of partial names typed into a message. 
 
Details. The sample address book implements its own details display table 
for messaging users. There are two sets of properties, divided into two pages. 
The first page has the standard properties: display name, e-mail address, and 
address type.  The second page has an example of almost every control type 
implemented in MAPI display tables (the data is hard-coded, not drawn from 
the address book). There is a template identifier for messaging user details, 
which enables all details to be supported for users copied from the sample 
address book to the personal address book. Details are also supported for the 
top-level directory, including the ability to change the .SAB file from the 
details pane. The directory details view uses a notification to update the 
display when the .SAB file is changed. 
 
Custom recipients (one-offs). The sample address book implements a one-off 
table with a set of properties different from the native details; these 
properties combine to form the e-mail address. The template identifier 
enables messaging users to be added to the personal address book, or directly 
to a message, using a special dialog box; processing is routed through the 
sample address book, which has the ability to generate the e-mail address 
from the properties entered in the dialog box. 
 
Advanced search dialog box. The sample address book implements an advanced 
search dialog box, accessible by choosing the Advanced button on the MAPI 
addressing dialog box. In reality, the advanced search is only slightly 
different from the standard search, which uses an ANR restriction. 
 
Status interface. The IMAPIStatus interface is partially supported; its 
IMAPIProp methods are delegated to the IMAPIPropData interface. 
 
Configuration interfaces. The sample address book supports both interactive 
and programmatic configuration. 
 
Cross-platform support. The sample address book source code generates 
executables for Windows 3.X, Windows 95, and Windows NT 3.5 and later from a 
single set of source files. 
 
Unsupported Features 
-------------------- 
 
Sorting. 
 
Distribution lists. 
 
Creating, deleting, and modifying entries. 
 
Multi-valued properties. 
 
Named properties. 
 
Distinguishing first and last name in display names. 
 
Configuration 
------------- 
 
The only configurable property supported by the sample address book is the 
path to the .SAB file. The path can be set interactively either through the 
service configuration dialog box or at provider logon. It can also be set 
programmatically through the ServiceEntry function. For the definitions 
needed to set the path programmatically, see the SMPAB.H header file. 
 
Installation 
------------ 
 
To install the sample address book, you have to: 
 
1. Merge the file smpab.inf with mapisvc.inf located in your windows system 
   directory. You can do this using the mergeini utility that comes with 
   the MAPI SDK. The syntax is "mergeini -m smpab.inf". 
 
2. Copy smpab(32).dll to the windows system directory. 
 
3. Add the sample address book to any MAPI profile using the Mail and Fax 
   control panel applet.