我设置了一个触发器来提交Google表单以运行我的Google脚本之一:
dragInteraction.on(['modifyend', 'modifystart']
我的ScriptApp.newTrigger('onFormSubmitted')
.forForm(form).onFormSubmit().create();
函数被触发,但是提供给该函数的事件参数没有onFormSubmitted
属性。它具有the documentation says it should have的4个字段中的3个。
那我该如何获取触发此事件的表单的引用?
TMI
source
答案 0 :(得分:1)
如documentation for the event object中所述,如果脚本未绑定,则没有关联的source
属性。您可以通过使用触发器uid将表单ID存储在properties中来解决此问题。然后在表单提交代码中,使用触发器uid获取正确的表单。
function getFormId_(triggerId) {
const store = PropertiesService.getScriptProperties();
var formId = store.getProperty(triggerId);
if (!formId) console.warn("No form ID found for trigger ID '" + triggerId);
return formId;
}
function createSubmitTrigger_(form, functionName) {
const formId = form.getId();
const trigger = ScriptApp.newTrigger(functionName).forForm(form)
.onFormSubmit()
.create();
const store = PropertiesService.getScriptProperties();
store.setProperty(trigger.getUniqueId(), formId);
}
function myFormSubmit(e) {
const form = FormApp.openById(getFormId_(e.triggerUid));
...
}
这种方法(存储和检索)有可能可以向后应用,尽管这取决于触发器的先前配置方式-您无法通过编程(或其他方式)与其他触发器进行交互。
function storeAll() { // Run once (more is ok too, will just overwrite existing keys).
function cb(acc, t, i, allVals) { // callback for Array#reduce
acc[t.getUniqueId()] = t.getTriggerSourceId();
return acc;
}
const newProps = ScriptApp.getProjectTriggers().reduce(cb, {});
PropertiesService.getScriptProperties().setProperties(newProps);
}
参考