You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google父表单创建的子表单OnSubmit触发器触发异常问题

这是Google Apps Script的平台固有设计,不是配置遗漏导致的问题。

你在父表单绑定的Apps Script项目中创建子表单的提交触发器时,所有触发器默认归属当前运行的父脚本项目,事件对象的source字段固定返回当前脚本绑定的容器(也就是父表单),即使触发器是由子表单提交触发的,该字段也不会自动指向触发事件的子表单,因此会出现子表单的响应ID在父表单中查询不到的报错。


修复方案

你可以通过存储触发器UID与子表单ID的映射关系解决这个问题,参考修改后的代码:

// 全局声明脚本属性存储实例,用于存映射关系
const scriptProps = PropertiesService.getScriptProperties();

function onSendForm(event) {
  let newForm = FormApp.create('A form');
  const newFormId = newForm.getId();

  let trigger = ScriptApp.newTrigger('onSendNewForm')
    .forForm(newForm)
    .onFormSubmit()
    .create();
  // 存储触发器UID对应子表单ID的映射
  scriptProps.setProperty(trigger.getUniqueId(), newFormId);
}
     
function onSendNewForm(event) {
  const triggerUid = event.triggerUid;
  // 查询当前触发的触发器对应的子表单ID
  const childFormId = scriptProps.getProperty(triggerUid);
  if (!childFormId) return;
  // 主动打开正确的子表单实例
  const childForm = FormApp.openById(childFormId);
  // 从子表单中查询对应响应
  const targetResponse = childForm.getResponseById(event.response.getId());
  
  // 后续业务逻辑
  Logger.log(childForm.getId()); // 可正确输出子表单ID
  Logger.log(targetResponse.getItemResponses()); // 可正常获取响应内容
}

如果后续需要清理失效的子表单和触发器,记得同步删除PropertiesService中对应的映射记录,避免存储冗余数据。


内容的提问来源于stack exchange,提问作者coooola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:42:00