メッセージ ストア通知の処理
適用対象: Outlook 2013 | Outlook 2016
メッセージ ストア通知を登録するには、 IMAPISession::Advise メソッドまたは IMsgStore::Advise メソッドを呼び出し、 lpEntryID パラメーターの内容にメッセージ ストア、フォルダー、またはメッセージ エントリ識別子を指定します。 メッセージ ストア プロバイダーは、オブジェクト通知とテーブル通知の両方をサポートします。 特定のメッセージ ストア オブジェクトに登録するか、これらのオブジェクトを記述するフォルダー階層テーブルとコンテンツ テーブルに登録するか、オブジェクトとテーブルの両方に登録するかは、表示される通知、操作を実行するために行う呼び出し、およびメッセージ ストア プロバイダーが通知をサポートする方法によって異なります。
MAPI は、プロバイダーが通知をサポートする方法の柔軟性を可能にするため、すべてのメッセージ ストア プロバイダーから特定のイベントに応答して、常に同じ種類の通知を受け取るわけではないことに注意してください。 一部のメッセージ ストア プロバイダーでは、通知はまったくサポートされていません。 使用しているメッセージ ストアで通知がサポートされているかどうかを確認するには、PR_STORE_SUPPORT_MASK (PidTagStoreSupportMask) プロパティでSTORE_NOTIFY_OK ビットを探します。
通知をサポートするメッセージ ストア プロバイダーの一端には、"リッチ" 通知を生成するプロバイダーがあります。これらのプロバイダーは、登録されているすべてのアドバイス ソースについて説明的な通知を送信します。 もう一方の端には、制限付き通知をサポートするメッセージ ストア プロバイダーがあります。これらのプロバイダーは、制限された数のアドバイス ソースに対して一般的な通知を送信します。
たとえば、コピーしたオブジェクトとオブジェクトの移動通知の両方を受信するために登録したフォルダーにメッセージをコピーする場合、オブジェクトのコピーされた通知を受け取る場合と受け取らない場合があります。 受信するかどうかは、次によって異なります。
コピーを実行するために呼び出したメソッド。 IMAPIFolder::CopyMessages、IMAPIProp::CopyTo、または IMAPIProp::CopyProps です。
メッセージ ストア プロバイダーがコピー メソッドを実装する方法。
メッセージ ストア プロバイダーがフォルダーに対してオブジェクトのコピーされた通知をサポートするかどうか。
メッセージ ストア プロバイダーのイベント通知を実装する方法を説明する厳密なガイドラインがないため、クライアントは一貫した動作を期待できません。 MAPI では、メッセージ ストア プロバイダーがイベント通知を実装する方法に関する推奨事項が行われ、次の表にこれらの推奨事項の概要が示されています。 表を次のように読み取ります。最初の列で操作を実行した後、3 番目の列にリストされているオブジェクトを使用してその型に登録している場合は、2 番目の列に一覧表示されている型の通知を受け取ります。 たとえば、フォルダーを作成した後、 fnevObjectCreated 通知は、メッセージ ストアに fnevObjectCreated 通知を登録した場合にのみ受け取ります。
操作名 | イベントの種類 | アドバイスソース |
---|---|---|
フォルダーの作成 |
fnevObjectCreated |
メッセージ ストア |
フォルダーの削除 |
fnevObjectDeleted |
メッセージ ストア削除済みフォルダー |
フォルダーを別のフォルダーに移動する |
fnevObjectMoved |
メッセージ ストア移動フォルダー |
あるフォルダーから別のフォルダーにフォルダーをコピーする |
fnevObjectCopied |
メッセージ ストアとコピーされたフォルダー ( fnevObject フォルダー の新しいコピーに対して送信された通知なし) |
計算フォルダー プロパティ (PR_SUBFOLDERS (PidTagSubfolders)、PR_CONTENT_UNREAD (PidTagContentUnreadCount)、PR_CONTENT_COUNT (PidTagContentCount) の変更 |
fnevObjectModified |
メッセージ ストアフォルダーの変更 (親フォルダーへの通知なし) |
メッセージを作成する |
fnevObjectCreated |
メッセージ ストア |
メッセージを削除すると、親フォルダーの PR_CONTENT_COUNT プロパティが変更されます |
fnevObjectDeleted |
メッセージ ストア 削除済みメッセージ |
あるフォルダーから別のフォルダーにメッセージを移動する |
fnevObjectMoved |
メッセージ ストア移動されたメッセージ |
あるフォルダーから別のフォルダーにメッセージをコピーする |
fnevObjectCopied |
メッセージ ストア コピーされたメッセージ (メッセージの新しいコピーに関する fnevObjectCreated 通知なし) |
メッセージを保存すると、親フォルダーの PR_CONTENT_COUNT プロパティが変更されます |
fnevObjectCreated |
最初の保存時にのみメッセージ ストア |
メッセージを保存する |
fnevObjectModified |
最初の保存後の保存時のメッセージ ストア変更メッセージ (親フォルダーへの通知なし) |
検索操作を完了する |
fnevSearchComplete |
メッセージ ストア検索フォルダー |
新しいメッセージ |
fnevNewMail |
メッセージ ストア |
注:
オブジェクトが変更された通知を受け取った場合は、OnNotify 呼び出しの lpNotifications パラメーターが指すOBJECT_NOTIFICATION構造体のプロパティ タグ配列部分が NULL の場合とそうでない場合があります。 メッセージ ストア プロバイダーは、この配列にプロパティ情報を挿入する必要はありません。ほとんどの場合は挿入しません。 OnNotify メソッドが lpPropTagArray ポインターが NULL の場合に処理できることを確認します。
ほとんどの場合、すべてのオブジェクト通知ではない場合は、影響を受けるフォルダーのビューを更新します。