外部のアドレス帳プロバイダーとして動作しています。Acting as a foreign address book provider

適用されます: OutlookApplies to: Outlook

外部のプロバイダーは、アドレス帳プロバイダーです。A foreign provider is an address book provider that:

  • その受信者のテンプレートの識別子を割り当てます。Assigns template identifiers for its recipients.

  • IABLogon::OpenTemplateIDメソッドをサポートしています。Supports the IABLogon::OpenTemplateID method.

  • ホスト プロバイダーと呼ばれるその他のアドレス帳のプロバイダーのコンテナー内に存在する受信者を管理するためのコードを提供します。Supplies code for maintaining recipients that exist in the containers of other address book providers known as host providers. このコードでは、プロパティ オブジェクト、通常IMAPIPropインターフェイスの実装、ホスト プロバイダーからのプロパティのオブジェクトをラップする必要があります。This code involves a property object, typically an IMAPIProp interface implementation, which wraps a property object from the host provider.

外部のプロバイダーとしての機能は、オプションの役割です。すべてのプロバイダーでは、テンプレートの識別子と、関連するコードをサポートする必要があります。Acting as a foreign provider is an optional role; not all providers need to support template identifiers and their related code. ホスト プロバイダーは、プロバイダーから提供されたテンプレートを使用するを作成する受信者の管理を維持する場合は、外部プロバイダーとしてプロバイダーを実装します。Implement your provider as a foreign provider if you want to maintain control over recipients that host providers create using templates supplied by your provider.

エントリ id は、プロバイダーを使用する形式は、そのテンプレートの識別子も使用できます。The format that your provider uses for its entry identifiers can also be used for its template identifiers. テンプレート識別子には、正常に受信者を適切なプロバイダーにバインドするための MAPI を有効にするのには、プロバイダーの登録されているMAPIUIDを含める必要があります。Template identifiers must include your provider's registered MAPIUID to enable MAPI to successfully bind recipients to the appropriate providers.

MAPI では、ホスト プロバイダーの呼び出しIMAPISupport::OpenTemplateIDするときに、プロバイダーのIABLogon::OpenTemplateIDメソッドを呼び出します。MAPI calls your provider's IABLogon::OpenTemplateID method when a host provider calls IMAPISupport::OpenTemplateID. ホスト プロバイダーは、 IMAPISupport::OpenTemplateIDへの呼び出し内の_lpTemplateID_パラメーターで、受信者のテンプレートの識別子を渡します。The host provider passes the template identifier of the recipient in the lpTemplateID parameter in its call to IMAPISupport::OpenTemplateID. MAPI では、テンプレートの識別子が、 MAPIUIDテンプレート id でログオン時に、プロバイダーが登録されているMAPIUIDとを照合することによって、プロバイダーに属しているを決定します。MAPI determines that the template identifier belongs to your provider by matching the MAPIUID in the template identifier with the MAPIUID that your provider registered at logon time. MAPI は、 IABLogon::OpenTemplateIDメソッドを使用し、プロバイダーのホスト プロバイダーの呼び出しを転送します。MAPI then forwards the host provider's call to your provider through the IABLogon::OpenTemplateID method.

ホスト プロバイダーもポインターを渡します、プロパティ オブジェクトの実装に、 lpMAPIPropData_パラメーター内の受信者、インターフェイスの実装の種類に対応する_lpInterface_パラメーターにインターフェイス識別子_lpMAPIPropData、およびオプションのフラグ、FILL_ENTRY に渡されます。The host provider also passes a pointer to its property object implementation for the recipient in the lpMAPIPropData parameter, an interface identifier in the lpInterface parameter that corresponds to the type of interface implementation passed in lpMAPIPropData, and an optional flag, FILL_ENTRY. プロバイダーは、 _lpInterface_で指定された型のプロパティ オブジェクトの実装に_lppMAPIPropNew_パラメーターにポインターを返す必要があります。Your provider is expected to return in the lppMAPIPropNew parameter a pointer to a property object implementation of the type specified in lpInterface. 返されたポインターできる、プロバイダーによって実装されているプロパティをラップされたオブジェクトにまたは_lpMAPIPropData_のホスト プロバイダーから提供されたオブジェクトにします。The returned pointer can either be to the wrapped property object implemented by your provider or to the object supplied by the host provider in lpMAPIPropData. プロバイダーがプロパティをラップされたオブジェクトのポインターを返す必要がある場合。Your provider should return a wrapped property object pointer when:

  • 受信者の表示のテーブルには、リスト ボックス コントロールが含まれています。The recipient's display table contains list box controls.

  • 受信者の電子メール アドレスは、複数のディスプレイ テーブル コントロール内のデータで組み立てられる必要があります。The email address for the recipient must be assembled from data in multiple display table controls.

  • プロバイダーの問題では、テーブルの通知を表示します。Your provider issues display table notifications.

FILL_ENTRY フラグは、ホスト プロバイダーを更新する受信者のすべてのプロパティが必要である、プロバイダーに指示します。The FILL_ENTRY flag indicates to your provider that the host provider requires all the properties of the recipient to be updated. プロバイダーは、この要求を満たすために必要です。Your provider is required to fulfill this request.

ホスト プロバイダーが、プロバイダーのOpenTemplateIDメソッドを呼び出すと、プロバイダー可能性があります。When a host provider calls your provider's OpenTemplateID method, your provider might:

  • コピーしたエントリのデータを定期的に更新します。Periodically update the data for a copied entry.

  • コピーしたエントリが個人用アドレス帳にアドレス帳エントリをコピーするときなど、元と同期してください。Keep a copied entry synchronized with its original, such as when an address book entry is copied to the personal address book.

  • サーバー上のデータからコピーしたエントリの詳細の表でボックスの実装の機能リストを動的に生成するなど、ホスト プロバイダーが実装することはできません。Implement functionality that cannot be implemented by the host provider, such as dynamically populating list boxes in the copied entry's details table from data on a server.

  • コピーしたエントリまたはインスタンス化されたテンプレートのプロパティ間の相互作用を制御します。Control the interaction among properties in a copied entry or instantiated template. [明細] テーブルに表示されるその他のプロパティから、たとえば、 PR_EMAIL_ADDRESSを計算しています。For example, computing PR_EMAIL_ADDRESS from other properties displayed in the details table.

プロパティをラップされたオブジェクトを指定するのには、プロバイダーを必要としないタスクの例としては、最初の 2 つの項目、ホスト プロバイダーの実装に基づくIMAPIPropを実装します。The first two items are examples of tasks that do not require your provider to supply a wrapped property object — an implementation of IMAPIProp that is based on the host provider's implementation. プロバイダーは、必要に応じて、戻り値、 _lpMAPIPropData_パラメーターでは、ホスト プロバイダーから渡されたポインターを指すように_lppMAPIPropNew_パラメーターを設定するとプロパティを更新できますだけです。Your provider can simply update the properties as necessary and return, setting the lppMAPIPropNew parameter to point to the pointer passed in by the host provider in the lpMAPIPropData parameter.

2 つ目は 2 つのタスクでは、エントリのプロパティ シートを表示する機能などの追加機能によって、ホスト プロバイダーのオブジェクトをラップするプロパティ オブジェクトのホスト プロバイダーには、プロバイダーが返す必要があります。The second two tasks require that your provider return to the host provider a property object that wraps the host provider's object with additional functionality, such as the ability to display a property sheet for the entry. このプロパティ オブジェクトはメッセージのユーザーまたは配布リスト、 _lpMAPIPropData_パラメーターでは、ホスト プロバイダーによって渡される_lpInterface_パラメーターにインターフェイス識別子で指定されたオブジェクトの種類に応じて。This property object will either be a messaging user or distribution list, depending on the type of object passed in by the host provider in the lpMAPIPropData parameter and indicated by the interface identifier in the lpInterface parameter. _LpMAPIPropData_パラメーターは、メッセージングのユーザーをポイントしている場合、プロバイダーのプロパティをラップされたオブジェクトは、 IMailUser実装をする必要があります。If the lpMAPIPropData parameter points to a messaging user, your provider's wrapped property object must be an IMailUser implementation. _LpMAPIPropData_は、配布リストをポイントしている場合、 IDistListの実装があります。If lpMAPIPropData points to a distribution list, it must be an IDistList implementation.

IMAPIPropホスト プロバイダーの受信者のコンテキストに固有の操作を実行するメソッドの呼び出しをインターセプトする、プロバイダーのプロパティをラップされたオブジェクトのそれをラップするオブジェクト。Your provider's wrapped property object intercepts IMAPIProp method calls to perform context-specific manipulation of the host provider's recipient—the object it is wrapping. MAPI では、オブジェクトの折り返しが設定されたプロパティの要件の 1 つだけは、: IMAPIProp::OpenProperty PR_DETAILS_TABLE (PidTagDetailsTable) のプロパティを要求するすべての呼び出しは、ホスト プロバイダーに渡す必要があります。MAPI only has one requirement for wrapped property objects: all calls to IMAPIProp::OpenProperty requesting the PR_DETAILS_TABLE (PidTagDetailsTable) property should be passed to the host provider. プロバイダーの実装は、表示テーブルの通知を受け取るかに応じて、独自に追加するのには、返されるテーブルを使用できます。Your provider's implementation can use the returned table to intercept display table notifications or to add its own if necessary.

次の一覧には、外部プロバイダーによって実装されるプロパティをラップされたオブジェクトの実装は、通常のタスクが含まれています。The following list includes tasks that are typically implemented in the wrapped property object implemented by foreign providers:

  • 前処理スクリプトとIMAPIProp::GetPropsのホストの受信者のプロパティの値を後処理します。Preprocessing and postprocessing property values for the host recipient in IMAPIProp::GetProps.

  • 処理の詳細は、 IMAPIProp::OpenPropertyのボタンやリスト ボックスなど、テーブルのコントロールを表示します。Handling details display table controls, such as buttons and list boxes, in IMAPIProp::OpenProperty.

  • 検証またはIMAPIProp::SetPropsでホストの受信者のプロパティの値を操作します。Validating or manipulating property values for the host recipient in IMAPIProp::SetProps.

  • PR_EMAIL_ADDRESSなどの必要なプロパティを計算し、 IMAPIProp::SaveChangesでホストの受信者を保存する前に設定されているすべての必要なプロパティを確認します。Computing required properties such as PR_EMAIL_ADDRESS and verifying that all of the necessary properties have been set before saving the host recipient in IMAPIProp::SaveChanges.

IABLogon::OpenTemplateID を実装するにはTo implement IABLogon::OpenTemplateID

  1. テンプレート識別子が渡された場合、 _lpTemplateID_パラメーターが有効なでは、プロバイダーで認識される形式でを確認します。Check if the template identifier passed in with the lpTemplateID parameter is valid and is in a format that your provider recognizes. そうでない場合は失敗し、MAPI_E_INVALID_ENTRYID を返します。If it is not, fail and return MAPI_E_INVALID_ENTRYID.

  2. テンプレート識別子で指定された型のオブジェクトを作成するメッセージングのユーザー、配布リスト、または 1 回限りの受信者のいずれかです。Create an object of the type indicated by the template identifier, either a messaging user, distribution list, or one-off recipient.

  3. ホスト プロバイダーのプロパティ オブジェクトは、 _lpMAPIPropData_パラメーターが指すオブジェクトのIUnknown::AddRefメソッドを呼び出します。Call the IUnknown::AddRef method in the host provider's property object, which is the object pointed to by the lpMAPIPropData parameter.

  4. 場合は、 _ulTemplateFlags_パラメーターを FILL_ENTRY に設定するとします。If the ulTemplateFlags parameter is set to FILL_ENTRY:

    1. 新しいオブジェクトがメッセージのユーザーまたは配布リストの場合。If the new object is a messaging user or distribution list:

      1. すべてを取得、新しいオブジェクトのプロパティの可能性があります、 IMAPIProp::GetPropsメソッドを呼び出してください。Retrieve all of the properties of the new object, possibly by calling its IMAPIProp::GetProps method.

      2. ホスト プロバイダーのプロパティ オブジェクトを取得したプロパティのすべてをコピーするのには、ホスト プロバイダーのIMAPIProp::SetPropsメソッドを呼び出します。Call the host provider's IMAPIProp::SetProps method to copy all of the retrieved properties to the host provider's property object.

    2. 新しいオブジェクトが 1 回限りの受信者の場合は、次のプロパティを設定するのには、ホスト プロバイダーのIMAPIProp::SetPropsメソッドを呼び出します。If the new object is a one-off recipient, call the host provider's IMAPIProp::SetProps method to set the following properties:

      • PR_ADDRTYPE(PidTagAddressType) は、プロバイダーによって処理されるアドレスの種類にします。PR_ADDRTYPE (PidTagAddressType) to the address type handled by your provider.

      • PR_テンプレート ID (PidTagTemplateid)、 _lpTemplateID_および_cbTemplateID_パラメーターからテンプレート識別子にします。PR_TEMPLATEID (PidTagTemplateid) to the template identifier from the lpTemplateID and cbTemplateID parameters.

      • PR_DISPLAY_TYPE(PidTagDisplayType) DT_MAILUSER または DT_DISTLIST では、必要に応じてします。PR_DISPLAY_TYPE (PidTagDisplayType) to DT_MAILUSER or DT_DISTLIST, as appropriate.

  5. プロバイダーの新しいオブジェクトまたはいずれかが必要で、ラップされたオブジェクトをプロバイダーが判断するかどうかに応じて、 _lpMAPIPropData_パラメーターで渡されたプロパティのオブジェクトを指すように_lppMAPIPropNew_パラメーターの内容を設定します。Set the contents of the lppMAPIPropNew parameter to point to either your provider's new object or the property object passed in with the lpMAPIPropData parameter, depending on whether your provider determines a wrapped object is necessary.

  6. ネットワーク障害や、メモリ不足の状態などの重大なエラーが発生した場合は、適切なエラー値を返します。If a critical error occurs, such as a network failure or an out of memory condition, return the appropriate error value. この値の適切なMAPIERROR構造体、ホスト プロバイダーによって実行されるタスクをクライアントに反映される必要があります。This value should get propagated to the client with the appropriate MAPIERROR structure, a task performed by the host provider.