【问题标题】:How to get or address a single event of a event series of a Google calendar by GAS如何通过 GAS 获取或处理 Google 日历的事件系列中的单个事件
【发布时间】:2022-11-03 18:38:37
【问题描述】:

在 Google 日历中,事件有一个唯一的 id,但事件系列的事件也有一个吗?我需要以不同的方式处理事件系列的每个事件。处理事件的常规方法是:

let now      = new Date();
let until    = new Date(2023, 10, 25);
let calendar = CalendarApp.getCalendarById("678fbf4f44afb7cdsomething@resource.calendar.google.com");
let events   = calendar.getEvents(now, until); // returns an array of all events within this period of time
// Make a list of all event id:
for (i=0; i<events.length; i++) {
  console.log("event" + i + " has id " + events[i].getId());
}

尽管事件系列的事件具有所有相同的事件 ID,但我可以通过变量的索引可靠地处理它们,例如。 events[3] 只要变量 events 是活动的。

详细示例:

假设一天内有一个事件系列的五个事件:

2022-11-03 11:18 (= event[0])
2022-11-03 12:22 (= event[1])
2022-11-03 13:15 (= event[2])
2022-11-03 13:30 (= event[3])
2022-11-03 14:00 (= event[4])

有了这些索引,我可以创建 Google 表单来收集单个活动的食物订购,我可以将客人添加到 [2] 并更改 [2] 和 [3] 的房间:

2022-11-03 11:18 (= event[0])
2022-11-03 12:22 (= event[1])
2022-11-03 13:15 (= event[2]) - added Mr. Smith, set location: Ball Room
2022-11-03 13:30 (= event[3]) - set location: Ball Room
2022-11-03 14:00 (= event[4])

然后有人使用日历 GUI 正确地改变了一些事件的时间,这些事件因细节而异,因此现在可以区分:

2022-11-03 11:18 (= event[0])
2022-11-03 12:22 (= event[1])
2022-11-03 11:30 (= event[2]) - added Mr. Smith, set location: Ball Room
2022-11-03 15:30 (= event[3]) - set location: Ball Room
2022-11-03 14:00 (= event[4])

运行新的 getEvents 将返回

2022-11-03 11:18 (= event[0], formerly event[0])
2022-11-03 11:30 (= event[1], formerly event[2]) - with added Mr. Smith and location Ball Room
2022-11-03 12:22 (= event[2], formerly event[1])
2022-11-03 14:00 (= event[3], formerly event[4])
2022-11-03 15:30 (= event[4], formerly event[3]) - with location Ball Room

我现在如何处理该系列的特定事件,例如将它们与相应的表单同步?事件系列的事件是否具有某种固定的“子事件 ID”?

【问题讨论】:

    标签: google-apps-script google-calendar-api


    【解决方案1】:

    您可以在官方文档中找到此声明

    请注意,icalUID 和 id 不相同,并且只是其中之一 它们应该在事件创建时提供。一处不同 它们的语义是在重复发生的事件中,所有出现的一个 事件具有不同的 id,但它们都共享相同的 icalUID。

    (link)

    所以是的,重复事件的发生有它自己的 id(它的 id 属性)。

    Apps 脚本的问题在于方法 getId() 实际上检索事件的 iCalUID 属性,而不是其唯一 ID。因此,使用CalendarApp 服务,所有事件都将具有相同的 id (doc)。

    尝试使用advanced Calendar service,您将能够列出事件、获取它们的唯一ID、获取它们的iCalUID 等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多