我正在尝试让我的独立脚本成为多个表单的公共触发器(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。
我怎么知道哪个表单触发了脚本?
答案 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);
}