テーブル通知の表示について
適用対象: Outlook 2013 | Outlook 2016
表示テーブルの通知は、MAPI への表示テーブルの作成を担当するサービス プロバイダーによって送信されます。 MAPI は、表示テーブルの IMAPITable::Advise メソッドを呼び出し、テーブル変更イベントを指定することで、これらの通知を登録します。
すべてのテーブル通知と同様に、表示テーブル通知には TABLE_NOTIFICATION 構造が含まれます。 この構造体の ulTableEvent メンバーと propIndex メンバーのみが重要です。他のメンバーは無視されます。 ulTableEvent メンバーは TABLE_ROW_MODIFIED に設定され、propIndex メンバーは対応する行のPR_CONTROL_ID (PidTagControlId) 列の値に設定されます。 MAPI は、コントロールに表示されるプロパティの IMAPIProp::GetProps メソッドを呼び出し、新しい値を表示することで、通知に応答します。
表示テーブル通知は、サービス プロバイダーがダイアログ ボックスの関連コントロールへの変更を調整するために使用できます。 たとえば、プロパティ インターフェイスの実装でダイアログ ボックスの 1 つ以上のフィールドを更新する必要がある場合は、たとえば、 PR_CONTROL_FLAGS (PidTagControlFlags) プロパティでDT_SET_IMMEDIATE フラグを設定した別のコントロールに応答して、表示テーブル通知を生成できます。 表示テーブル通知は、変更が行われたり、外部イベントが発生したために 1 つ以上のコントロールの値を再読み取りする必要があることをプロパティ インターフェイスの実装に警告できます。
サービス プロバイダーは、次の方法で表示テーブル通知を発行できます。
表示テーブルがテーブル データ オブジェクトを使用してビルドされた場合は、 ITableData::HrNotify を呼び出します。
- または-
プロバイダーの IMAPITable 実装を使用して表示テーブルがビルドされた場合は、独自のコードを使用します。
MAPI は、プロパティ インターフェイスの実装からコントロールの値を再読み取りすることで、必要に応じて表示テーブルの通知に応答します。 次の表では、MAPI が特定の種類のコントロールの通知を処理する方法に関する詳細について説明します。
Control | MAPI アクション |
---|---|
ボタン |
呼び出しが以前に失敗した場合、IMAPIProp::OpenPropertyを呼び出して、DTBLBUTTON 構造体の ulPRControl メンバーによって表されるプロパティを使用してコントロール オブジェクトを取得します。 コントロール オブジェクトの IMAPIControl::GetState を呼び出して、ボタンを有効にするかどうかを判断し、それに応じてボタンを有効または無効にします。 |
チェック ボックス |
ulPRPropertyName メンバーの値を再読み取りします。 |
コンボ ボックス |
DTBLCOMBOBOX 構造体の ulPRTableName メンバーに関連付けられているテーブルを再度開きます。 ulPRPropertyNameメンバーの値を含むすべての行を再読み込みします。 |
ドロップダウン リスト ボックス |
DTBLDDLBX 構造体の ulPRTableName メンバーに関連付けられているテーブルを再度開き、すべての行を再読み込みします。 IMAPIProp::GetProps を呼び出して、ulPRDisplayProperty および ulPRSetProperty メンバーに格納されているプロパティの値を取得します。 |
編集 |
プロパティを再読み込みし、再表示します。 |
グループ ボックス |
通知を無視します。 |
Label |
通知を無視します。 |
複数選択リスト ボックス |
列の 1 つがエントリ識別子の場合は、リスト ボックスを更新します。 対応するオブジェクトは閉じられないか、再読み込みされません。 |
単一選択リスト ボックス |
set プロパティを読み取り、それを識別します。 |
複数値リスト ボックス |
プロパティを再読み込みし、リスト ボックスを再入力します。 |
タブ付きページ |
このコントロールの通知はありません。すべてが静的です。 |
ラジオボタン |
ボタンに関連付けられているプロパティを再読み取りし、DTBLRADIOBUTTON 構造体の ulPropTag メンバーに格納され、コントロールで適切な選択を行います。 |