关于表通知
适用于:Outlook 2013 | Outlook 2016
客户端通常依赖于表通知来了解对对象的更改,而不是注册以直接从对象接收通知。 导致发送通知的典型更改包括添加、删除或修改行以及任何严重错误。 当通知到达时,客户端可以确定是否进行另一次调用来重新加载表。
由于表通知是异步的,因此有一些问题会使处理通知变得不那么简单:
在 TABLE_NOTIFICATION 结构中传递的数据可能不表示表的最新状态。 例如,客户端可能会对消息进行更改,然后决定将其删除。 实现包含消息的内容表的消息存储提供程序发送两个通知:TABLE_ROW_MODIFIED事件后跟TABLE_ROW_DELETED事件。 根据消息存储提供程序的通知时间,客户端可能会在删除行后收到TABLE_ROW_MODIFIED通知。
通知附带的列集可能与表的当前列集不同。 MAPI 要求通知列集与生成通知时生效的列集匹配。 由于客户端可以随时调用 IMAPITable::SetColumns 来更改列集(包括通知后),因此两个列集可能不会同步。
仅针对属于视图的行发送表通知。 也就是说,如果由于限制或表处于折叠状态而从视图中排除了某个行,则如果该行发生更改,则不会发送通知。 此外,不会发送通知来通知客户端类别状态的更改。
客户端应注意,并非所有表都支持TABLE_SORT_DONE通知,并且应准备好通过以下方式处理此情况:
强制进行同步排序。
当 IMAPITable::SortTable 返回时重新加载表的行。