繁体   English   中英

Google 应用程序脚本:表单提交触发器无法正确执行脚本,脚本仅适用于手动执行

[英]Google apps script: Form Submit trigger doesn't execute script properly, and script only works with a manual execution

我的脚本应该发送由表单提交触发的电子邮件。 但是,每次有新的表单提交时,都会使用之前提交的而不是最近的提交来发送电子邮件。

当我手动执行它时(手动单击编辑器中的“运行”),脚本会执行它应该执行的操作:仅使用新的表单提交信息(而不是之前的提交信息)发送 email。

关于做什么的任何想法?

 function checkPurpose() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName("Mostrecent").getRange('C3'); var purpose = sheet.getValue(); var lock = LockService.getScriptLock(); lock.waitLock(2000); Utilities.sleep(2000); lock.releaseLock(); if (purpose === "Agent Information Change"){ var agentSheet = ss.getSheetByName("Agentinfo"); var a = agentSheet.getLastRow(); for (var b = 2; b < a + 1; b++ ) { var emailAddress = agentSheet.getRange(b,1).getValue(); var subject = agentSheet.getRange(b,2).getValue(); var message = agentSheet.getRange(b,3).getValue(); MailApp.sendEmail(emailAddress, subject, message); } } else if (purpose === "Manager Information Change"){ var managerSheet = ss.getSheetByName("Managerinfo"); var x = managerSheet.getLastRow(); for (var y = 2; y < x + 1; y++) { var emailAddress2 = managerSheet.getRange(y,1).getValue(); var subject2 = managerSheet.getRange(y,2).getValue(); var message2 = managerSheet.getRange(y,3).getValue(); MailApp.sendEmail(emailAddress2, subject2, message2); } } else if (purpose === "Agent Onboard"){ var onboardSheet = ss.getSheetByName("Agentonboard"); var n = onboardSheet.getLastRow(); for (var i = 2; i < n + 1; i++ ) { var emailAddress3 = onboardSheet.getRange(i,4).getValue(); var subject3 = onboardSheet.getRange(i,5).getValue(); var message3 = onboardSheet.getRange(i,6).getValue(); MailApp.sendEmail(emailAddress3, subject3, message3); } } }

我发现出了什么问题。 我在另一个脚本中有另一个 function(自动排序),它会根据最近的提交日期自动对 Google 表格上的表单响应进行排序。 问题的发生是因为我使用的 email function (checkPurpose) 在对表单响应进行排序之前仍然执行得太快。 因此,我让锁function的时间更长一些,这样排序function就可以把新的值放在堆顶,以便及时读取。

代替:

 lock.waitLock(2000); Utilities.sleep(2000); lock.releaseLock()

我用了:

 lock.waitLock(10000); Utilities.sleep(10000); lock.releaseLock()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM