名前解決の実装
適用対象: Outlook 2013 | Outlook 2016
アドレス帳プロバイダーは、名前解決のサポートを担当します。エントリ識別子を表示名に関連付けるプロセスです。 クライアントは IAddrBook::ResolveName を呼び出すと名前解決を開始し、送信メッセージの受信者リストの各メンバーが有効なアドレスに対応していることを確認します。
プロバイダーは、次の方法で名前解決をサポートできます。
すべてのアドレス帳コンテナーの要件である 、PR_ANR (PidTagAnr) プロパティの制限をサポートしています。
すべてのアドレス帳コンテナーのオプションである IABContainer::ResolveNames メソッドを実装する。
IABContainer::ResolveNames をサポートすることを選択した場合は、lpAdrList パラメーターで渡された ADRLIST 構造体内の未解決の表示名ごとに完全に一致する検索を試みます。 未解決の表示名は、ADRLIST 構造体の aEntries メンバー内のプロパティ値配列にPR_ENTRYID (PidTagEntryId) プロパティがないために識別できます。 プロパティが関連付けられていないエントリは無視します。
lpAdrList の表示名の配列に対応するフラグの配列である lpFlagList パラメーターで解決を試みた結果を報告します。 フラグは、最初のフラグが ADRLIST 構造体の最初の aEntries メンバーに対応し、2 番目のフラグが 2 番目の aEntries メンバーに対応するように配置されます。
未解決のエントリごとに、次の 3 つの結果が考えられます。
一致するものが見つかりませんでした。つまり、コンテナー エントリ内のエントリが ADRLIST 構造体のエントリと一致しません。 lpFlagList パラメーターの対応するエントリをMAPI_UNRESOLVEDに設定します。
いくつかの一致が見つかる可能性があります。つまり、 ADRLIST 構造体のエントリと一致するコンテナー エントリが複数存在します。 lpFlagList パラメーターの対応するエントリをMAPI_AMBIGUOUSに設定します。 ADRLIST 構造体のエントリ数は変更しないでください。
完全一致が見つかる可能性があります。つまり、 ADRLIST 構造体のエントリと一致するコンテナー エントリは 1 つだけです。 lpFlagList パラメーターの対応するメンバーを MAPI_RESOLVED に設定し、ADRLIST エントリに関連付けられているプロパティの配列にエントリ識別子を追加します。
IABContainer::ResolveNames をサポートしないことを選択した場合は、実装からMAPI_E_NO_SUPPORTを返します。
すべてのアドレス帳プロバイダーは、コンテナーのコンテンツ テーブルであいまいな名前解決 ( PR_ANR プロパティ制限) をサポートする必要があります。 このサポートを提供するには、プロバイダーにとって意味のある 1 つ以上の特定のプロパティと照合して、"最適な推測" 型の検索を実行して 、IMAPITable::Restrict の実装でPR_ANR制限を処理します。 PR_DISPLAY_NAME (PidTagDisplayName) やPR_ACCOUNT (PidTagAccount) など、同じプロパティまたはプロパティを毎回使用するか、管理者が受け入れられるプロパティの一覧から選択できるようにするかを選択できます。
ほとんどのプロバイダーは独自のコンテンツ テーブルの実装を提供しますが、 CreateTable 関数を使用して MAPI によって提供される実装をカスタマイズできます。 ただし、MAPI 実装ではあらゆる種類の制限がサポートされていないため、呼び出しをインターセプトするカスタマイズされたバージョンの Restrict を含めるラッパー オブジェクトを作成する必要があります。