我已经创建了一个可安装的脚本,可以动态创建表单以进行2到3方验证。由于这些表单是异步填写的,并且通常是批量填写,因此确定称为函数的表单非常重要。
首先创建响应表单,然后安装触发器。 CreateForm函数:
function createForm(title){
var form = FormApp.create(title)
//set parameters for new form
form.setCollectEmail(true);
form.setShowLinkToRespondAgain(false);
...
return form;
};
InstallTrigger函数:
function InstallTrigger(form, funct) {
var trigger= ScriptApp.newTrigger(funct)
.forForm(form)
.onFormSubmit()
.create()
return trigger.getUniqueId();
};
在初始表单提交期间,名为createMessage()的函数会根据响应创建一个电子邮件并运行上面的两个脚本。该电子邮件包含指向新创建的表单的链接以等待批准。到目前为止,一切正常。
新安装的触发器触发时出现问题。我还没有找到将触发源设置为变量的方法。我确信它与某个事件有关,但事件的文档并没有从我能看到的表格中走得太远。我读到它可以完成(Understanding Events)。我不太明白(e)在可安装脚本上的定义。它会在安装功能或其他地方吗?
答案 0 :(得分:1)
再次感谢Serge inas的演练。
(e)是在定义函数时定义的。在上面的示例中,InstallTrigger()函数向传递给它的表单添加了一个触发器。提交时执行的脚本也会传递给它。因此,触发器的安装来自预先安装的onSubmit()触发器。在提交功能中,它调用
var NewForm = FormApp.createForm();
InstallTrigger(NewForm, triggerFunction);
功能" triggerFunction"应该看起来像这样:
function triggerFunction (e) {
Logger.log(JSON.stringify(e))
GmailApp.sendEmail("yourEmailString","Debugging",Logger.getLog() //sends an email to you with the logfile.
var form = FormApp.openByUrl(e.response.getEditResponseUrl());
...
}
上述文章中提到的e.source说它适用于可安装的触发器,但是在枚举时,只有e.resource和e.authMode可用。幸运的是,e.response包含方法editUrl,可以与方法.openByUrl()一起使用并返回原始表单。