IABLogon::OpenTemplateID

適用対象: Outlook 2013 | Outlook 2016

ホスト アドレス帳プロバイダーに存在するデータを含む受信者エントリを開きます。

HRESULT OpenTemplateID(
  ULONG cbTemplateID,
  LPENTRYID lpTemplateID,
  ULONG ulTemplateFlags,
  LPMAPIPROP lpMAPIPropData,
  LPCIID lpInterface,
  LPMAPIPROP FAR * lppMAPIPropNew,
  LPMAPIPROP lpMAPIPropSibling
);

パラメーター

cbTemplateID

[in] lpTemplateID パラメーターによって指されるテンプレート識別子のバイト数。

lpTemplateID

[in]開く受信者エントリのテンプレート識別子または PR_TEMPLATEID (PidTagTemplateid) プロパティへのポインター。

ulTemplateFlags

[in]テンプレート識別子で表されるエントリを開く方法を示すために使用されるフラグのビットマスク。 次のフラグを設定できます。

FILL_ENTRY

ホスト プロバイダーは、テンプレート識別子で表されるエントリに基づいて、コンテナー内に新しいエントリを作成しています。 IABLogon::OpenTemplateID メソッドは、lpMAPIPropData パラメーターの IMAPIProp : IUnknown 実装を使用してホスト プロバイダーのエントリの特定の初期化を実行するか、lppMAPIPropNew パラメーターでカスタム IMAPIProp インターフェイス実装を返す必要があります。

lpMAPIPropData

[in]ホスト プロバイダーのプロパティ オブジェクトへのポインターと 、IMAPIProp から派生したインターフェイスの実装。

lpInterface

[in] lppMAPIPropNew パラメーターで返されるインターフェイス ポインターの種類を表すインターフェイス識別子 (IID) へのポインター。 null を渡すと、標準メッセージング ユーザー インターフェイス IMailUser : IMAPIProp が返されます。

lppMAPIPropNew

[out]バインドされたプロパティ オブジェクトへのポインターと、 IMAPIProp から派生したインターフェイスの実装。

lpMAPIPropSibling

[out]予約; は null にする必要があります。

戻り値

S_OK

適切なコードは、ホスト プロバイダー内の関連データに正常にバインドされました。

MAPI_E_NO_SUPPORT

オブジェクトはテンプレート ID をサポートしていません。

MAPI_E_UNKNOWN_ENTRYID

lpTemplateID パラメーターで渡されたテンプレート識別子は、アドレス帳プロバイダーによって認識されません。

注釈

IABLogon::OpenTemplateID メソッドは、ホスト プロバイダーのコンテナーにあるエントリのコピーを管理する必要があるアドレス帳プロバイダーによってのみ実装されます。 OpenTemplateID を実装するプロバイダーは、外部アドレス帳プロバイダーと呼ばれます。 ホスト プロバイダーは IMAPISupport::OpenTemplateID を呼び出して、コピーしたエントリを作成するか、コピーしたエントリを開き、MAPI は IABLogon::OpenTemplateID への呼び出しを渡します。 IABLogon::OpenTemplateID によってエントリが開き、それを制御するコードがホスト プロバイダー内のデータにバインドされます。

IABLogon::OpenTemplateID では、エントリ識別子を使用するのではなく、エントリのテンプレート識別子である別のプロパティを使用PR_TEMPLATEID。 ホスト プロバイダー内のデータにコードをバインドする必要があるエントリでは、テンプレート識別子をサポートする必要があります。

アドレス帳プロバイダーが IABLogon::OpenTemplateID を 実装する必要がある場合の例を次に示します。

  • コピーしたエントリのデータを元のエントリと同期し続けるために定期的に更新する。

  • サーバー上のデータからエントリの詳細テーブルに表示されるリストを動的に設定するなど、ホスト プロバイダーが実装できない機能を実装する。

  • ホスト プロバイダーのエントリ内のプロパティと元のエントリの間の相互作用を制御するには (アドレスのさまざまなコンポーネントを含む詳細表示の編集コントロールの値から PR_EMAIL_ADDRESS (PidTagEmailAddress) を計算するなど)。

実装に関するメモ

ホスト プロバイダーがプロバイダーからエントリをコピーまたは作成し、 IABLogon::OpenTemplateID を介してプロパティ オブジェクトの実装を指定すると、ほとんどの呼び出しを処理してエントリを維持します。 ただし、これらの呼び出しを転送するのはホスト プロバイダー次第であるため、ホスト プロバイダーは、呼び出しを転送する前に任意の呼び出しをインターセプトし、カスタム処理を実行できます。

プロパティ オブジェクトの実装では、次のガイドラインを使用する必要があります。

  • IMAPIProp::GetProps が呼び出されると、要求が計算プロパティに対するものであり、その要求が処理される場合は、その要求を処理するかどうかを判断します。 計算されていないプロパティのすべての要求をホスト プロバイダーに転送します。

  • 詳細表示テーブル以外のテーブルを開くために IMAPIProp::OpenProperty が呼び出された場合は、要求を処理します。 ほとんどのテーブルをホスト プロバイダーに正確にコピーすることはできません。 これらの要求されたテーブルの IMAPITable 実装を生成する必要があります。 詳細テーブル PR_DETAILS_TABLE (PidTagDetailsTable) プロパティは、ホスト プロバイダーにコピーする必要があります。 これにより、このプロバイダーはテーブルをローカルで生成できます。 表示テーブルの実装をラップして、表示テーブル通知を生成することもできます。

  • IMAPIProp::SetProps が呼び出されると、ホスト プロバイダーはプロパティを設定する前にデータを検証できます。 必要なすべてのプロパティが設定または計算されたことを確認できます。 エラーが検出された場合は、適切なエラー値を返し、可能な場合は IMAPIProp::GetLastError を使用して追加の説明を返します。

  • IMAPIProp::SaveChanges が呼び出されると、ホスト プロバイダーがエントリを保存する前に処理を実行することが必要になる場合があります。 変更されたプロパティの影響を受けるデータ (新しいアドレスなど) をホスト プロバイダーのエントリに保存する必要があります。

一般に、ホスト プロバイダーに渡すエントリの実装では、関連するプロパティのコンテキスト固有の操作を実行するために、すべてのメソッドをインターセプトします。 FILL_ENTRY フラグが ulTemplateFlags パラメーターに渡される場合は、エントリのすべてのプロパティを設定します。

lppMAPIPropNew パラメーターで新しいプロパティ オブジェクトを返す場合は、ホスト プロバイダーのプロパティ オブジェクトの IUnknown::AddRef メソッドを呼び出して、参照を維持します。 lppMAPIPropNew で返される IMAPIProp 実装がバインドされたオブジェクトを介するすべての呼び出しは、バインドされたオブジェクトによって処理された後、ホスト プロパティ オブジェクト内の対応するメソッドにルーティングする必要があります。

バインドされたプロパティ オブジェクトを介して渡される名前付きプロパティのプロパティ識別子は、プロバイダーの識別子名前空間にあります。 IMAPIProp::GetNamesFromIDs メソッドの実装では、テンプレート固有のタスクを実行できるようにプロパティの名前を決定する必要があります。 同様に、プロバイダーがホスト プロバイダーに渡すプロパティも名前空間内にある必要があります。 たとえば、 OpenTemplateID で名前付きプロパティを設定する場合は、名前の識別子の 1 つを使用する必要があります。必要に応じて、 IMAPIProp::GetIDsFromNames メソッドを呼び出して作成します。

lpTemplateID で渡されたエントリ識別子が認識されない場合は、MAPI_E_UNKNOWN_ENTRYIDを返します。

アドレス帳テンプレート識別子を操作する方法の詳細については、「 外部アドレス帳プロバイダーとしての機能」を参照してください。

関連項目

IMAPISupport::OpenTemplateID

IPropData: IMAPIProp

PidTagTemplateid 標準プロパティ

IABLogon : IUnknown