Служба календаря скриптов Google Apps: как хранить и извлекать CalendarEvents с помощью PropertiesService? - PullRequest
0 голосов
/ 15 апреля 2020

Я имею в виду этот вопрос .

Как этот код

var cal = CalendarApp.getCalendarById("Calendar Id");
var startTime = new Date(1850, 0, 1);
var endTime = new Date(2100, 0, 1);
var events = cal.getEvents(startTime, endTime);
Logger.log(events);
var sp = PropertiesService.getScriptProperties();
sp.setProperty("events", JSON.stringify(events));
events = JSON.parse(sp.getProperty("events"));
Logger.log(events);

возвращает:

Info [CalendarEvent, CalendarEvent, CalendarEvent, CalendarEvent, CalendarEvent]
Info [{}, {}, {}, {}, {}]

Как хранить и получить CalendarEvents (не только их идентификаторы), используя PropertiesService?

1 Ответ

1 голос
/ 20 апреля 2020

Рабочий процесс:

Я думаю, что лучше всего сделать следующее:

  • Получить идентификаторы событий из ранее обработанных событий, сохраненных в Свойствах (переменная oldEventIDs) .
  • Извлечь все события в календаре с помощью getEvents (переменная allEvents).
  • Отфильтровать события в календаре, удалив уже имеющиеся в Свойствах (переменная *). 1014 *).
  • После обработки каждого нового события добавьте идентификатор события в oldEventIDs.
  • Сохранить oldEventIDs в Свойствах.

Пример кода:

var sp = PropertiesService.getScriptProperties();
var oldEventIDs = sp.getProperty("events").split(",");
var cal = CalendarApp.getCalendarById("Calendar Id");
var startTime = new Date(1850, 0, 1);
var endTime = new Date(2100, 0, 1);
var allEvents = cal.getEvents(startTime, endTime);
var newEvents = allEvents.filter(event => !oldEventIDs.includes(event.getId()));
newEvents.forEach(event => {
  // Event processing
  oldEventIDs.push(event.getId());
});
sp.setProperty("events", oldEventIDs.toString());

Примечания:

  • Вы должны вызывать getEvents в каждом исполнении, несмотря ни на что. Я не вижу, как хранение событий в свойствах позволит вам избежать этого. Это метод, который вы используете, чтобы получить события из календаря. В любом случае, я предполагаю, что больше времени занимает событие «обработка», о котором не было предоставлено никакой информации.
  • Вам нужно будет отредактировать этот пример так, чтобы выполнение остановилось до достижения предельного времени.

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...