Google apps script 表单触发器中的错误源和响应

Google apps script 表单触发器中的错误源和响应,google-apps-script,triggers,google-forms,Google Apps Script,Triggers,Google Forms,我用谷歌应用程序脚本设置了一个简单的工作流。我从表单a创建了脚本项目 以下是工作流程: 用户提交表单a的响应 脚本为表单B创建一个新的响应,提交它,并通过电子邮件向我发送编辑链接 我提交了为我创建的表单B的回复 脚本通过电子邮件向我发送了两种形式的摘要 为此,我以编程方式在表单B上设置了一个触发器: function addOnNewFormBSubmitTrigger() { ScriptApp.newTrigger('onNewFormBSubmit') .forForm(FOR

我用谷歌应用程序脚本设置了一个简单的工作流。我从表单a创建了脚本项目

以下是工作流程:

  • 用户提交表单a的响应
  • 脚本为表单B创建一个新的响应,提交它,并通过电子邮件向我发送编辑链接
  • 我提交了为我创建的表单B的回复
  • 脚本通过电子邮件向我发送了两种形式的摘要
  • 为此,我以编程方式在表单B上设置了一个触发器:

    function addOnNewFormBSubmitTrigger() {
      ScriptApp.newTrigger('onNewFormBSubmit')
        .forForm(FORM_B_ID)
        .onFormSubmit()
        .create();
    }
    
    函数
    onNewFormBSubmit
    如下所示:

    function onNewFormBSubmit(formSubmitEvent) {
      _sendAnalysisEmail(formSubmitEvent.source, formSubmitEvent.response);
    }
    
    var form = FormApp.openById('FORM_B_ID');
    ScriptApp.newTrigger('onNewFormBSubmit')
        .forForm(form)
        .onFormSubmit()
        .create();
    
    该函数已触发,但
    formSubmitEvent.source
    值是表单A,而
    formSubmitEvent.response
    是此表单的最新响应。我希望源是表格B,因为我在上面附加了触发器

    编辑:

    即使传递一个表单实例而不是它的ID,也不能像我期望的那样工作

    function addOnNewAlaysisSubmitTrigger() {
      var form = FormApp.openById(FORM_B_ID);
      ScriptApp.newTrigger('onNewFormBSubmit')
        .forForm(form)
        .onFormSubmit()
        .create();
    }
    

    我遗漏了什么吗?

    您是否尝试使用表单作为参数,而不仅仅是他的Id

    诸如此类:

    function onNewFormBSubmit(formSubmitEvent) {
      _sendAnalysisEmail(formSubmitEvent.source, formSubmitEvent.response);
    }
    
    var form = FormApp.openById('FORM_B_ID');
    ScriptApp.newTrigger('onNewFormBSubmit')
        .forForm(form)
        .onFormSubmit()
        .create();
    

    谢谢@tehhowch,你在评论中给我的链接让我觉得如果脚本不是从表单创建的,它可能会工作。因此,我制作了一个POC,从一个电子表格创建脚本,它可以工作

    这是我写的剧本:

    这是两个函数生成的日志:

    正如你所看到的,我从两份表格中得到了两份不同的回复。 现在的问题是,该事件不是文档中定义的提交表单事件:但这是另一个故事

    如果您想尝试,以下是:

    • 我从中创建表单和脚本的电子表格(在“日志”表中推送日志):
    • 实时表单A(需要谷歌登录):
    • 实时表单B(也需要谷歌登录):
    • 剧本:

    是的,我做了,但不幸的是,结果是一样的:(@benjamingrandfound,因为这似乎是正确的方法,表单响应触发器不会通过编程提交激活。