Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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
Javascript 如何获取所有表单触发器(不仅仅是当前脚本)?_Javascript_Google Apps Script_Google Forms - Fatal编程技术网

Javascript 如何获取所有表单触发器(不仅仅是当前脚本)?

Javascript 如何获取所有表单触发器(不仅仅是当前脚本)?,javascript,google-apps-script,google-forms,Javascript,Google Apps Script,Google Forms,我做了以下工作: var form = FormApp.openById("ABC"); ScriptApp.newTrigger("testFunctionSheet1").forForm(form).onFormSubmit().create(); 创建谷歌表单(例如表单ID=ABC) 创建了一个谷歌表单(我们称之为sheet1) 在sheet1的脚本编辑器中,使用以下代码将触发器安装到我的表单中: var form = FormApp.openById("ABC"); ScriptApp

我做了以下工作:

var form = FormApp.openById("ABC");
ScriptApp.newTrigger("testFunctionSheet1").forForm(form).onFormSubmit().create();
  • 创建谷歌表单(例如表单ID=ABC)
  • 创建了一个谷歌表单(我们称之为sheet1)
  • 在sheet1的脚本编辑器中,使用以下代码将触发器安装到我的表单中:

    var form = FormApp.openById("ABC");
    ScriptApp.newTrigger("testFunctionSheet1").forForm(form).onFormSubmit().create();
    
    当我调用以下命令时,我看到触发器已正确安装:

    ScriptApp.getUserTriggers(form);
    
    一切都很好。每当提交Google表单时,我都可以执行代码

    问题是,稍后我会继续创建一个新的Google表单(我们称之为sheet2),它有类似的代码:

    ScriptApp.newTrigger("testFunctionSheet2").forForm(form).onFormSubmit().create();
    
    不过,为了安全起见,我尝试从所有旧脚本(即sheet1)中删除所有以前的触发器。但是,当我跑步时:

    ScriptApp.getUserTriggers(form);
    
    。。。它返回一个结果(
    testFunctionSheet2
    ),而不是同时返回
    testFunctionSheet1
    testFunctionSheet2
    。原来它只返回当前脚本执行的触发器

    这是有问题的,因为这可能意味着我无意中有许多脚本都在表单提交时执行。如果我从来没有写下哪些脚本为哪些表单执行,我就不知道每次提交都会运行什么。这些脚本中的一些可能做相同的事情(充其量是浪费CPU周期,或者在最坏的情况下会相互干扰),或者它们可能做完全不同的事情,并可能相互冲突

    我想要一种简单的方法来查找表单提交时将执行的所有脚本触发器。类似于如果函数的行为与我预期的一样

    例如,
    ScriptApp.getUserTriggers(表单)
    应返回如下内容:

    • sheet1
      testFunctionSheet1
    • sheet2
      testFunctionSheet2
    通过这种方式,我可以很容易地判断表单提交时将执行哪些脚本,并且可以手动删除旧脚本,以确保没有冲突

    有没有办法确定在提交表单时,哪些触发器将在我的所有脚本中执行


    更新:的文档说明它将永远不会返回不同脚本的触发器:

    获取此用户在给定表单中拥有的所有可安装触发器,仅用于此脚本或加载项。无法使用此方法查看附加到其他脚本的触发器


    那么,我如何知道与给定Google表单相关联的所有触发器呢?注意:这不一定是一个编程解决方案。如果表单中有一个UI元素为我提供了这些信息,那也就足够了。

    似乎没有办法做到这一点,但有一些变通方法可以使事情更有条理:

  • 不要将表单触发器安装在工作表上,而是将其安装在表单上。如果您养成了这个习惯,您可以很容易地判断是否安装了脚本,因为您要检查的第一个位置是表单的脚本。只需像上面尝试的那样运行get all triggers命令,它就可以工作了

  • 不要在表单上安装表单触发器,而是将表单设置为向工作表提交其响应,并在中使用onFormSubmit()方法。找出哪个触发器与表单关联变得非常简单,只需打开表单,然后转到其目标,然后查看该脚本是否具有表单的触发器

  • 将触发器脚本名称隐藏在表单上不打算向用户显示的某些属性中(例如)。将其设置为类似于
    此脚本有一个与sheet1关联的活动触发器。
    您可以创建一个帮助函数,在安装触发器之前,它可以确保该文本不存在(例如,如果您想将每个表单限制为1个触发器)


  • 正如OP在这个问题上已经提到的,文档中说脚本不能获得由其他脚本创建的触发器

    如果您是唯一一个从脚本项目创建触发器的人,那么请转到>触发器,在那里您将找到由您的帐户创建的所有触发器的列表

    我还没有尝试过,但我认为另一种选择是在创建触发器的项目上启用Google Apps脚本API,并添加一个通过Google Apps脚本API调用的函数来“记录”该项目创建的触发器

    关于“在某处登录”,可能更简单的设置是将日志通过电子邮件发送给“活动用户”。

    转到


    这应该给出一个id为ABC的
    表单
    中所有触发器的列表。您可以清除那里的过滤器并添加新的过滤器。

    这与我正在寻找的非常接近,但它似乎只适用于我安装的触发器。理想情况下,如果其他人运行了在表单上安装触发器的代码,我也应该能够在列表中看到他们的触发器。@senseal您不能看到其他人的触发器。它打开了安全漏洞,利用它很容易。触发器与文档不完全关联。它更多地链接到用户帐户,而不是特定的文档。