Ошибка выполнения: у вас нет разрешения на вызов getProjectTriggers
Я очень новичок в Javascript и Google apps, но медленно нахожу свои ноги (с помощью)
Я написал сценарий, который делает разные вещи, одна часть этого сценария-установка триггера. Вот оно.
function setTrigger() {
var ss = SpreadsheetApp.getActive();
var triggers = ScriptApp.getProjectTriggers();
Logger.log('Amount of triggers ' +triggers.length);
var j = 0;
for (var i = 0 ; i < triggers.length;i++){
if(triggers[i].getHandlerFunction() == 'getNotes' ){j++;}
}
Logger.log('Amount of matching triggers ' +j);
if(j == 0 ){ScriptApp.newTrigger("getNotes").forSpreadsheet(ss).onFormSubmit().create();}
}
вот проблема, которая у меня есть.
приведенный выше код вызывается в onOpen()
триггер.
Когда я открываю лист и проверяю журналы, мой триггер не установлен, и я получаю следующее сообщение.
Execution failed: You do not have permission to call getProjectTriggers
когда я запускаю onOpen()
вручную. Триггер установлен.
в настоящее время я владею электронной таблицей, но в идеале я хотел бы поделиться ею с людьми, и триггер устанавливается и работает.
какие идеи?
1 ответов
после вашего комментария :
измените имя своей функции на что-нибудь еще и создайте установочный триггер, который запускает эту функцию на SS open, как указано в док, простые триггеры не могут делать ничего, что требует авторизации, но устанавливаемые.
Edit: полный пример с вашим кодом
после сохранения этого в электронной таблице и установки вручную триггер при открытии с помощью функции specialonOpen (и принимая запрос авторизации), я обновил браузер и заставил его работать с вашим меню и новым триггером (см. иллюстрацию ниже-на французском языке, потому что я использовал другую учетную запись gmail со старой версией электронной таблицы, мой английский имеет новую версию, а onFormSubmit не работает в новых версиях)
function specialonOpen() {
var ss = SpreadsheetApp.getActive();
var items = [
{name: 'Refresh TOL Notes', functionName: 'getNotes'},
null, // Results in a line separator.
{name: 'Coming Soon!', functionName: 'menuItem2'}
];
ss.addMenu('TOL Toolkit', items);
var sheet = ss.getSheetByName('New Notes');
if (sheet == null) {var ss = SpreadsheetApp.getActive();
ss.insertSheet('New Notes',0 );
var sheet = ss.getSheetByName('New Notes');
sheet.deleteColumns(3, 18);
sheet.deleteRows(12, 88 );
sheet.getRange('a1').setValue('Agent Name');
sheet.getRange('b1').setValue('Tol Notes');
getNotes();
sheet.setColumnWidth(1, 120);
sheet.setColumnWidth(2, 400);
setTrigger() }
getNotes();
setTrigger()
}
function setTrigger() {
var ss = SpreadsheetApp.getActive();
var triggers = ScriptApp.getProjectTriggers();
Logger.log('Amount of triggers ' + triggers.length);
var j = 0;
for (var i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() == 'getNotes') {
j++;
}
}
Logger.log('Amount of matching triggers ' + j);
if (j == 0) {
ScriptApp.newTrigger("getNotes").forSpreadsheet(ss).onFormSubmit().create();
}
}
function getNotes() {
var s = SpreadsheetApp.getActive();
var sheet1 = s.getSheetByName('New Notes');
if (sheet1 == null) {
var s = SpreadsheetApp.getActive();
s.insertSheet('New Notes', 0);
var sheet1 = s.getSheetByName('New Notes');
sheet1.deleteColumns(3, 18);
sheet1.deleteRows(12, 88);
sheet1.getRange('a1').setValue('Agent Name');
sheet1.getRange('b1').setValue('Tol Notes');
sheet1.setColumnWidth(1, 120);
sheet1.setColumnWidth(2, 400);
}
}
EDIT 2: решение с сообщением браузера для предложите установить из меню.
function onOpen() {
var ss = SpreadsheetApp.getActive();
var items = [
{name: 'Install this script', functionName: 'setTriggers'},
];
ss.addMenu('Custom Menu', items);
Browser.msgBox('please run INSTALL from the custom menu');
}