【发布时间】:2020-06-23 10:25:28
【问题描述】:
我有一个具有以下场景的应用:
- 用户在我的应用程序的谷歌日历中创建了一个定期事件(通过谷歌日历 API v3)
- 他们更改其中一个实例的时间(这会创建异常实例 - 以一种很好的方式“异常”)
- 现在他们想要延长该定期活动,并更改主活动的计数或结束日期
问题是在最后一步之后所有异常都消失了(日历 UI 似乎可以处理,但如果通过 API 完成,异常就消失了)。不过,我注意到 Outlook 可以通过他们的 API 很好地管理该案例。
是否有任何简单的方法可以通过 API 在谷歌日历中保留这种情况下的异常?
我还注意到,如果我在更新主节点后尝试进一步更新原始异常之一,则会出现错误(错误的“异常”)并指出实例事件因此被标记为已删除无法更新('get' 仍然返回它)。在这种情况下,它创建了一个新的实例事件,用一个新的 id 代替原来的。
更新
更新主事件的伪代码如下所示:
let originalMastEvent = {
id:"google_generated_master_event_id",
...
recurrence: [ 'RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE,SA;COUNT=6' ],
...
}
//change the count from 6 to 10, the rest stays the same:
let newMastEvent = {
id:"google_generated_master_event_id",
summary: 'Summary',
start: { dateTime: '2020-06-24T01:00:00+02:00', timeZone: 'UTC' },
end: { dateTime: '2020-06-24T02:00:00+02:00', timeZone: 'UTC' },
recurrence: [ 'RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=WE,SA;COUNT=10' ],
sendUpdates: 'all',
attendees:[ { email: 'attendee1@gmail.com'} ]
}
const {google} = require('googleapis/build/src/index'); //I'm on node.js
let auth = {...} //setup google api oauth obj
let calendar = await google.calendar({version: 'v3', auth});
let res = await calendar.events.update({
calendarId: 'primary',
eventId: newMastEvent.id,
resource: newMastEvent,
sendUpdates: newMastEvent.sendUpdates
})
【问题讨论】:
-
你好@virus,事件的扩展是如何完成的?你能提供更多信息吗?
-
嗨@ale13 - 可以说这是一个受出现次数限制的事件。然后我只更新重复模式的 COUNT 值并调用事件更新 api (developers.google.com/calendar/v3/reference/events/update)。如果这没有帮助,请告诉我,我将粘贴一个包含更多详细信息的伪代码。
-
你可以发布你用于更新的sn-p吗?
-
@ale13 用代码更新了我的答案
-
您究竟是如何为主要事件创建例外的?就像您提到的那样,我尝试通过扩展它来更新带有异常的重复事件,但异常仍然存在。你有更多可以帮助的细节吗? @病毒
标签: google-calendar-api google-calendar-recurring-events