如何从Office365中的日历中仅获取新的/更新的事件?

时间:2017-09-05 11:53:45

标签: c# outlook calendar office365 outlook-restapi

我是一名初级开发人员,试图找出Outlook365 REST API。

我正在使用office365 rest api从我的日历中同步我的活动。 在我第一次请求时,我从一个时间范围内获得所有事件。这将返回deltaToken。 之后,我将更多事件添加到我的日历中,并使用从我的调用返回的最后一个deltaToken进行另一个调用。此请求返回所有事件(包括新事件)和2个deltaTokens(第一个是我发送的,第二个是新的)。 我只想获得新活动,而不是所有活动。如果我使用上一个请求中的deltaToken发出请求,这是否意味着我已经同步了以前的所有事件,下一次调用不应该只获取新的/修改过的事件?

以下是回复。在我的回复中有2个deltaTokens可以吗?

  

{ “@ odata.context”:“https://outlook.office.com/api/beta/ $元数据#ME / CalendarView,   “价值”:[事件清单],   “@ odata.deltaLink”: “https://outlook.office.com/api/beta/Me/CalendarView/?startDateTime=2017-07-25T00%3a00%3a00Z&endDateTime=2017-09-01T00%3a00%3a00Z&deltatoken=GGXXX&%24deltatoken=GWXXX”   }

1 个答案:

答案 0 :(得分:0)

听起来你还没有敲定你的第一次同步。同步在API中的工作方式有点违反直觉。这不像检查deltaToken那样简单,看你是否已经完成。

原因是Prefer: odata.track-changes 始终的第一个请求返回deltaToken,即使还有更多结果。 docs在此处提供了更多详细信息,但一般顺序为:

  1. 使用Prefer: odata.track-changes在日历视图中进行GET。
  2. 验证响应中是否存在Preference-Applied: odata.track-changes标头。如果是这样,请获取deltaLink并对其进行GET。
  3. 现在进入你的循环。如果您得到nextLink作为回应,请对此进行GET并重复。如果您获得deltaLink,则同步完成。存储该值直到您下次同步。