Как упомянуто в документации для объекта события , если сценарий не привязан, то связанное свойство source
отсутствует.Вы можете преодолеть это, сохранив идентификатор формы в 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);
}
Ссылки