You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:10:37