如何通过Microsoft Graph API编辑周期性事件(支持仅本次/本次及后续)
如何通过Microsoft Graph API控制周期性事件的编辑范围
我希望通过Microsoft Graph API实现两种周期性事件编辑选项:仅编辑本次事件、编辑本次及后续事件,但当前使用的PATCH请求会更新所有周期性事件。
当前使用的PATCH请求代码如下:
var stfulltext = 'Eastern Standard Time' var options = { method: 'PATCH', url: 'https://graph.microsoft.com/v1.0/users/'+newArray[0].id+'/calendar/events/'+eventslist1[0].microsoft_id, headers: { 'content-type': 'application/json', authorization: 'Bearer '+accesstoken, prefer: `outlook.timezone="${stfulltext}"` }, body: { "originalStartTimeZone": stfulltext, "originalEndTimeZone": stfulltext, "responseStatus": { "response": "organizer", "time": "0001-01-01T00:00:00Z" }, "start": { "dateTime": outlook_start_time, "timeZone": stfulltext }, "end": { "dateTime": outlook_end_time, "timeZone": stfulltext }, "recurrence": { "pattern": { "type": "daily", "interval": 1, }, "range": { "type": "endDate", "startDate": followup, "endDate": end_date } }, "reminderMinutesBeforeStart": 15, "isOnlineMeeting": false, "onlineMeetingProvider": "unknown", "isReminderOn": true, "hideAttendees": false, "categories": [] }, json: true };
尝试上述代码后,所有周期性事件均被更新,请问该如何修改以实现指定的编辑范围?
解决方案
Microsoft Graph API针对周期性事件的不同编辑范围,需要通过修改请求目标URL和请求体参数来实现:
1. 仅编辑本次事件
要只修改周期中的单个实例,需直接定位到该实例的ID,而非整个系列事件的ID:
- 修改URL:将原URL中的系列事件ID替换为目标实例的ID。可通过
GET /users/{id}/calendar/events/{series-id}/instances接口获取该周期事件的所有实例,从中提取要修改的本次实例ID。 - 调整请求体:移除
recurrence字段,因为仅修改单个实例,无需更新整个周期规则。
示例修改后的请求结构:
var options = { method: 'PATCH', // 替换为本次实例的ID url: 'https://graph.microsoft.com/v1.0/users/'+newArray[0].id+'/calendar/events/'+【本次实例的ID】, headers: { 'content-type': 'application/json', authorization: 'Bearer '+accesstoken, prefer: `outlook.timezone="${stfulltext}"` }, body: { "originalStartTimeZone": stfulltext, "originalEndTimeZone": stfulltext, "responseStatus": { "response": "organizer", "time": "0001-01-01T00:00:00Z" }, "start": { "dateTime": outlook_start_time, "timeZone": stfulltext }, "end": { "dateTime": outlook_end_time, "timeZone": stfulltext }, "reminderMinutesBeforeStart": 15, "isOnlineMeeting": false, "onlineMeetingProvider": "unknown", "isReminderOn": true, "hideAttendees": false, "categories": [] }, json: true };
2. 编辑本次及后续事件
要修改当前实例及之后的所有周期事件,需在请求中添加seriesMasterId参数,并调整周期规则的起始范围:
- 保持URL不变:仍使用系列事件的ID。
- 调整请求体:添加
seriesMasterId字段(值为原系列事件ID);同时将recurrence.range.startDate修改为本次事件的开始日期,让后续周期事件从该日期起应用新规则。
示例修改后的请求体关键部分:
body: { "originalStartTimeZone": stfulltext, "originalEndTimeZone": stfulltext, "responseStatus": { "response": "organizer", "time": "0001-01-01T00:00:00Z" }, "start": { "dateTime": outlook_start_time, "timeZone": stfulltext }, "end": { "dateTime": outlook_end_time, "timeZone": stfulltext }, "seriesMasterId": eventslist1[0].microsoft_id, // 添加系列事件ID "recurrence": { "pattern": { "type": "daily", "interval": 1, }, "range": { "type": "endDate", "startDate": outlook_start_time.split('T')[0], // 修改为本次事件的日期 "endDate": end_date } }, // 其他参数保持不变 }
通过以上两种修改方式,即可分别实现仅编辑本次事件、编辑本次及后续事件的需求,避免更新整个周期的所有事件。
内容的提问来源于stack exchange,提问作者Akhil kubatur
相关产品推荐
相关产品推荐

