共用方式為


MAPI 中的事件通知

適用於:Outlook 2013 |Outlook 2016

事件通知是兩個MAPI對象之間的信息通訊。 透過其中一個 物件,用戶端或服務提供者會註冊變更或錯誤的通知,稱為事件,這可能會發生在另一個物件中。 事件發生之後,第一個物件會收到變更或錯誤的通知。 接收通知的對象稱為「建議接收」;負責通知的對象稱為建議來源。

建議接收物件有三種類型 (所有類型都是標準MAPI物件) :

  • 建議接收物件。
  • 表單建議接收物件。
  • 檢視建議接收物件。

建議接收物件是最常見的類型。 建議接收通常由用戶端應用程式實作,以接收通訊簿和訊息存放區通知,並支援 IMAPIAdviseSink :IUnknown 介面。 IMAPIAdviseSink 包含單一方法 IMAPIAdviseSink::OnNotify。 表單和檢視建議接收較不常見;它們會實作以接收有關自定義表單變更的通知。 表單建議接收器支援 IMAPIFormAdviseSink:IUnknown 介面和檢視建議接收器支援 IMAPIViewAdviseSink :IUnknown 介面。 因為大部分的用戶端都會實作標準建議接收物件,所以假設通知的討論與通訊簿和訊息存放區通知有關,而不是窗體通知。 如需表單通知的詳細資訊,請參閱 MAPI Forms通知撰寫表單伺服器程式代碼

建議來源物件是由服務提供者和MAPI實作。 並非所有服務提供者都支援事件通知;這是選擇性的,但強烈建議使用。 訊息存放區和通訊簿提供者通常支援其數個物件的物件通知,以及其內容和階層數據表上的數據表通知。 傳輸提供者不直接支援通知;它們依賴與客戶端通訊的替代方法。

不同於建議接收,建議來源物件不是唯一類型的MAPI物件。 許多MAPI物件,例如訊息存放區和數據表,都可以擔任建議來源的角色。 建議來源是執行下列動作的任何MAPI物件:

  • 實作 [ 建議 ] 方法來接收通知註冊。

  • 實作 Unadvise 方法來接收通知取消。

  • 透過呼叫其 IMAPIAdviseSink::OnNotify 方法,為已註冊的適當建議接收對象產生適當類型的通知。

實作建議接收物件的用戶端會在想要註冊通知時呼叫 「 建議 」,在大部分情況下,會傳入要進行註冊之對象的專案標識符,而當客戶想要取消註冊時,則會呼叫 Unadvise 。 用戶端會將參數傳遞至 [建議 ],指出他們想要監視的數種事件類型。 建議 傳回非零的數位,代表建議接收和建議來源之間的成功連線。

在呼叫 [建議] 之前,用戶端可以檢查訊息存放區的 PR_STORE_SUPPORT_MASK (PidTagStoreSupportMask) 屬性中是否已設定STORE_NOTIFY_OK旗標,以判斷訊息存放區提供者是否支援通知。 用戶端無法事先判斷通訊錄提供者是否支援通知。 客戶端必須嘗試註冊,如果嘗試失敗,則可以假設不支援通知。

當用戶端已註冊的事件發生時,建議來源會透過呼叫其 IMAPIAdviseSink::OnNotify 方法並包含事件相關信息的通知數據結構來通知通知通知接收器。 建議接收器的 OnNotify 實作可以執行工作來回應通知,例如更新記憶體中的數據或重新整理螢幕顯示器。

服務提供者可以手動實作通知支援,或利用三種 IMAPISupport 方法提供的說明: IMAPISupport::SubscribeIMAPISupport::UnsubscribeIMAPISupport::NotifySubscribeUnsubscribe 方法會處理提供者的通知註冊和取消註冊;Notify 方法會在適當時處理傳送通知。

若要使用支持物件方法進行通知註冊,服務提供者會在其 [建議] 方法中呼叫 IMAPISupport::Subscribe,並傳遞至 [訂閱客戶端傳遞至建議] 的建議接收指標。 如果專案標識元傳遞為輸入參數來指定建議來源,服務提供者會將它轉換成二進位密鑰。 訂閱 會建立唯一的連接編號,而服務提供者會將此號碼傳回給用戶端。 服務提供者可以在 「 建議 」呼叫完成之後,隨時釋放客戶端的建議接收物件指標。

當用戶端呼叫 Unadvise 取消註冊時,服務提供者會在客戶端的建議接收器上遞減參考計數,或呼叫 Unsubscribe 來執行相同的動作。

當您要產生通知時,服務提供者會執行任何與通知相關的內部處理,並將所有未使用的成員設定為零,以初始化 NOTIFICATION 結構。 這項初始化 NOTIFICATION 結構的技術可協助用戶端建立較小、更快且較不容易出錯的 OnNotify 實作。

下圖顯示建議接收對象、建議來源物件和MAPI之間的通訊。 只有當建議來源呼叫 IMAPISupport 方法以取得通知支援時,才會涉及 MAPI。

Event notification calls

事件通知呼叫

MFCMAPI CAdviseSink 類別 (使用 AdviseSink.h 和 AdviseSink.cpp 檔案) 實作所有對 Advise 呼叫的建議接收物件。 如需 MFCMAPI 的詳細資訊,請參閱 MFCMAPI 即程式代碼範例MFCMAPI