如何从Microsoft Graph的EventMessage中提取事件更新后的新日期?
解决Microsoft Graph从EventMessage获取事件更新后日期的问题
嘿,作为经常在Stack Overflow上帮人捋Microsoft Graph问题的老鸟,我来给你拆解下这个问题!
你现在踩的坑其实挺常见:用/v1.0/users/{user}/messages/{id}?$expand=microsoft.graph.eventMessage/event请求拿到的始终是原事件的日期,而非参会者更新后的新时间——这是因为直接关联的event字段指向的是原始事件实体,真正的变更细节藏在另一个专属属性里。
问题根源
当参会者通过“提议新时间”修改事件后,系统发给组织者的通知邮件(EventMessage)里,更新的时间信息并不在event属性中,而是存储在eventMessageDetail这个嵌套属性里。这个属性专门用来记录事件变更的各类细节,包括新时间、参会者状态变动等。
解决方案步骤
修改你的Graph请求,同时展开
eventMessageDetail
把请求调整成这样,就能同时获取原事件和变更细节:GET /v1.0/users/{user}/messages/{id}?$expand=microsoft.graph.eventMessage/event,microsoft.graph.eventMessage/eventMessageDetail从返回结果中提取新日期
在返回的JSON数据里,找到eventMessageDetail节点,里面的newStartTime和newEndTime字段就是你要的新开始/结束日期。示例片段如下:"eventMessageDetail": { "@odata.type": "#microsoft.graph.eventMessageDetail", "meetingRequestType": "proposal", "newStartTime": "2024-05-20T14:00:00Z", "newEndTime": "2024-05-20T15:00:00Z", // 其他变更细节... }
额外注意事项
- 权限验证:确保你的应用已经获得了
Mail.Read权限(委托或应用权限均可,根据你的场景选择),否则可能无法读取eventMessageDetail的内容。 - 区分事件操作类型:如果参会者是直接修改事件(而非提议新时间,比如拥有事件编辑权限),
meetingRequestType会显示为update,但newStartTime和newEndTime依然会存在于eventMessageDetail中。 - 确认邮件类型:要确保你处理的确实是事件更新/提案类邮件,可以先检查邮件的
messageClass属性是否为IPM.Schedule.Meeting.Request.Updated或IPM.Schedule.Meeting.Request.Proposal。
内容的提问来源于stack exchange,提问作者Joceleyn De Craeke
相关产品推荐
相关产品推荐

