突破变化?在Office 365 / Outlook的calendarview api中使用odata.track-changes时没有收到odata.nextLink?

时间:2017-06-16 23:36:44

标签: office365api

我不确定这种情况何时开始发生(我最近相信)。如果您依赖此处记录的步骤,这是重大变更

https://msdn.microsoft.com/en-us/office/office365/howto/sync-calendar-view

问题在于Office 365&如果您指定" odata.track-changes"有更多数据要提取,Outlook.com calendarview api似乎不再返回@ odata.nextLink。对于"喜欢"您的请求中的标题。

以下是重新发出问题的CURL请求...请确保在指定的时间范围内将请求作为至少50个事件的用户进行身份验证(以触发分页)。

curl -H "Authorization: Bearer <OMITTED>" -H "Accept: application/json; odata.metadata=none" -H "Prefer: odata.track-changes" "https://outlook.office.com/api/v2.0/me/calendarview?startdatetime=2016-06-16T00:00:00Z&enddatetime=2017-06-23T00:00:00Z"

当我发出此请求时,生成的响应有10个条目(即使至少有50个事件),并且响应没有@ odata.nextLink。它确实有一个@ odata.deltaLink。

是否有其他人遇到此问题?

1 个答案:

答案 0 :(得分:0)

据我所知,它一直都是这样的。初始同步返回deltaLink而不是nextLink。您必须专门处理该初始同步请求,然后继续使用deltaToken发出下一个请求。

  
      
  1. 初始同步请求:第一个同步请求设置同步状态。
  2.   
  3. 初始同步响应:      
        
    • 检查&#34;偏好应用:odata.track-changes&#34;在响应头中确认同步尝试成功,资源支持同步。
    •   
    • 如果同步尝试成功,初始响应始终包含带有deltaToken值的@ odata.deltaLink 。如果响应包含任何数据,请保存第二个请求的deltaToken值。
    •   
    • 如果初始响应未成功,或者未返回任何指示指定日历视图中没有事件的数据,则此轮同步结束。
    •   
  4.   
  5. 后续同步请求:使用上一个请求中的deltaToken或skipToken值发出下一个请求。请参阅第二个和第三个同步请求作为示例。
  6.   
  7. 后续同步响应:      
        
    • 如果响应返回任何数据,并且在该时间范围内有更多数据要同步,则响应将包括@ odata.nextLink和skipToken值。保存skipToken以获取下一个同步请求。
    •   
    • 返回步骤3,按照nextLink(如果有),在下一个同步请求中应用相应的skipToken值,并按照后续任何nextLink,直到您同步该日历的时间范围内的所有数据。
    •   
  8.   
  9. 最终同步响应:当日历视图中的所有事件同步时,此轮中的最终响应将再次包括@ odata.deltaLink和deltaToken。保存deltaToken值以进行下一轮同步。
  10.