如何找出触发脚本的Form?

时间:2017-12-06 05:24:24

标签: google-apps-script

我正在尝试让我的独立脚本成为多个表单的公共触发器(onFormSubmit触发器),并确定触发脚本的表单。

function myFunction() {
  ScriptApp.newTrigger('onFormSubmit').forForm('FormID_1').onFormSubmit().create();
  ScriptApp.newTrigger('onFormSubmit').forForm('FormID_2').onFormSubmit().create();
  ScriptApp.newTrigger('onFormSubmit').forForm('FormID_3').onFormSubmit().create();
}

function onFormSubmit(e){
  Logger.log(e);
}

但参数e只有{authMode = FULL,response = FormResponse,triggerUid = ......},没有FormId。

我怎么知道哪个表单触发了脚本?

1 个答案:

答案 0 :(得分:1)

请将此视为几个答案之一。根据您的问题,您可以从参数triggerUid中检索e。那么如何使用PropertiesService保存triggerUid呢? triggerUid是每个触发器的ID。通过使用此ID,可以检索提交的表单。

当您使用此示例脚本时,请首先运行myFunction(),然后使用表单提交。您可以在Stackdriver(View - > Stackdriver Logging)中查看结果。可以检索使用的表单的表单ID。

示例脚本如下。

示例脚本:

function myFunction() {
  var FormID_1 = 'FormID_1';
  var FormID_2 = 'FormID_2';
  var FormID_3 = 'FormID_3';
  var form1 = ScriptApp.newTrigger('onFormSubmit').forForm(FormID_1).onFormSubmit().create();
  var form2 = ScriptApp.newTrigger('onFormSubmit').forForm(FormID_2).onFormSubmit().create();
  var form3 = ScriptApp.newTrigger('onFormSubmit').forForm(FormID_3).onFormSubmit().create();
  var forms = {};
  forms[FormID_1] = form1.getUniqueId();
  forms[FormID_2] = form2.getUniqueId();
  forms[FormID_3] = form3.getUniqueId();
  PropertiesService.getScriptProperties().setProperties(forms);
}

function onFormSubmit(e) {
  var forms = PropertiesService.getScriptProperties().getProperties();
  for (v in forms) {
    if (forms[v] == e.triggerUid) {
      console.log(v) // v is the form name which was submitted. You can see this at Stackdriver.
    }
  }
}

参考:

如果我误解了你的问题,我很抱歉。

编辑:

这个怎么样?在这种情况下,每个表单都有各自的功能。每个函数都调用onFormSubmit(e)

function myFunction() {
  ScriptApp.newTrigger('form1').forForm('FormID_1').onFormSubmit().create();
  ScriptApp.newTrigger('form2').forForm('FormID_2').onFormSubmit().create();
  ScriptApp.newTrigger('form3').forForm('FormID_3').onFormSubmit().create();
}

function form1(e){
  onFormSubmit(e)
}

function form2(e){
  onFormSubmit(e)
}

function form3(e){
  onFormSubmit(e)
}

function onFormSubmit(e){
  Logger.log(e);
}