Microsoft Graph API组增量不会返回deltaLink,这会导致无限循环(使用nextLink)

时间:2020-06-02 10:50:14

标签: microsoft-graph-api microsoft-graph-delta

我正在使用Microsoft Graph API 我正在为组使用Delta API。我为每个组创建一个增量请求(我没有跟踪所有组,仅跟踪特定的组)。

我已经检查了此question并阅读了提及的文档。我已经在GitHub here

上阅读了此问题

我正在与同一个租户一起工作,同时利用增量响应发展了几个星期。除了一次,它总是几乎按预期工作。当我发出增量请求时,我得到了nextLink,我一直跟随着它直到获得deltaLink。 我说这几乎可以按预期工作,因为很多时候,在对数据进行前/后两次响应之后,我大部分时间都得到了另外1-3个下一个没有附加数据的链接。

我上次尝试时,使用nextLinks获得了大约150个响应,直到函数超时为止,除了前几个响应之外,所有这些响应中都没有数据。

这是一个测试环境,组中有大约30个用户。

我用过

SELECT `main_table`.*,
       SUM(sosh.status = 'pending_payment')  AS `pending_payment_status_datetime`,
       SUM(sosh.status = 'processing_payd') AS `processing_payd_status_datetime`,
       SUM(sosh.status = 'processing')           AS `processing_status_datetime`,
       SUM(sosh.status = 'complete')             AS `complete_status_datetime`,
       SUM(sosh.status = 'shipping_ready')       AS `shipping_ready_status_datetime`,
       SUM(sosh.status = 'shipping_ready_cod')   AS `shipping_ready_cod_status_datetime`,
       SUM(sosh.status = 'shipping_in_progress') AS `shipping_in_progress_status_datetime`,
       SUM(sosh.status = 'closed',)               AS `closed_status_datetime`,
       SUM(sosh.status = 'archived')             AS `archived_status_datetime`,
       SUM(sosh.status = 'withdraw' )             AS `withdraw_status_datetime`,
       SUM(sosh.status = 'canceled')             AS `canceled_status_datetime`
FROM `sales_order_grid``main_table` LEFT JOIN
     `sales_order_status_history` `sosh`
     ON sosh.parent_id = main_table.entity_id
GROUP BY `main_table`.`entity_id`;

在无限循环中,这些是我得到的响应

SELECT so.*,
       MAX(CASE WHEN sosh.status = 'pending_payment' THEN sosh.created_at END) AS pending_payment_status_datetime,
       MAX(CASE WHEN sosh.status = 'processing_payd' THEN sosh.created_at END) AS processing_payd_status_datetime,
       . . . 
FROM sales_order_grid so LEFT JOIN
     sales_order_status_history `sosh`
     ON sosh.parent_id = so.entity_id
GROUP BY so.entity_id;

您可以看到它们的值中没有数据,但是我仍然得到nextLink 当我关注下一个链接时,我会得到

https://graph.microsoft.com/v1.0/groups/delta?$select=id,displayName,members&$filter=id eq 'groupId'`

如您所见,另一个响应以及另一个下一个链接(一个不同的链接)再次返回空值。

再次发生这种情况,直到我的功能超时为止。

我希望在没有更多数据的第一个响应之前获得deltaLink,或者在第一个空响应时获得最大值。

1 个答案:

答案 0 :(得分:0)

以空数组作为值和nextlink的响应是身份实体(用户,组,应用程序,服务主体...)的delta函数的正常行为,指示并非已枚举所有更改并复制了更改在后端发生。

无论何时出现这种情况(空数组+下一个链接),您的应用程序都应在查询下一个链接之前暂停,为复制提供时间,并避免无限循环。

如果您在正常情况下经常看到此行为,请联系支持部门。