【发布时间】:2019-04-29 04:15:19
【问题描述】:
我做了以下事情:
- 创建了一个 Google 表单(例如表单 ID = ABC)
- 创建了一个 Google 表格(我们称之为 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(form) 应该返回类似:
-
sheet1:testFunctionSheet1 -
sheet2:testFunctionSheet2
这样我可以很容易地判断在提交表单时将执行哪些脚本,并且可以手动删除旧的,以确保不会发生冲突。
有没有办法在提交表单时找出哪些触发器将在我的所有脚本中执行?
更新:getUserTriggers() 的文档阐明它永远不会返回不同脚本的触发器:
以给定的形式获取此用户拥有的所有可安装触发器,仅适用于此脚本或附加组件。此方法不能用于查看附加到其他脚本的触发器。
那么,我如何知道与给定 Google 表单关联的所有触发器?注意:这不一定是程序化解决方案。如果表单中有一个 UI 元素可以为我提供这些信息,那也足够了。
【问题讨论】:
标签: javascript google-apps-script google-forms