Есть ли способ узнать, было ли удалено одно или несколько событий в повторяющейся серии?

#google-apps-script #google-calendar-api

#google-apps-script #google-calendar-api

Вопрос:

Я использую следующий код, чтобы проверить, есть ли отмененные события в календаре Google. Он отлично работает для регулярных, неповторяющихся событий. Однако я сталкиваюсь с проблемой, когда пользователь удалил одно событие в повторяющейся серии событий.

   function checkForCancelledEvents(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Data Source");
  ss.setActiveSheet(sheet);

  //sort by date added
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange(1,2,lastRow, 5)
  var values = range.getValues();
  //in the array the 3 position is the eventId, the 4 position is the calendar ID, I'm putting more into the array since I was playing around with also using the start date or time to solve the problem

  //loop through all using Calendar.Events.get
  for (i=1;i<values.length;i  ) {
    var splitEventID = values[i][3].toString().split("@")[0] //remove the calendarID from the eventID

    if (Calendar.Events.get(values[i][4],splitEventID).status === "cancelled") {
      //the below clears the content of the row that contains the cancelled events
      //the range has to start at i   1 since the values include the header row, but the for loop starts at 1 instead of 0 to prevent the API from calling with data from header row (which produces an error). So i   1 gives the accurate row number for which the cancelled event lives
      var clearRange = sheet.getRange(i   1,1,1,7) 
      clearRange.clearContent()
    } else {
      //Logger.log("this is NOT cancelled")
    }
  }
}
 

Проблема в том, что все повторяющиеся события содержат одинаковые EventID и calendarId. У них также одинаковый идентификатор ICalUid. Повторяющиеся события имеют другой id , но неповторяющиеся события не имеют одинакового id формата. Я попытался использовать Calendar.event.перечислите и добавьте timeMin каждое событие в повторяющейся серии, однако событие все еще было указано как confirmed , хотя оно было удалено.
Есть ли способ узнать, было ли удалено одно событие в повторяющейся серии?

Ответ №1:

Я полагаю, что ваша цель заключается в следующем.

  • Из Is there a way to find if a single event within a recurring series has been deleted? , вы хотите знать, удалено ли хотя бы одно из событий из повторяющихся событий с помощью Google Apps Script.

В этом случае я подумал, что при использовании метода «События: экземпляры» ваша цель может быть достигнута. Пример сценария выглядит следующим образом.

Пример сценария:

Перед использованием этого скрипта, пожалуйста, включите API календаря в расширенных службах Google.

 var calendarId = "###"; // Please set the calendar ID.
var eventId = "###"; // Please set the event ID.

var ar = [];
var pageToken = "";
do {
  var res = Calendar.Events.instances(calendarId, eventId, {maxResults: 2500, showDeleted: true, pageToken});
  if (res.items.length > 0) ar = [...ar, ...res.items.filter(({status}) => status == "cancelled")];
  pageToken = res.nextPageToken;
} while (pageToken);
if (ar.length > 0) {
  // When "ar" has the values, the events are deleted from the recurring events.

  // do something.

}
 
  • В приведенном выше сценарии вы можете просмотреть информацию об удаленных событиях по адресу ar .

Примечание:

  • Это простой пример сценария. Поэтому, пожалуйста, измените это для вашей реальной ситуации.

Ссылка:

Комментарии:

1. Спасибо! Похоже, это работает хорошо. Можете ли вы сказать мне, что делают три точки в этой строке ar = [...ar, ? Я пытался получить доступ к дате и времени отмененного события. Любая помощь по этому поводу?

2. Не обращайте внимания на вопрос в моем комментарии. Я понял это с помощью Logger.log(ar[0]["start"]["dateTime"])

3. @Craig. Пирс Спасибо за ответ. Я рад, что ваша проблема была решена. И вам спасибо.