1

我正在使用 EWS Java 将应用程序与 Exchange 集成。是的,我知道,它没有得到官方支持。这一切都非常简单,我在交换服务器上设置了流式通知。但是,我遇到了一些令人头疼的问题。

首先,似乎每个事件(或一批事件)都被发送了两次。例如,如果我正在查看已修改事件的日历并创建新约会或修改约会,我将收到两个相同的通知,每个通知都有一个 ItemEvent 和一个 FolderEvent。它们绝对是一个接一个地进入的不同对象,两个事件之间的差异为零。每个对象在任何相关字段中都与前一个对象具有相同的值。唯一的区别似乎是内存地址。

其次,我希望让通知更细粒度。我想查看日历项何时被修改,而不是何时创建日历项。看来我只能整体观看日历文件夹,并且已修改包含新项目。有没有办法让它更精确?

编辑:实际上,我发现这似乎只发生在日历文件夹中创建的会议上,并且只发生在其他与会者的会议上。两个 NotificationEventArgs,每个都有一个 FolderEvent 和一个 ItemEvent。经过进一步检查,我最近发现一个 ItemEvent 是 Created 一个是 Modified,这对我来说并不奇怪,现在我知道 Exchange 倾向于如何处理 Appointments。这个想法是监视创建的和修改的项目,尽管我认为它可以被分解为两个流订阅,或者,鉴于行为,设置为仅修改,因为无论如何都会捕获“新”约会。

无论如何,这是通过定期 SyncFolder 处理的(在提出这个要求和最终设计之间发生了很大变化),最终效果很好。

4

1 回答 1

2

尽管我没有使用 Java 开发 EWS 的经验,但我会尝试回答您的问题,因为概念保持不变。我的代码参考将来自 C#

对于第一部分,您遇到的行为是预期的行为。当您订阅文件夹时,您会收到有关您在创建订阅时指定的任何事件的通知。因此,如果您订阅了“日历”文件夹中的“已修改”和“创建”事件,并且您创建或修改了约会,您将收到 2 条通知:


1 为Folder 级别更改(FolderEvent):即使创建了一个新项目,该文件夹实际上已经被“修改”
1 为Item 级别更改(ItemEvent):为创建的项目

这两个不一样。它们可能看起来相似,都继承自“NotificationEvent”基类,但类型不同。 http://msdn.microsoft.com/en-us/library/office/microsoft.exchange.webservices.data.folderevent(v=exchg.80).aspx http://msdn.microsoft.com/en-us/图书馆/办公室/microsoft.exchange.webservices.data.itemevent(v=exchg.80).aspx

对于第二部分,要仅查看已修改的事件,请在创建订阅时仅选择“EventType.Modified”。如果您可以分享您的代码片段以显示您的订阅方式,那就太好了。

于 2013-12-18T00:20:41.973 回答