将Office365 REST日历ID映射到EWS CalendarItem ID

时间:2015-05-06 16:22:07

标签: office365 exchangewebservices ews-managed-api

使用Exchange push notifications我一直在创建一项同步来自Office365用户的日历数据的服务。我一直在使用Office365 Calendar REST API(获取和管理日历)和EWS API(订阅日历更改)的组合。

我注意到最近MS已经为他们的订阅端点引入了预览API。但是,此API仍处于预览模式,我希望暂时不使用它。

一旦我完成了所有设置,问题是我无法在推送通知上返回的calendar event resource (REST)EWS CalendarItem resource之间建立关联。 CalendarItem的ItemId和REST事件的Id不同。

当尝试更新我从REST API中保存的事件时,这证明是有问题的,因为我找不到将两者关联起来的好方法。

非常感谢任何帮助!

修改 在进一步挖掘之后,我实际上发现从REST API(GET /calendars)返回的日历似乎是EWS层次结构中的Message个项目。因此,不是此端点返回实际的文件夹ID,而是返回属于名为“公共视图”的某个文件夹中的项ID。

我不确定为什么事情是这样设计的,但base64编码ID的差异似乎非常小。我仍然无法弄清楚将两者联系起来的好方法。

1 个答案:

答案 0 :(得分:7)

因此,由于通过Exchange2007版本订阅了EWS推送通知,我的ID不匹配。 Exchange2007_SP1及更高版本之间具有兼容的EwsIds,因此这包括Office365。

使用-替换/_字符的+字符,可以让我正确调用Office365 API资源。

最后,在调用get calendars时,API实际上会返回Message文件夹下的Common Views项类型。因此,当尝试将这些ID用于订阅时,EWS API会抱怨我已经发送了ItemID而不是文件夹ID。

谢天谢地我发现,在您将ID正确转换为URI安全类型后,通过GET /calendars/ews_folder_id向REST API发出请求实际上有效(请参阅上面的转换)。