我正在使用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,或者在第一个空响应时获得最大值。
答案 0 :(得分:0)
以空数组作为值和nextlink的响应是身份实体(用户,组,应用程序,服务主体...)的delta函数的正常行为,指示并非已枚举所有更改并复制了更改在后端发生。
无论何时出现这种情况(空数组+下一个链接),您的应用程序都应在查询下一个链接之前暂停,为复制提供时间,并避免无限循环。
如果您在正常情况下经常看到此行为,请联系支持部门。