为啥 Microsoft Graph API 告诉我我刚刚创建的事件仍然存在时被“@removed”?
Posted
技术标签:
【中文标题】为啥 Microsoft Graph API 告诉我我刚刚创建的事件仍然存在时被“@removed”?【英文标题】:Why is Microsoft Graph API telling me events I've just created are being "@removed" when they are still there?为什么 Microsoft Graph API 告诉我我刚刚创建的事件仍然存在时被“@removed”? 【发布时间】:2020-12-03 17:19:45 【问题描述】:当我使用以下有效负载对me/calendars/[calendar-id]/events
进行 POST 时。它成功创建了事件,我收到了新事件的 id:
"start":
"timeZone": "America/Chicago",
"dateTime": "2022-12-23T15:00:00"
,
"end":
"timeZone": "America/Chicago",
"dateTime": "2022-12-23T18:00:00"
,
"subject": "Please don't delete me!",
"body":
"contentType": "text",
"content": "I'm just an event in the future, I wonder if I'll send a '@removed' notice?"
"isCancelled": false,
"type": "singleInstance"
但在那之后不久,我的 webhook 被该事件的此信息击中,表明它刚刚被删除:
"@odata.type": "#microsoft.graph.event"
"id": [that-event-id]
"@removed":
"reason": "deleted"
当我去查看我的 Outlook 日历时,该事件似乎仍然存在,如果我得到它,isCancelled
是错误的。
这只发生在一年前或两年后创建的事件中。
【问题讨论】:
看看(1)这些项目是否启用了任何保留策略? (2) 是否有任何备份/存档解决方案存在? 正如你所说,这种情况只发生在一年或两年前创建的事件中......让我知道你发现了什么。 @Dev 我不知道任何保留政策:找出这一点的最佳方法是什么?不过,我不确定你的第二个问题在问什么。我们仍然有关于我们事件的数据,但我们已将它们记录为存档,因为我们收到了@removed
通知。
您可能需要咨询您的 Exchange/Office 365 管理员,看看他们是否应用了任何保留政策。
另外,还需要记住以下几点: (1) 一般情况下,Removed 实例由它们的 id 和一个@removed 对象表示。 (2) 在您的场景中,您注意到“已删除”,这表示该项目已被删除且无法恢复。这就是我要求启用任何保留策略或存在备份/存档解决方案的原因 (3) 另请注意,删除的对象可以在初始增量查询响应和跟踪 (deltaLink) 响应中返回。使用 delta 查询请求的客户端应设计为在响应中处理这些对象。
【参考方案1】:
我们自己被同样的问题困扰了大约一个月,我想我昨天终于能够找到这个问题了。
我们使用 events delta API 而不是 webhook API,但显然同样的错误会影响两者......微软的某个人真的需要修复这个问题,这太疯狂了。
回答
对事件增量请求上设置的startDateTime..endDateTime
窗口之外的事件的更改最初始终显示为@removed
增量。
更多详情
事件增量 API 捕获初始 startDateTime..endDateTime
窗口,然后用于所有后续调用 $deltatoken
。如果您的 delta 查询使用 $select
等,这也会让您意外
正是这个细节让我们为自己设置了一颗定时炸弹。我们最初的窗口有点宽,但突然开始收到广泛的报告,显示活动已取消,但肯定没有从日历中删除。
这是一个错误
请 Microsoft 人员承认这是一个真正的问题。在离散指定的时间窗口之外进行的更改不应影响它,这使得构建我们信任的集成变得困难。
【讨论】:
不幸的是,他们在这次讨论中似乎并没有完全承认这一点。 github.com/microsoftgraph/microsoft-graph-docs/issues/6599【参考方案2】:这只发生在一年前或两年后创建的事件。
我猜这与贵组织定义的保留政策有关。
https://docs.microsoft.com/en-us/microsoft-365/compliance/create-retention-policies
使用保留政策,您可以定义特定项目在被自动删除之前应保留多长时间。
【讨论】:
【参考方案3】:如果您最终也使用了错误的 $deltatoken,也会发生这种情况。
【讨论】:
以上是关于为啥 Microsoft Graph API 告诉我我刚刚创建的事件仍然存在时被“@removed”?的主要内容,如果未能解决你的问题,请参考以下文章
MS Graph API:microsoft.graph.createLink 未创建匿名视图链接
使用 microsoft graph api 检出 onedrive 文件的状态
获取 Microsoft Graph API 的有效访问令牌
Microsoft Graph API SharePoint 文件搜索