我正在使用EWS Java与Exchange集成应用程序。是的,我知道它没有得到官方的支持。这一切都非常简单,我在交换服务器上设置了流媒体通知。然而,我遇到了一些有点令人头疼的障碍。
首先,似乎每个事件(或一批事件)都会被发送两次。例如,如果我正在观看Calendar for Modified事件并创建新约会或修改约会,我将收到两个相同的通知,每个通知都有一个ItemEvent和一个FolderEvent。它们肯定是一个接一个地进入的不同物体,两个事件之间没有差别。每个对象在与前一个相关的任何相关字段中具有相同的值。唯一的区别似乎是内存地址。
其次,我希望通知更细粒度。我想查看何时修改了日历项目,但未创建日历项目时。看起来我只能整体观看日历文件夹,而修改包含新项目。有没有办法让它更精确?
编辑:实际上,我发现这似乎只发生在日历文件夹中创建的会议,而且只发生在其他与会者的会议中。两个NotificationEventArgs,每个都有一个FolderEvent和一个ItemEvent。在进一步检查时,我最近发现一个ItemEvent被创建,一个是Modified,这对我现在知道Exchange如何处理约会并不是特别令人惊讶。我的想法是观察创建和修改的项目,虽然我认为它可以被分解为两个流式订阅,或者,根据行为,设置为仅修改为无论如何都会捕获“新”约会。
在任何情况下,这都是使用定期的SyncFolder处理的(在询问此设计和最终设计之间有很多变化),最终效果很好。
答案 0 :(得分:1)
虽然我没有在Java中使用EWS的经验,但我会尝试回答您的问题,因为概念保持不变。我的代码引用将来自C#
对于第一部分,您遇到的行为是预期的行为。订阅文件夹时,会在创建订阅时收到您指定的任何事件的通知。因此,如果您已为修改和创建事件订阅“日历”文件夹,并且您创建或修改约会,则会收到2个通知:
1用于文件夹级别更改(FolderEvent):即使您创建了新项目,该文件夹实际上已被“修改”
1表示项目级别更改(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/library/office/microsoft.exchange.webservices.data.itemevent(v=exchg.80).aspx
对于第二部分,要仅查看已修改的事件,请在创建订阅时仅选择“EventType.Modified”。如果您可以共享您的代码段以显示您的订阅,那将是一件好事。