随机错误 - 调用getConnection()所需的权限

时间:2017-10-06 06:33:17

标签: google-apps-script

我有一个脚本,其中定义了一个onEdit()函数,用于使用jdbc更新MYSQL数据库中的某些数据。 我已使用触发器UI设置此功能“onEdit”以运行“从电子表格”> “正在编辑”。

它在大多数情况下工作然后随机失败,并在日志中出现以下错误:

You do not have permission to call getConnection at [unknown function](Code:7)

第7行是:

var conn = Jdbc.getConnection("jdbc:mysql://xxxx", "xxx", "xx");

2 个答案:

答案 0 :(得分:1)

我能够通过编程方式而不是通过UI创建Installable触发器来修复这种奇怪的行为。

  1. 我将“onEdit”函数重命名为“onEditStatus”。
  2. 创建一个Initialize函数来创建触发器(在创建它之前还删除了prev触发器)见下文:
  3. function Initialize(){

      var triggers = ScriptApp.getProjectTriggers();
    
      for(var i in triggers) {
        ScriptApp.deleteTrigger(triggers[i]);
      }
    
      var ss = SpreadsheetApp.getActive();
    
      var builder = ScriptApp.newTrigger("onEditStatus")
      .forSpreadsheet(ss)
      .onEdit()
      .create();
    
    };
    

    这修复了我的“你无权在”问题上调用getConnection。

答案 1 :(得分:0)

官方文档可能有助于了解此问题。 Apps脚本中的onEdit事件是受限制的事件,不会触发OAuth流。可能是由于性能原因或与Google Apps工作方式相关的其他技术困难。

这不是一个奇怪的行为。在文档(https://developers.google.com/apps-script/guides/triggers)的有关简单触发器的部分中,他们说:

他们无法访问需要授权的服务。例如,一个 简单触发器无法发送电子邮件,因为Gmail服务需要 授权,但简单的触发器可以将短语翻译为 语言服务,这是匿名的。

据我所知,最好的解决方案是可安装的触发器。