【问题标题】:How to dynamically create installable triggers as other users in Google Apps Script?如何在 Google Apps 脚本中以其他用户的身份动态创建可安装触发器?
【发布时间】:2020-04-22 03:48:10
【问题描述】:

所以我有一个 Google 表单绑定脚本,每次提交表单时都会创建一个可安装的触发器。现在,我将表单和脚本都共享给了实际用户。在某些时候,我注意到没有创建新的触发器,因为已经达到配额限制。当我查看已安装触发器的列表时,我注意到它们都安装为“我”。我该如何做到这一点,以便将实际提交表单(并在此过程中创建可安装触发器)的其他用户识别为触发器的“所有者”,而不是我。

【问题讨论】:

    标签: google-apps-script triggers google-forms


    【解决方案1】:

    假设您的代码如下所示:

    function createOnFormSubmitTrigger() {
      var form = FormApp.openById('[FORM-ID]');
      ScriptApp.newTrigger('createTrigger')
      .forForm(form)
      .onFormSubmit()
      .create();
    }
    
    function createTrigger() {
      ScriptApp.newTrigger("myFunction2")
      .timeBased()
      .everyMinutes(10)
      .create();
    }
    
    function myFunction2 () {
      console.log('test')
    }
    

    您是运行createOnFormSubmitTrigger 函数并授予权限的人,将为您的帐户创建触发器(安装为“我”)。您需要让每个用户自己运行createOnFormSubmitTrigger 函数,以便授予权限并在他们的帐户下安装触发器。在这种情况下,这没有多大意义,因为每次提交表单时都会运行每个用户触发器,无论是谁提交的。

    installable triggers 的文档中所述:

    可安装的触发器始终在执行人的帐户下运行 创造了他们。例如,如果您创建一个可安装的打开触发器, 它在您的同事打开文档时运行(如果您的同事有 编辑访问),但它作为您的帐户运行。这意味着如果你 创建一个触发器以在打开文档时发送电子邮件,电子邮件 总是从您的帐户发送,不一定是从您的帐户发送 打开文档。但是,您可以创建一个可安装的触发器 对于每个帐户,这将导致从每个帐户发送一封电子邮件 帐户。

    编辑

    您可以使用getActiveUser 方法为您的用例尝试一种解决方法,该方法将返回触发器所有者用户并将其与提交表单的用户进行比较,您可以使用getRespondentEmail 方法获得该用户,使用@ 987654327@ 语句比较两个用户的电子邮件并根据它运行您需要的代码。这样触发器每次都会运行,但只有当触发器所有者与表单响应者相同时才会运行必要的代码。

    【讨论】:

    • 我试图重新创建您的答案以观察您第一手所说的话,是的,在他们的每个帐户下安装触发器实际上会使脚本在每个用户触发器上运行,从而在它应该只是产生多个结果时运行一次。那么这是否意味着我一开始想要的不可行?我一直在搜索 Google Apps 脚本文档以寻找任何可能的线索,但似乎这确实是一个设计限制。
    • 是的,这是不可行的,因为 onFormSubmit 触发器旨在为任何表单提交运行。我已经用您可以尝试的可能解决方法编辑了我的问题。
    • 您提出的解决方法实际上在我的情况下有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多