使用Google Calendar API时Patch操作修改全部未来事件而非指定事件
解决Google Calendar API Patch修改重复事件所有实例的问题
你遇到的核心问题是:当前操作的是重复事件的系列ID,默认Patch会修改整个重复系列的所有未来事件。要只修改选中的单个实例,有两种可行方案:
方案1:使用事件实例的ID而非系列ID
当你调用calendar.events.get获取当日事件时,重复事件的每个实例都会返回自己的id(实例ID),同时带有recurringEventId字段(对应系列ID)。确保用户点击事件时传递的slotId是实例ID,而非系列ID,直接用这个ID调用Patch即可单独修改该实例。
方案2:指定originalStart参数(若使用系列ID)
如果必须使用系列ID,需要在Patch请求中明确指定要修改的实例的原始开始时间,告诉API仅针对该实例修改。代码修改如下:
adjustEventForTeacher = async(userCalendarLocation, slotId) => { const event = await calendar.events.get({ calendarId: 's', eventId: slotId }) const originalStart = event.data.start.dateTime; const res = await calendar.events.patch({ calendarId: 's', eventId: slotId, // 关键:指定要修改的实例的原始开始时间 originalStart: { dateTime: originalStart }, requestBody: { summary: 'Busy', status: 'confirmed', colorId: '0' } }) console.log(res.data) }
为什么之前的代码无效?
你尝试的EXDATE是用来从重复系列中排除某个实例的,这会删除该实例而非修改它。而直接Patch系列ID时,API默认会将修改应用到整个系列的所有未来实例,必须通过originalStart或实例ID来限定修改范围。
内容的提问来源于stack exchange,提问作者DMantas
相关产品推荐
相关产品推荐

