我有一个提交数据的表单,一旦新的表单数据被附加到电子表格,就需要进行测试和操作。因此,我希望使用“On form submit”触发器来处理最新的条目(新的最后一行)。
然而,在我深入了解该触发器的脚本之前,我很想知道“On form submit”触发器是否可靠。例如,它会立即触发吗?如果2(或更多)形式提交同时(或几乎同时)发生会发生什么?脚本是否会附加到该触发器进程,每个表单提交单独和顺序? 最后,我主要担心的是,如果从表单提交中追加新记录时,如果前一个脚本仍在运行,则会跳过测试的附加记录。
另一种选择是“时间驱动”触发器,但这需要测试所有数据,然后操纵符合特定条件的记录。我并不反对使用这种类型的触发器,但它需要更复杂的脚本,以及不同的流程方法。
有没有人有与他们可以与我分享的“On form submit”触发器相关的成功/恐怖故事?
答案 0 :(得分:1)
请参阅:Class Lock
互斥锁的表示。此类允许脚本确保一次只有一个脚本实例执行给定的代码段。这对于回调和触发器特别有用,其中用户操作可能会导致对共享资源的更改,并且您希望确保不是冲突。以下示例显示如何在表单提交处理程序中使用锁。
// Generates a unique ticket number for every form submission.
function onFormSubmit(e) {
var targetCell = e.range.offset(0, e.range.getNumColumns(), 1, 1);
// Get a public lock on this script, because we're about to modify a shared resource.
var lock = LockService.getPublicLock();
// Wait for up to 30 seconds for other processes to finish.
lock.waitLock(30000);
var ticketNumber = Number(ScriptProperties.getProperty('lastTicketNumber')) + 1;
ScriptProperties.setProperty('lastTicketNumber', ticketNumber);
// Release the lock so that other processes can continue.
lock.releaseLock();
targetCell.setValue(ticketNumber);
}
如果没有LockService,如果两个用户几乎同时提交表单,则票号最终可能会相同,因为lastTicketNumber属性在从ScriptProperties读取之后但在写回新值之前可能会更改。 / p>
以上内容是从新的和改进的文档中复制的。