Как создать цепочку событий из одного события в Календаре Google? - PullRequest
1 голос
/ 28 сентября 2019

Я работаю для некоммерческой организации, и они хотят, чтобы я планировал их календарь Google таким образом, чтобы после создания одного события, скажем, события A, автоматически создавались события B, C, D и E.

Например, если я создаю событие «День рождения Анны», то календарь должен автоматически создавать события (или подэвенты), например, собрание по случаю дня рождения за 1 неделю до даты исполнения, как событие «B», Заказ тортаЗа 4 дня до даты платежа в качестве события «C», Вечеринка готовит покупки за 2 дня до события «D» и связывается с приглашенными за 1 день до мероприятия «E» в указанные даты и время до даты оплаты и должна применяться ко всем подобнымбудущие события.

1 Ответ

0 голосов
/ 30 сентября 2019

Вы должны создать в вашем скрипте событие триггера, которое будет запускать вашу функцию при добавлении нового события в ваш календарь.

Для этого вам нужно синхронизировать ваш скрипт с вашимкалендарь .Вы можете выполнить следующие действия:

  1. Создать сценарий и включить Службу продвижения календаря .
  2. Получите ваш nextSyncToken для календаря, из которого вы хотите отслеживать созданные события, используя Events.list () (запустить эту функцию в начале, только один раз):
function initialSync() {
  var nextSyncToken = Calendar.Events.list('your_calendar_id')["nextSyncToken"];
  var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
  sheet.getRange('A1').setValue(nextSyncToken)
}

Вы должны где-то хранить этот nextSyncToken.Для этого я использовал электронную таблицу в этом примере, но вы можете использовать базу данных или любую другую среду (на самом деле электронная таблица - не самый безопасный способ хранения данных, поэтому я рекомендую использовать что-то еще).

Создайте событие триггера, которое будет срабатывать при каждом обновлении события в календаре (создание, редактирование или удаление события)Также запустите эту функцию только один раз, вам нужен только триггер:
function createTrigger() {
    var t = ScriptApp.newTrigger("createSubevents")
         .forUserCalendar("your_calendar_id")
         .onEventUpdated()
         .create();
}
Создать функцию, которая будет создавать «вложенные события» каждый раз, когда создается новое событие.Эта функция должна иметь то же имя, что и та, которую вы вызываете в только что созданном триггере.В следующей функции создается только «вложенное событие», повторите процесс или создайте функцию, чтобы сделать то же самое для того, сколько вложенных событий вы хотите создать (вы должны запустить эту функцию хотя бы один раз, чтобы получить все необходимые разрешения):
function createSubevents() {
  // Getting current syncToken from spreadsheet
  var params = {
    syncToken: sheet.getRange('A1').getValue()
  }
  // Retrieve events that were updated since last call
  var events = Calendar.Events.list('your_calendar_id', params);
  var items = events["items"];
  // Update sync token in spreadsheet
  sheet.getRange('A1').setValue(events["nextSyncToken"]);
  // Loop through updated items (in this case, it should only be one)
  for(var i = 0; i < items.length; i++) {
    var item = items[i];
    var mainStartTime = new Date(item.start.date);
    var mainEndTime = new Date(item.end.date);
    var dateCreated = new Date(item.created);
    var dateUpdated = new Date(item.updated);
    // Check if updated event was created (not deleted nor merely edited)
    if (dateUpdated - dateCreated < 1000 && item.status != "cancelled") {
      var mainEventTitle = item.summary;
      // Setting event B title
      var eventBTitle = 'whatever_event_B_is_for ' + mainEventTitle;
      // Setting event B dates
      var numDaysB = 7 // Number of days before main event, edit according to each event
      var startTimeB = mainStartTime;
      startTimeB.setDate(mainStartTime.getDate() - numDaysB);
      var endTimeB = mainEndTime;
      endTimeA.setDate(mainEndTime.getDate() - numDaysB);
      // Creating event B
      createEvent(eventBTitle, startTimeB, endTimeB)
    }
  }
}

// This function receives a title, a start time and an end time and creates the corresponding event
function createEvent(title, startTime, endTime) {
  try {
    var calendar = CalendarApp.getCalendarById('your_calendar_id');
    var event = calendar.createEvent(title, startTime, endTime)
    Logger.log(event)
  } catch(err) {
    Logger.log(err)
  }
}

Надеюсь это вам пригодится!

...