Сценарии Google, перемещающие события между календарями: Calendar.Events.move не может найти событие - PullRequest
1 голос
/ 24 апреля 2020

[ПРИМЕЧАНИЕ: обновлено, чтобы лучше отражать понимание проблемы]

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

Я написал следующий код :

function move_all_events()
{
  var fromYear = 2016;
  var toYear=2020
  var fromDate = new Date(fromYear,0,1,0,0,0); //Year, Month (where 0 = Jan, 1 = Feb...), Hour, Min, Sec, Millisecond
  var toDate = new Date(toYear,1,0,0,0);
  var fromCalendarName = 'Calendar1';
  var toCalendarName = 'Calendar2';

  // Move from start of fromYear to start of toYear (for month 0 = Jan, 1 = Feb...)

  var fromCalendar = CalendarApp.getCalendarsByName(fromCalendarName)[0];
  var toCalendar = CalendarApp.getCalendarsByName(toCalendarName)[0];

  var fromCalendarId = fromCalendar.getId();
  var toCalendarId = toCalendar.getId();
  Logger.log(fromCalendarId);
  Logger.log(toCalendarId);

  var events = fromCalendar.getEvents(fromDate, toDate);
  for(var i=0; i<events.length;i++){
    var evId = events[i].getId().replace("@google.com", "");
    Logger.log(evId); // show event Id in log
    Calendar.Events.move(fromCalendarId, evId, toCalendarId);  
  }
}

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

Однако код СБОЙ, когда события должны быть перемещенные были созданы извне в файле ics / ics и затем импортированы в календарь Google.

Когда я запускаю код, я получаю следующую ошибку:

API call to calendar.events.move failed with error: Not Found (line 86, file "Code")

где строка 86 - это строка с Calendar.Events.move.

Обратите внимание, что журнал показывает:

[20-04-24 01:26:15:031 EDT] myname@gmail.com
[20-04-24 01:26:15:032 EDT] asfdsfdsfdsfekwlkkllkpauc700@group.calendar.google.com
[20-04-24 01:26:15:986 EDT] myeventidprefix-a3a597f53ff059959e950fc513df33af

Все кажется «правильным», и действительно, идентификатор события - это именно тот UID, который я создал внешне в файле ics, который Затем я импортировал.

И все же почему-то кажется, что Calendar.Events.move не может найти само событие в fromCalendar.

Есть идеи, что здесь не так?

ВТОРАЯ проблема, которая Я заметил, что даже когда рутина работает (например, для событий, созданных в Календаре Google), «уведомления» не перемещаются. Т.е., если я создаю событие в fromCalendar с уведомлениями, перемещенные события в toCalendar теряют уведомление. Обратите внимание, что ни в календаре вообще не включены уведомления о событиях или «Весь день».

Интересно, что если я перенесу то же событие обратно в fromCalendar, уведомления волшебным образом появятся снова.

Так что любая идея почему уведомления, по-видимому, все еще не повреждены, но не видны вместе с другими данными о событиях

1 Ответ

0 голосов
/ 24 апреля 2020

ОК - я решил первую часть. Проблема заключается в том, что для импортированных событий iCal UID iCal отличается от идентификатора события Google. В частности, .getId () возвращает UID iCal, а функции Calendar.Events.move требуется идентификатор события Google, который можно получить с помощью: Calendar.Events.list (fromCalendarId) .items

См .: Как найти идентификатор события в моем Календаре Google?

Это, конечно, не проблема для нативных событий, поскольку идентификаторы идентичны, что объясняет, почему мой оригинальный код работал для нативных событий. .

Пересмотренный код выглядит следующим образом:

 for(var i=0; i<events.length; i++){
    var evId = events[i].id;
    Logger.log(i + ": " + evId); // show event Id in log
    Calendar.Events.move(fromCalendarId, evId, toCalendarId);  //Note need to turn on Calendar API under Resources
  }

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

(Кроме того, как отмечалось выше, уведомления не перемещаются, как упоминалось ранее.)

...