Ошибка выполнения: у вас нет разрешения на вызов 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, как указано в док, простые триггеры не могут делать ничего, что требует авторизации, но устанавливаемые.

enter image description here

enter image description here


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);   
  }
}

enter image description here

enter image description here


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');
    }