ホスト アドレス帳プロバイダーとしての機能

適用対象: Outlook 2013 | Outlook 2016

ホスト プロバイダーは、他のプロバイダーからの受信者をコンテナーに含め、他のプロバイダーによる受信者の実装に依存してメンテナンスを部分的に制御するアドレス帳プロバイダーです。 ホスト プロバイダーは、これらの外部受信者のテンプレート識別子を使用して、これらの受信者のデータを外部プロバイダーのコードにバインドします。 このバインド プロセスは、プロバイダーが受信者の PR_TEMPLATEID (PidTagTemplateid) プロパティを取得し、 IMAPISupport::OpenTemplateID の呼び出しで渡すと開始されます。

プロバイダーが IMAPISupport::OpenTemplateID を呼び出すと、MAPI はテンプレート識別子内の MAPIUID とプロバイダーによって登録された MAPIUID と一致し、プロバイダーの IABLogon::OpenTemplateID メソッドを呼び出します。 外部プロバイダーは、プロバイダーのプロパティ オブジェクトへのポインター、独自のプロパティ オブジェクトの実装、またはプロバイダーのオブジェクトをラップする実装へのポインターを返す場合があります。 返されたポインターは、 lppMAPIPropNew パラメーターの内容に配置されます。

プロバイダーは、FILL_ENTRY フラグが設定された IMAPISupport::OpenTemplateID を呼び出すかどうかを選択できます。 このフラグは、受信者が作成されている場合、またはプロバイダーが受信者のプロパティを更新してから長い時間が経過した場合に設定します。 FILL_ENTRY フラグの一般的な用途は、プロバイダー内の受信者を元のプロバイダーと同期させておく方法です。 この種類の同期スケジュールを実装すると、パフォーマンスが向上します。

外部受信者の同期を維持するには

  1. 定期的な更新の適切な間隔を決定します。

  2. IMAPISupport::OpenTemplateID の各呼び出しのタイムスタンプ。

  3. 前回の呼び出しから期限切れになった時間に基づいて、完全な更新を実行する必要があるかどうかを評価します。 完全な更新が必要な場合は、FILL_ENTRY フラグを指定して IMAPISupport::OpenTemplateID を呼び出します。 必要がない場合は、呼び出しでフラグを設定しないでください。

クライアントがコピーした受信者のプロパティの 1 つに対して要求を行う場合、プロバイダーは要求自体を処理するか、外部プロバイダーから提供されたコードを使用するかを選択できます。 プロバイダーは、IMAPIProp::OpenProperty を除く IMAPIProp の呼び出しが、すべてではないにしても、ほとんどの外部プロバイダーがインターセプトすることを想定できます。 PR_DETAILS_TABLE (PidTagDetailsTable) プロパティを要求する OpenProperty の呼び出しは、常にプロバイダーに転送されます。

テンプレート識別子コードにアクセスするには

  1. 受信者を開き、 IMAPIProp::GetProps メソッドを呼び出して 、PR_TEMPLATEID (PidTagTemplateid) プロパティを取得します。 PR_TEMPLATEIDが使用できないために GetProps が失敗した場合、外部プロバイダーはこの受信者のテンプレート識別子と関連コードをサポートしません。 プロバイダーは、すべてのメンテナンスに受信者の実装を使用する必要があります。

  2. テンプレート識別子が GetProps から返される場合は、IMAPISupport::OpenTemplateID メソッドの呼び出しで、それを渡し、受信者の IMAPIProp 実装へのポインターを渡します。 作成時やしばらく更新されていない場合など、受信者のプロパティの大部分またはすべてを更新する必要がある場合は、FILL_ENTRY フラグを設定します。

  3. OpenTemplateID が外部プロバイダーの IMAPIProp 実装を返す場合は、この実装へのポインターをクライアントに返します。

  4. OpenTemplateID が実装を返さない場合 (通常、外部プロバイダーがプロファイルにないため)、プロバイダーの IMAPIProp 実装へのポインターをクライアントに返します。 クライアントは、いずれかのインターフェイスを使用してオブジェクトのプロパティを操作できる必要があります。