0

我有一个具有以下场景的应用程序:

  • 用户在我的应用程序中的谷歌日历中创建重复事件(通过谷歌日历 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
})
4

1 回答 1

0

您的问题与您如何添加例外以及更新主要事件的方式有关。

根据此处的此页面,您需要POST在插入异常时使用请求。

因此,您将不得不使用Events:insert请求:

POST https://www.googleapis.com/calendar/v3/calendars/calendarId/events

具有以下主体:

{
  "start": {
    "dateTime": "MODIFIED_START_DATE",
    "timeZone": "YOUR_TIMEZONE"
  },
  "end": {
    "dateTime": "MODIFIED_END_DATE",
    "timeZone": "YOUR_TIMEZONE"
  },
  "recurringEventId": "ID_OF_THE_RECURRENT_EVENT",
  "originalStartTime": {
    "dateTime": "ORIGINAL_DATE_TIME",
    "timeZone": "YOUR_TIMEZONE"
  },
  "iCalUID": "ID",
}

之后,如果你想更新主事件,例如增加出现次数,你可以简单地向下面的请求:

PUT https://www.googleapis.com/calendar/v3/calendars/calendarId/events/eventId

具有以下主体:

{
  "start": {
    "dateTime": "START_DATE_OF_THE_ORIGINAL_EVENT",
    "timeZone": "YOUR_TIMEZONE"
  },
  "end": {
    "dateTime": "END_DATE_OF_THE_ORIGINAL_EVENT",
    "timeZone": "YOUR_TIMEZONE"
  },
  "recurrence": [
    "RRULE:FREQ=WEEKLY;WKST=SU;COUNT=3;BYDAY=FR"
  ]
}

在完成上述请求后,您应该能够在进行事件扩展的同时仍然保留异常。

参考

于 2020-06-26T14:54:00.430 回答