状態テーブル

適用対象: Outlook 2013 | Outlook 2016

状態テーブルには、現在のセッションの状態に関連する情報が含まれています。 MAPI とサービス プロバイダーによって提供される情報を含む MAPI セッションごとに 1 つの状態テーブルがあります。 MAPI は、MAPI サブシステムの行、MAPI スプーラーの行、統合アドレス帳の行の 3 つの行のデータを提供します。 トランスポート プロバイダーは状態テーブルに状態情報を提供する必要があるため、アクティブなトランスポート プロバイダーごとに 1 つの行があります。 アドレス帳およびメッセージ ストア プロバイダーは、状態テーブルをサポートするかどうかを選択できます。

各行は異なるリソースによって提供されるため、列のセットは行ごとに異なる場合があります。 すべての状態オブジェクトが指定する必要がある列のセットと、MAPI が提供する列のセットがあります。 サービス プロバイダーはこれらのセットに追加して、プロバイダー固有のプロパティを公開できます。 たとえば、メッセージ ストア プロバイダーはPR_STORE_RECORD_KEY (PidTagStoreRecordKey) を追加して、クライアントにメッセージ ストアの識別子を提供します。 クライアントは、この追加情報の存在に関する事前の知識を持っている必要があります。

次の表に、すべての状態テーブル行に含まれている必要があるプロパティを示します。 status オブジェクトの実装者は、いくつかのプロパティを提供します。その他は MAPI によって計算されます。

status オブジェクトによって提供されるプロパティ MAPI によって提供されるプロパティ
PR_DISPLAY_NAME (PidTagDisplayName)
PR_PROVIDER_DLL_NAME (PidTagProviderDllName)
PR_STATUS_CODE (PidTagStatusCode)
PR_RESOURCE_FLAGS (PidTagResourceFlags)
PR_RESOURCE_METHODS (PidTagResourceMethods)
PR_RESOURCE_TYPE (PidTagResourceType)

status オブジェクトが ID を提供する場合は、 PR_IDENTITY_DISPLAY (PidTagIdentityDisplay)、 PR_IDENTITY_ENTRYID (PidTagIdentityEntryId)、 および PR_IDENTITY_SEARCH_KEY (PidTagIdentitySearchKey) を設定し、これらのプロパティをテーブルに含める必要があります。

4 つのプロパティは、状態テーブルの行ごとに MAPI によって計算されます。

プロパティ ...
PR_ENTRYID (PidTagEntryId)
PR_INSTANCE_KEY (PidTagInstanceKey)
PR_OBJECT_TYPE (PidTagObjectType)
PR_ROWID (PidTagRowid)

MAPI は、エントリ識別子を状態行に割り当てて、クライアントが対応する状態オブジェクトを開くできるようにします。 行識別子は、状態オブジェクト内のデータを識別するためのインスタンス キーとして、テーブル内の行を識別するためにも割り当てられます。 PR_OBJECT_TYPE プロパティは MAPI_STATUS に設定されます。

状態テーブルにアクセスするために、クライアントは IMAPISession::GetStatusTable メソッドを 呼び出します。 この呼び出しは、起動時にすぐに行うべきではありません。 これは、 GetStatusTable は MAPI スプーラーがトランスポート プロバイダーを初期化するのを待つ必要があるためです。これは、クライアントがログオンを完了するまで延期される操作です。 GetStatusTable は、MAPI スプーラーのスタートアップ処理が完了した後の比較的高速な呼び出しです。

状態テーブルの情報は、状態オブジェクトにアクセスしたり、クライアントが接続モードまたはオフライン モードで実行されているかどうかを判断したり、プロバイダーの状態を監視したりするなど、さまざまな方法で使用できます。 たとえば、クライアントは、 PR_ENTRYID プロパティの値を IMAPISession::OpenEntry メソッドに渡すことで、特定のサービス プロバイダーの状態オブジェクトを開くことができます。 status オブジェクトは、サービス プロバイダーのパスワードの変更、メッセージ キューのフラッシュ、構成プロパティ シートの表示、プロバイダーとの状態の直接の確認を行うメソッドを含む インターフェイスである IMAPIStatus インターフェイスをサポートします。 状態テーブル情報を使用してダイアログ ボックスを作成し、長い操作中の進行状況をクライアントに通知することもできます。

状態テーブルをサポートするサービス プロバイダーは、 IMAPISupport::ModifyStatusRow メソッドを使用して行を作成および更新します。 行に変更が発生するたびに、状態テーブルの通知を受け取るために登録されているすべてのシンク オブジェクトに通知する必要があります。 サービス プロバイダーは、MAPI 通知ユーティリティを使用している場合は IMAPISupport::Notify メソッドを呼び出すか、シンクの IMAPIAdviseSink::OnNotify メソッドを直接呼び出すことができます。

関連項目

MAPI テーブル