關於顯示數據表通知
適用於:Outlook 2013 |Outlook 2016
負責將顯示數據表建立至MAPI的服務提供者會傳送顯示數據表上的通知。 MAPI 會藉由呼叫顯示數據表的 IMAPITable::Advise 方法並指定資料表修改事件來註冊這些通知。
如同所有數據表通知,顯示數據表通知包含 TABLE_NOTIFICATION 結構。 只有這個結構的 ulTableEvent 和 propIndex 成員很重要;會忽略其他成員。 ulTableEvent 成員設定為 TABLE_ROW_MODIFIED,而且 propIndex 成員會設定為對應數據列中 PR_CONTROL_ID (PidTagControlId) 數據行的值。 MAPI 會針對控件中顯示的屬性呼叫 IMAPIProp::GetProps 方法,並顯示新值,以回應通知。
服務提供者可以使用顯示數據表通知來協調對話框上相關控件的變更。 例如,如果屬性介面實作需要重新整理對話方塊上的一或多個字段 ,或許是為了回應在其PR_CONTROL_FLAGS (PidTagControlFlags) 屬性中設定DT_SET_IMMEDIATE旗標的另一個控件,它可以產生顯示數據表通知。 顯示數據表通知可以警示屬性介面實作,因為發生變更或發生外部事件,因此必須重新讀取一或多個控件的值。
服務提供者可以透過下列方式發出顯示資料表通知:
如果顯示數據表是使用數據表數據物件所建置,請呼叫 ITableData::HrNotify。
- 或-
如果顯示資料表是使用提供者的 IMAPITable 實作所建置,請使用自己的程式代碼。
MAPI 會在必要時響應顯示資料表通知,方法是從屬性介面實作重新讀取控件的值。 下表描述 MAPI 如何處理特定控制項類型之通知的詳細數據。
Control | MAPI 動作 |
---|---|
按鈕 |
呼叫 IMAPIProp::OpenProperty,以 DTBLBUTTON 結構的 ulPRControl 成員所代表的屬性擷取控件物件,如果呼叫先前失敗。 呼叫控件物件的 IMAPIControl::GetState ,以判斷是否應該啟用按鈕,並據此啟用或停用按鈕。 |
核取方塊 |
重新讀取 ulPRPropertyName 成員的值。 |
下拉式方塊 |
重新開啟與 DTBLCOMBOBOX 結構的 ulPRTableName 成員相關聯的數據表。 重新讀取所有數據列,包括 ulPRPropertyName成員的值。 |
下拉清單框 |
重新開啟與 DTBLDDLBX 結構的 ulPRTableName 成員相關聯的數據表,並重新讀取所有數據列。 呼叫 IMAPIProp::GetProps 來擷取儲存在 ulPRDisplayProperty 和 ulPRSetProperty 成員中的屬性值。 |
編輯 |
重新讀取 屬性並重新顯示。 |
分組框 |
忽略通知。 |
標籤 |
忽略通知。 |
多重選取清單框 |
如果其中一個數據行是專案標識碼,請重新整理清單框。 對應的物件不會關閉或重載。 |
單一選取清單框 |
讀取 set 屬性,嘗試識別它。 |
多重值清單框 |
重新讀取 屬性並重新填入清單框。 |
索引標籤式頁面 |
此控件沒有通知;一切都是靜態的。 |
單選按鈕 |
重新讀取與按鈕相關聯的 屬性,並儲存在 DTBLRADIOBUTTON 結構的 ulPropTag 成員中,並使用 控件進行適當的選取。 |