次の方法で共有


セッションを使用したオブジェクトへのアクセス

適用対象: Outlook 2013 | Outlook 2016

MAPILogonEx の呼び出しから受け取るセッション ポインターを使用して、さまざまなオブジェクトにアクセスできます。 次の表は、さまざまなオブジェクトへのアクセスに使用されるメソッドの一覧です。

Object Session メソッド
プロファイル セクション
IMAPISession::OpenProfileSection
メッセージ ストア
IMAPISession::OpenMsgStore
アドレス帳
IMAPISession::OpenAddressBook
メッセージ サービス管理オブジェクト
IMAPISession::AdminServices
フォルダー、メッセージ、アドレス帳コンテナー、配布リスト、またはメッセージング ユーザー
IMAPISession::OpenEntry

OpenEntry メソッドと有効なエントリ識別子を使用すると、任意のアドレス帳またはメッセージ ストア プロバイダー オブジェクトを開くことができます。 MAPI には、IMAPISession メソッドに加えて、他の OpenEntry メソッドがあります。 OpenEntry は、次のオブジェクトに実装されています。

Object メソッド
アドレス帳プロバイダーのログオン オブジェクト
IABLogon::OpenEntry
アドレス帳
IAddrBook::OpenEntry
アドレス帳コンテナー
IMAPIContainer::OpenEntry
セッション
IMAPISession::OpenEntry
メッセージ ストア
IMsgStore::OpenEntry
メッセージ ストア プロバイダーのログオン オブジェクト
IMSLogon::OpenEntry
フォルダー
IMAPIContainer::OpenEntry
サポート オブジェクト
IMAPISupport::OpenEntry

一部の OpenEntry メソッドでは、 IMAPISession::OpenEntry と同様に、オブジェクトのエントリ識別子を開く必要があります。その他のメソッドでは NULL を指定できます。 NULL エントリ識別子は、オブジェクトに応じて異なる方法で解釈されます。 たとえば、NULL エントリ識別子を使用して IAddrBook::OpenEntry を呼び出すと、MAPI によってアドレス帳のルート コンテナーが開きます。 メッセージ ストアの OpenEntry メソッドも同様に動作します。メッセージ ストアのルート フォルダーが開きます。 フォルダーとアドレス帳コンテナーの両方によって実装される IMAPIContainer::OpenEntry は、実装者によっては、MAPI_E_INVALID_PARAMETERまたはルート コンテナーを返す場合があります。

エントリ識別子の NULL 値を許可しないことに加えて、セッションの OpenEntry メソッドは、そのジョブがオブジェクトを開くためではないため、他の OpenEntry メソッドとは異なります。 代わりに、エントリ識別子を調べ、適切なサービス プロバイダーによって実装された別の OpenEntry メソッドに呼び出しを転送します。 たとえば、メッセージのエントリ識別子を使用して IMAPISession::OpenEntry を呼び出す場合、MAPI はメッセージを担当するメッセージ ストアの IMSLogon::OpenEntry メソッドを呼び出します。

セッションを使用してオブジェクトを開くだけでなく、クライアントはそれを使用して比較します。 IMAPISession::CompareEntryIDs メソッドは、エントリ識別子を比較することでオブジェクトを比較します。 エントリ識別子に含まれる MAPIUID 構造体が同じサービス プロバイダーに属している場合、MAPI はそのプロバイダーへの呼び出しを転送します。 CompareEntryIDs は、 2 つのエントリ識別子が一致しない場合にエラー値を返します。 このメソッドは、任意の種類のオブジェクトに属するエントリ識別子を比較できますが、メッセージ ストアやアドレス帳コンテナーなどの上位レベルのオブジェクトには CompareEntryID が最適です。 下位レベルのオブジェクトを比較するには、オブジェクトの検索キー (PR_SEARCH_KEY (PidTagSearchKey)) またはレコード キー (PR_RECORD_KEY (PidTagRecordKey)) を直接比較します。

OpenEntry と同様に、CompareEntryIDs は複数のオブジェクトによって実装されます。 開くオブジェクトまたは比較するオブジェクトに関する情報の量に応じて、使用する OpenEntry メソッドと CompareEntryID メソッドを選択します。 呼び出すインターフェイス メソッドを決定するときは、次のガイドラインを使用します。

  • ターゲット オブジェクトに関する情報がない場合は、 IMAPISession::OpenEntry または IMAPISession::CompareEntryIDs を呼び出します。 この方法では、任意のオブジェクトにアクセスできますが、3 つのオブジェクトの中で最も低速です。

  • ターゲット オブジェクトがフォルダーではなくアドレス帳エントリであることがわかっている場合は、 IAddrBook::OpenEntry メソッドまたは IAddrBook::CompareEntryIDs メソッドを呼び出します。 ターゲット オブジェクトとして NULL が指定されている場合、IAddrBook::OpenEntry によってアドレス帳のルート コンテナーが開きます。 この方法では、任意のアドレス帳オブジェクトにアクセスでき、 IMAPISession を使用するよりも高速ですが、 IMAPIContainer を使用するよりも遅くなります。

  • 使用されているエントリ識別子が短期エントリ識別子である場合、またはターゲット オブジェクトが特定のアドレス帳コンテナーまたはフォルダーに属していることがわかっている場合は、 IMAPIContainer::OpenEntry メソッドを呼び出します。 この方法では、最も高速なパフォーマンスが得られますが、特定のコンテナーまたはフォルダー内のオブジェクトにのみアクセスできます。