Microsoft graph api 日历Id随机更改

Microsoft graph api 日历Id随机更改,microsoft-graph-api,outlook-restapi,microsoft-graph-calendar,Microsoft Graph Api,Outlook Restapi,Microsoft Graph Calendar,使用microsoft graph时,日历id发生更改的原因是什么 今天,我们的一位客户使用主日历已经两年多了,但今天突然,id发生了变化,我们无法添加任何事件,因为我们有“旧”id 正在调用的终结点: /me/calendars/AAMkAGFmMzAxNmRkLTg4YTEtNDNhZS1iYjExLWE1OThlYThlNTRmOQBGAAAAAACxNL6zUoo_Qr9AY8vFoIfmBwBstbpyrelbSJu1keAu6bMkAAAAAAEGAABstbpyrelbSJu1ke

使用microsoft graph时,日历id发生更改的原因是什么

今天,我们的一位客户使用主日历已经两年多了,但今天突然,id发生了变化,我们无法添加任何事件,因为我们有“旧”id

正在调用的终结点:

/me/calendars/AAMkAGFmMzAxNmRkLTg4YTEtNDNhZS1iYjExLWE1OThlYThlNTRmOQBGAAAAAACxNL6zUoo_Qr9AY8vFoIfmBwBstbpyrelbSJu1keAu6bMkAAAAAAEGAABstbpyrelbSJu1keAu6bMkAAAAAFB8AAA=/events
返回的错误:

{
“错误”:{
“代码”:“ErrorItemNotFound”,
“消息”:“在存储中找不到指定的对象。”
}
}
标题:

{
“缓存控制”:[
“私人”
],
“内容类型”:[
“application/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;charset=utf-8”
],
“请求id”:[
“63353567-4ebd-4b25-903b-d66717797882”
],
“客户端请求id”:[
“63353567-4ebd-4b25-903b-d66717797882”
],
“x-ms-ags-diagnostic”:[
“{\'ServerInfo\':{\'DataCenter\':\'North Europe\',\'Slice\':\'SliceC\',\'Ring\':'4\',\'ScaleUnit\':'001\',\'RoleInstance\':'AGSFE\'U IN\'U 6\'}”
],
“严格的运输安全”:[
“最大年龄=31536000”
],
“日期”:[
“2021年2月4日星期四10:40:39 GMT”
],
“内容长度”:[
"99"
]
}
新日历id:
aamkagfmmzaxnmrkltg4ytendnhzs1iyjexlwe1othlythlntrmoqbgaaaacxnl6zuoo\qr9ay8vfoifmbsbsbstpyrelbsju1keau6mkaaaaaaegaaabstbyrelbsju1keau6baaqlriaaa=

编辑:(发生在另一个客户端上) 今天又发生了另一个客户端(另一个租户id),详情如下:

旧日历id:

AAMkAGI2Y2NkYzVmLTc3ZjUtNDQyNi1iNjIzLTljNjkyMDk5YjEyYwBGAAAAAADQqVqZh-ZpQJl-EcoJBivzBwCE3CCn1SYkSLnEBiNMaH3ZAAAAAAEGAACE3CCn1SYkSLnEBiNMaH3ZAAAAAB08AAA=
AAMkAGI2Y2NkYzVmLTc3ZjUtNDQyNi1iNjIzLTljNjkyMDk5YjEyYwBGAAAAAADQqVqZh-ZpQJl-EcoJBivzBwCE3CCn1SYkSLnEBiNMaH3ZAAAAAAEGAACE3CCn1SYkSLnEBiNMaH3ZAAGPkTa6AAA=
{
“缓存控制”:[
“私人”
],
“内容类型”:[
“应用程序\/json;odata.metadata=minimal;odata.streaming=true;IEEE754Compatible=false;字符集=utf-8”
],
“请求id”:[
“2f9ddb93-3594-4d86-97f9-d7dbe960a2bb”
],
“客户端请求id”:[
“2f9ddb93-3594-4d86-97f9-d7dbe960a2bb”
],
“x-ms-ags-diagnostic”:[
“{\'ServerInfo\':{\'DataCenter\':\'North Europe\','Slice\':'SliceC\','Ring\':'4\','ScaleUnit\':'001\','RoleInstance\':'AGSFE\'U IN\'U 71\'}”
],
“严格的运输安全”:[
“最大年龄=31536000”
],
“日期”:[
“2021年2月8日星期一11:08:53 GMT”
],
“内容长度”:[
"99"
]
}
新日历id:

AAMkAGI2Y2NkYzVmLTc3ZjUtNDQyNi1iNjIzLTljNjkyMDk5YjEyYwBGAAAAAADQqVqZh-ZpQJl-EcoJBivzBwCE3CCn1SYkSLnEBiNMaH3ZAAAAAAEGAACE3CCn1SYkSLnEBiNMaH3ZAAAAAB08AAA=
AAMkAGI2Y2NkYzVmLTc3ZjUtNDQyNi1iNjIzLTljNjkyMDk5YjEyYwBGAAAAAADQqVqZh-ZpQJl-EcoJBivzBwCE3CCn1SYkSLnEBiNMaH3ZAAAAAAEGAACE3CCn1SYkSLnEBiNMaH3ZAAGPkTa6AAA=

问题不在于日历id已更改。看起来你只需要处理它,你有一个很好的方法找到新的Id,如上面的评论所述


问题是,您在应用程序中使用了Microsoft正在生成的ID,但现在它们不匹配。向事件(或用户/组)添加额外数据是完全可能的。有关更多信息,请参阅第页。这样,您就可以在创建时将外部ID添加到事件中,然后始终可以找到该事件。

这里是一个难题。。。那些看起来像是Base64编码的。如果您对旧ID和新ID进行Base64解码,您会发现相同的GUID嵌入其中

(使用)

旧解码:$af3016dd-88a1-43ae-bb11-a598ea8e54f9F4R?B@cŠlr[H.$lr[H.$P]|
新解码:$af3016dd-88a1-43ae-bb11-a598ea8e54f9F4R?B@cŠlr[H.$lr[H.$| H
(guid:af3016dd-88a1-43ae-bb11-a598ea8e54f9)
- 
提供了第二个示例
旧解码:$b6ccdc5f-77f5-4426-b623-9c692099b12cFЩZi@+&$H#Lh}&$H#Lh}<
新解码:$b6ccdc5f-77f5-4426-b623-9c692099b12cFЩZi@+&$H#Lh}和$H#Lh}6
(guid:b6ccdc5f-77f5-4426-b623-9c692099b12c)
如果无法通过图形请求中的查询使用嵌入的GUID,则可以调用
https://graph.microsoft.com/v1.0/me/calendars
,对所有日历进行解码,找到具有匹配嵌入式GUID的ID,然后使用该ID?这将添加一个额外的调用,但您可以在异常处理中执行,因为不需要任何状态uired。这可能有助于您现有的应用程序

我不能保证这会起作用,因为我没有长期的数据来测试这个理论……但你有:)

为了避免ID更改的问题,请尽可能地进行存储。您不能为容器(日历、邮箱等)存储ID更改,但向前看,您可以为应用程序创建的事件存储ID更改,这样您就可以从那里向后工作

容器类型(mailFolder、calendar等)不支持不可变的ID,但它们的常规ID已经是常量

他们文档中的这一行是值得注意的,因为您的经验与他们文档中的内容不符。这为您向MS投诉或向客户提交IBM提供了机会(IBM:我责怪微软)


另外,我会在两个组织中询问他们是否更改了与AAD同步或交换相关的任何内容?我有一个疯狂的理论,它与此相关。最近有一封电子邮件发出,要求人们更新AAD同步,这种模式对于某种身份验证提供商的更改来说很熟悉。

有趣的线程/信息…您可能想查看wi请访问Microsoft支持并查看他们对此的立场。不确定为什么会发生这种情况,但您也可以使用
/me/calendars
端点并获取所需的calendarid,然后尝试通过
/me/calendars/claendard/events
@shivakshavvarma创建事件。不幸的是,使用新的日历id并不是一个好的解决方案我们会丢失存储的每个特定于应用程序的信息(例如,存储在我们应用程序中的事件与其他表有关系。如果我简单地添加新日历,我认为每个事件的iCalUID也会不同,因此我们会丢失应用程序中事件的所有关系,最终只会出现Outlook中的普通事件)在不知道给定邮箱的历史记录的情况下,很难对其进行评论-该问题可能是由于邮箱历史记录/迁移/索引或邮箱重新创建等原因造成的。这里的Graph API只是将数据返回给您的信使。如果源中存在问题,则它将仅共享数据。正如我之前更新的,您可能希望检查方法或使用iCalUID,看看它是否适合您的场景。但是,是的,它可能只适用于