Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何在GoogleApps脚本中像其他用户一样动态创建可安装的触发器?_Google Apps Script_Triggers_Google Forms - Fatal编程技术网

Google apps script 如何在GoogleApps脚本中像其他用户一样动态创建可安装的触发器?

Google apps script 如何在GoogleApps脚本中像其他用户一样动态创建可安装的触发器?,google-apps-script,triggers,google-forms,Google Apps Script,Triggers,Google Forms,所以我有一个谷歌表单绑定脚本,每次提交表单时都会创建一个可安装的触发器。现在,我将表单和脚本共享给实际用户。在某些时候,我注意到新的触发器并没有被创建,因为配额限制已经达到。当我查看已安装触发器的列表时,我注意到所有触发器都以“我”的形式安装。我如何做才能使实际提交表单(并在过程中创建可安装触发器)的其他用户被标识为触发器的“所有者”,而不是我。假设您的代码如下所示: function createOnFormSubmitTrigger() { var form = FormApp.open

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

假设您的代码如下所示:

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
功能,以便授予权限并在其帐户下安装触发器。在这种情况下,这没有多大意义,因为无论是谁提交表单,每次提交表单时都会运行每个用户触发器

如以下文件所述:

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

编辑
您可以通过使用返回触发器所有者用户并将其与提交表单的用户进行比较的方法来尝试解决您的用例问题,您可以通过使用
if
语句来比较两个用户的电子邮件,并根据需要运行代码。这样每次都会运行触发器,但只有当触发器所有者与表单响应者相同时,才会运行必要的代码。

假设您的代码如下所示:

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
功能,以便授予权限并在其帐户下安装触发器。在这种情况下,这没有多大意义,因为无论是谁提交表单,每次提交表单时都会运行每个用户触发器

如以下文件所述:

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

编辑
您可以通过使用返回触发器所有者用户并将其与提交表单的用户进行比较的方法来尝试解决您的用例问题,您可以通过使用
if
语句来比较两个用户的电子邮件,并根据需要运行代码。这样每次都会运行触发器,但只有当触发器所有者与表单响应者相同时,才会运行必要的代码。

我试图重新创建您的答案,以观察您的第一手信息,是的,在他们的每个帐户下安装触发器实际上会使脚本在每个用户触发器上运行,从而在应该只运行一次时产生多个结果。那么这是否意味着我首先想要的是不可行的?我一直在搜索谷歌应用程序脚本文档,寻找任何可能的线索,但这似乎真的是一个设计限制。是的,这是不可行的,因为onFormSubmit触发器旨在为任何表单提交运行。我对我的问题进行了编辑,提出了一个你可以尝试的解决方法。你提出的解决方法实际上在我的案例中起到了作用。我试图重现你的答案,以观察你的第一手说法,是的,在他们的每个帐户下安装触发器实际上会使脚本在每个用户触发器上运行,从而在应该只运行一次时产生多个结果。那么这是否意味着我首先想要的是不可行的?我一直在搜索谷歌应用程序脚本文档,寻找任何可能的线索,但这似乎真的是一个设计限制。是的,这是不可行的,因为onFormSubmit触发器旨在为任何表单提交运行。我对我的问题进行了编辑,提出了一个你可以尝试的解决办法。你提出的解决办法实际上在我的案例中起了作用。