#google-apps-script #google-sheets
Вопрос:
Я написал простой скрипт, пытаясь программно создать скрипт из функции onEdit
function onEdit() {
test();
}
function test() {
triggerLater();
}
function customMsgBox() {
Browser.msgBox("hello world");
}
function triggerLater() {
var date = new Date();
date.setMinutes(date.getMinutes() 1);
try {
var oneTimeOnly = ScriptApp.newTrigger("customMsgBox")
.timeBased()
.at(date)
.create();
return oneTimeOnly.getUniqueId();
}
catch (e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.toast("error");
}
}
Если я попытаюсь запустить onEdit из редактора сценариев, триггер будет создан, но при каждом редактировании электронной таблицы в тосте появляется сообщение «ошибка»
Может кто-нибудь помочь мне понять ?
Комментарии:
1. К вашему сведению, если вы добавите значение в переменную «e», вы сможете увидеть точное сообщение об ошибке.
Ответ №1:
Функция onEdit
простого обработчика событий имеет ограниченные разрешения (т. е. она не может отправлять электронные письма, открывать календарь и т.д.). Потому что он работает без разрешений пользователей. Поэтому он не может настроить триггер (который не имеет никаких ограничений и был бы огромной ошибкой безопасности).
Если вы ожидали, что триггер должен быть создан под вашей учетной записью, используйте триггер, который можно установить при редактировании. Сначала переименуйте свою функцию onEdit во что-то другое (чтобы она не запускалась как простой обработчик событий), затем перейдите в меню Ресурсы и выберите функцию для запуска в событиях редактирования электронных таблиц. Взгляните на документы для получения дополнительной информации.
Комментарии:
1. Там нет никакой информации о создании триггеров конкретно. Но 3-й пункт о простых обработчиках событий гласит, что ничего, что требует авторизации пользователя, не может быть сделано, что включает в себя это. И совершенно очевидно, что вы не сможете запустить привилегированный код из ограниченного. Это было бы огромной проблемой безопасности.
2. На странице безопасности есть конкретная информация developers.google.com/apps-script/guide_security где говорится: «Простые события, такие как onOpen, onEdit и onInstall, выполняются под именем пользователя, управляющего электронной таблицей. Устанавливаемые события (триггеры электронной таблицы) выполняются под именем пользователя, создавшего триггеры».