【问题标题】:Installable trigger to fire script in a different form?可安装触发器以不同形式触发脚本?
【发布时间】:2020-12-17 18:59:49
【问题描述】:

当提交不同的表单 (B) 时,我正在尝试运行连接到一个表单 (A) 的脚本。我有一系列不同的表单,它们相似并且需要运行相同的脚本,因此我不将代码复制到每个脚本,而是想知道这是否可能。 我在A中成功做了一个可安装的触发功能,指向B。提示时我已授予权限。 当我发布 B 时,A 中的脚本触发,我在日志中得到了这个:

Exception: No response with ID 2_ABaOnudSFDkNQOL2Xn4fNOmT95GrTotEW8LSjxfI5qf6qceDN5hD5CHKqNT5D4G_DdONWq0 exists for this form.
    at onFormAnswerSubmit(Kod:40:20)

停止的行 (Kod:40:20) 是获取发布数据的行:

  var items    = e.response.getItemResponses();

这应该有效还是不可能将发布的数据从一个表单传递到另一个表单的脚本?

或者我可以在触发器中做更多的事情吗?就像强制传递 e。或者其他的东西? 这是我创建的触发器:

/**
 * Creates a trigger for when a different form is posted that runs a function in this script (run once)
 */
function createOtherFormTrigger() {
  var formID = FormApp.openById("XXXXX"); // form B
    
  ScriptApp.newTrigger('onFormAnswerSubmit') // a function in this script, in form A
      .forForm(formID)
      .onFormSubmit()
      .create();
}

【问题讨论】:

  • 表单实际上没有连接到任何工作表,我在表单端使用脚本将数据转储到谷歌文档并发送电子邮件。
  • 您不需要将脚本添加(绑定)到其他表单。只要所有内容都在同一个帐户中,任何 Apps 脚本文件都可以影响任何其他表单。您只需要表单文件 ID 即可获取任何其他表单,并使用该表单执行某些操作。 Apps 脚本代码可以通过文件 ID 打开表单。影响表单的脚本文件不需要绑定到它打开的表单。如果您想以编程方式在表单中创建新响应(将数据添加到表单),这是可能的。您无需在其他表单中创建触发器。

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


【解决方案1】:

你需要稍微改变一下逻辑:

触发器触发的函数应该包含在与触发器相同的脚本中。

为表单 B 创建 formSubmit 触发器的示例代码:

//run this once
function createOtherFormTrigger() { 
var formB = FormApp.openById("XXX");   
  ScriptApp.newTrigger('onFormAnswerSubmit') // a function in this script, in form B
      .forForm(formB) //the active form is Form B
      .onFormSubmit()
      .create();
}
function onFormAnswerSubmit(e){
   var formB = e.source;
   var items = e.response.getItemResponses(); //items of the latest form response of form B
   var formA = FormApp.openById("XXXX"); // Form A 
  ... 
  // do what you need to do with form A
}

上面的代码将创建在提交表单 B 的表单响应时触发的触发器。因此,脚本是否绑定到表单 A、表单 B 或 standalone 并不重要。实际上,在独立脚本中实现这些功能可能最有意义,以确保它们不会干扰您可能在表单绑定脚本中使用的其他表单提交触发器。

【讨论】:

  • 谢谢,确实如此——我把它做成了独立的。谢谢你帮我弄清楚逻辑!
【解决方案2】:

我遇到了同样的问题。在我放置e.response 的任何地方,我都会遇到同样的错误。看起来唯一的解决方法是使用独立脚本而不是有界脚本。

【讨论】:

    【解决方案3】:

    我只是理解这个问题。

    因此,如果您想从表单提交中获取响应,您需要将脚本绑定到表单。为此,请转到您的表单编辑视图,然后单击三个点,然后打开脚本编辑器。

    如果您以前这样做过,请再试一次,并确保您的脚本在那里。就我而言,第一次从 Google 表单打开脚本编辑器时,它不会绑定脚本。所以当我第二次这样做时,它会打开一个带有空白模板的新脚本编辑器。在我将脚本复制到新脚本后,它可以完美运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-20
      • 2016-12-08
      • 2022-11-09
      相关资源
      最近更新 更多