#google-apps-script #google-calendar-api
#google-apps-script #google-calendar-api
Вопрос:
У меня есть скрипт Google, связанный с электронной таблицей, который изменяет количество календарей Google для разных людей. Я являюсь владельцем каждого из этих календарей, а затем они передаются отдельным людям. У меня есть один человек, который будет управлять этим листом, и каждый календарь предоставляется им совместно.
Когда я запускаю скрипт для обновления календарей за определенный месяц, приведенный ниже код выполняется без проблем. Когда не владелец пытается запустить тот же код, он получает приведенный ниже код ошибки.
"TypeError: Cannot read property 'getEvents' of null at UpdateCalendar(Code:209:31)"
Строка 209 относится к:
var events = CallCalendar.getEvents(fromDate, toDate); //create array of events of full month for given calendar
Полный раздел кода приведен ниже:
//Cycle through each Calendar and delete the events
for (var x = 0; x < CallCalendars.length; x ) {//Cycle through each Different calendar
var CallCalendar = CalendarApp.getCalendarById(CallCalendars[x].ID); //Get ID of each Calendar
var events = CallCalendar.getEvents(fromDate, toDate); //create array of events of full month for given calendar
for(var i = 0; i < events.length; i ){ //Cycle across array of full month of events to delete each one
var ev = events[i]; //instantiate each event
Logger.log("ev.getTitle(): " ev.getTitle()); // show event name in log
ev.deleteEvent(); //Delete instantiated event
}
}
Я предполагаю, что это проблема с разрешениями в некотором роде. Я был бы очень признателен за рекомендации.
Комментарии:
1. Код автоматически завершается сбоем
CalendarApp.getCalendarById(CallCalendars[x].ID)
. ОткудаCallCalendars
берется?2. Извините, CallCalendars — это массив объектов, который включает имя пользователя в CallCalendars [x] . Имя и идентификатор их календаря в CallCalendar [x].ID.
3. Вы проверили, что не владелец имеет доступ к этому массиву?
4. @ Diego — Этот массив определен выше в коде.
5. Я думаю, вам нужно будет выполнить некоторую отладку с этим пользователем. Если у них есть доступ к идентификаторам, но
CalendarApp.getCalendarById()
возвращаетnull
, то это означает, что у них нет доступа к календарям.
Ответ №1:
Объяснение / проблема:
Похоже, вы передаете какой-то неправильный календарь IDs
или IDs
у вас нет разрешения на доступ.
- Одним из обходных путей было бы использовать оператор try … catch, поэтому всякий раз, когда ваш код сталкивается с ними
IDs
, переходите кcontinue
следующей итерации.
Решение:
//Cycle through each Calendar and delete the events
for (var x = 0; x < CallCalendars.length; x ) {//Cycle through each Different calendar
var CallCalendar = CalendarApp.getCalendarById(CallCalendars[x].ID); //Get ID of each Calendar
try{
var events = CallCalendar.getEvents(fromDate, toDate); //create array of events of full month for given calendar
}
catch(e){continue;}
for(var i = 0; i < events.length; i ){ //Cycle across array of full month of events to delete each one
var ev = events[i]; //instantiate each event
Logger.log("ev.getTitle(): " ev.getTitle()); // show event name in log
ev.deleteEvent(); //Delete instantiated event
}
}
Комментарии:
1. Хотя это сработало, чтобы обойти ошибку, оно просто обошло каждый календарь. Проблема была решена в приведенных выше комментариях и была связана с разрешениями. Спасибо за ответ.