执行失败:您无权调用 getProjectTriggers [英] Execution failed: You do not have permission to call getProjectTriggers

查看:25
本文介绍了执行失败:您无权调用 getProjectTriggers的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写了一个脚本来做各种事情,这个脚本的一部分是安装触发器:

I've written a script that does various things, one part of this script, is installing a trigger:

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()触发器中调用.当我打开工作表并检查日志时,我的触发器没有安装,我收到以下消息.

The above code is called in the onOpen() trigger. When I open the sheet, and check logs, my trigger isn't installed and I get the following message.

执行失败:您无权调用 getProjectTriggers

Execution failed: You do not have permission to call getProjectTriggers

当我手动运行 onOpen() 时.触发器已安装.

When I run the onOpen() manually. The trigger is installed.

我目前拥有该电子表格,但理想情况下,我想与人们分享它,并且触发器会安装并运行.

I currently own the spreadsheet, but ideally, i'd like to share it with people and the trigger installs and works.

任何想法如何通过在 onOpen 中调用项目触发器来修复此错误?

Any ideas how to fix this error with getting project triggers called in onOpen?

推荐答案

关注您的评论:

文档,简单的触发器不能做任何需要授权的事情,但可安装的触发器可以.

Change the name of your function to anything else and create an installable trigger that runs this function on SS open, as mentioned in the doc, simple triggers can't do anything that requires authorization but installable ones do.

包含您的代码的完整示例

Edit : complete example with your code

在将其保存在电子表格中并使用 specialonOpen 函数手动设置打开触发器(并接受授权请求)后,我刷新了浏览器并使其与您的菜单和新触发器一起使用(参见下图 -用法语,因为我使用了另一个带有旧电子表格版本的 gmail 帐户,我的英文帐户有新版本,而 onFormSubmit 在新版本中不起作用)

After saving this in a spreadsheet and setting manually a trigger on open with the specialonOpen function (and accepting the authorization request), I refreshed the browser and get it working with your menu and the new trigger as well (see illustration below -in french because I used another gmail account with old spreadsheet version, my english one has new version and onFormSubmit doesn't work in new versions)

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:一个带有浏览器消息的解决方案,建议从菜单安装.

EDIT 2 : a solution with a Browser message to suggest install from a menu.

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

这篇关于执行失败:您无权调用 getProjectTriggers的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆