关于显示表通知
适用于: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 成员中,并使用控件进行适当的选择。 |