关于表通知

适用于:Outlook 2013 | Outlook 2016

客户端通常依赖于表通知来了解对对象的更改,而不是注册以直接从对象接收通知。 导致发送通知的典型更改包括添加、删除或修改行以及任何严重错误。 当通知到达时,客户端可以确定是否进行另一次调用来重新加载表。

由于表通知是异步的,因此有一些问题会使处理通知变得不那么简单:

  • TABLE_NOTIFICATION 结构中传递的数据可能不表示表的最新状态。 例如,客户端可能会对消息进行更改,然后决定将其删除。 实现包含消息的内容表的消息存储提供程序发送两个通知:TABLE_ROW_MODIFIED事件后跟TABLE_ROW_DELETED事件。 根据消息存储提供程序的通知时间,客户端可能会在删除行后收到TABLE_ROW_MODIFIED通知。

  • 通知附带的列集可能与表的当前列集不同。 MAPI 要求通知列集与生成通知时生效的列集匹配。 由于客户端可以随时调用 IMAPITable::SetColumns 来更改列集(包括通知后),因此两个列集可能不会同步。

  • 仅针对属于视图的行发送表通知。 也就是说,如果由于限制或表处于折叠状态而从视图中排除了某个行,则如果该行发生更改,则不会发送通知。 此外,不会发送通知来通知客户端类别状态的更改。

客户端应注意,并非所有表都支持TABLE_SORT_DONE通知,并且应准备好通过以下方式处理此情况:

  1. 强制进行同步排序。

  2. 当 IMAPITable::SortTable 返回时重新加载表的行。

另请参阅

MAPI 表