2017-06-16 6 views
0

我不知道什麼時候開始發生(我相信最近)。這是一個重大更改如果依靠這裏記錄的步驟:突然變化?在Office 365/Outlook的calendarview api中使用odata.track更改時未收到odata.nextLink?

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

的問題是,辦公室365 & Outlook.com calendarview API似乎不再當返回@ odata.nextLink如果您在請求中爲「首選項」標題指定「odata.track-changes」,則會獲取更多數據。

這是一個CURL請求repro問題......請確保請求在指定的時間範圍內(至觸發分頁)以具有至少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,但是。

是否有其他人遇到此問題?

回答

0

據我所知,它一直以這種方式工作。初始同步返回deltaLink而不是nextLink。您必須專門處理該初始同步請求,然後繼續使用deltaToken發出下一個請求。

  1. 初始同步請求:第一個同步請求設置同步狀態。
  2. 初始同步響應:
    • 檢查:在響應頭「偏好施加odata.track-變化」來確認成功同步的嘗試並且該資源支持同步。
    • 如果同步嘗試成功,則初始響應始終包含帶有deltaToken值的@ odata.deltaLink。如果響應包含任何數據,請保存第二個請求的deltaToken值。
    • 如果初始響應未成功,或者沒有返回任何指示指定日曆視圖中沒有事件的數據,則此輪同步結束。
  3. 後續同步請求:使用先前請求中的deltaToken或skipToken值發出下一個請求。以第二個和第三個同步請求爲例。
  4. 隨後的同步響應:
    • 如果響應返回任何數據,並且,有更多的數據在該時間範圍同步時,所述響應將包括@ odata.nextLink和skipToken值。保存下一個同步請求的skipToken。
    • 回到第3步,按照nextLink(如果有),在下一個同步請求中應用相應的skipToken值,然後關注任何後續的nextLink,直到您已經同步該日曆的時間範圍內的所有數據。
  5. 最終同步響應:當日歷視圖中的所有事件都同步時,此輪中的最終響應將再次包含@ odata.deltaLink和deltaToken。保存下一輪同步的deltaToken值。
+0

謝謝@ jason-johnston!這解釋了它。現在這是一個schrödinbug在我們這邊。謝謝! – cortfr

+0

@ jason-johnston微軟圖形不支持同步請求嗎?我有同樣的問題,如[這個問題](https://stackoverflow.com/q/39518853/2491336) – user2491336

+0

不,圖形支持同步。 https://developer.microsoft.com/en-us/graph/docs/concepts/delta_query_overview –