gpt4 book ai didi

google-apps-script - 谷歌应用程序中withsuccesshandler的理解和应用

转载 作者:行者123 更新时间:2023-12-03 03:59:49 27 4
gpt4 key购买 nike

背景

我遇到了这个问题,但我不太明白如何解决。所需的行为是访问 Google 电子表格并从模板发送 HTML 电子邮件,该模板包含三个 scriptlet,用于根据电子表格中的数据链接到不同的表单。我对评估模板的调用接近脚本的结尾。

我正在使用两行测试数据。当我阅读执行日志时,一切正常,但奇怪的是,有时会发送两封电子邮件,有时会发送一封电子邮件(当我期待两封电子邮件时),但它并不总是我期望的电子邮件。但每次的结果并不相同。我认为这是因为当调用 HtmlService.createTemplateFromFile('file').evaluate() 时,它在服务器上进行计算,但我的代码只是继续运行并在我得到响应之前完成。这只是猜测。我读过谷歌的HtmlService Page on communicating with serversreferences on google.script.run

代码和努力

function sendForms () {
var masterSS = SpreadsheetApp.openById("id");
var masterSheet = masterSS.getSheets()[0];
var masterRange = masterSheet.getDataRange();
var masterData = masterRange.getValues();
var startRow = 1;
for (var i = 1; i < masterData.length; i++) {
var row = masterData[i];
var emailAddress = row[2];
var routineContact = row[5];
var requireDrive = row[6];
var compCheck = row[7];
var affidavit = " ";
if (routineContact != "SENT" && routineContact != "RECEIVED" && routineContact != "No") {
var affidavit = "<li>Form: <a href='https://docs.google.com/forms/d/formid/viewform?usp=send_form'>Affidavit of Compliance with PA Background Checks</a> Verification Code: 169827C9</li>";
masterSheet.getRange(startRow + i, 6).setValue("SENT");
}
var motorVehicleUsage = " ";
if (requireDrive != "SENT" && requireDrive != "RECEIVED" && requireDrive != "No") {
var motorVehicleUsage = "<li>Form: <a href='https://docs.google.com/forms/d/formlink/viewform?usp=send_form'>Motor Vehicle Agreement</a> Verification Code: 13444C9</li>";
masterSheet.getRange(startRow + i, 7).setValue("SENT");
}
var workersCompForm = " ";
if (compCheck != "SENT" && compCheck != "RECEIVED") {
var workersCompForm = "<li>Form: <a href='https://docs.google.com/forms/d/formid/viewform?usp=send_form'>Workers Compensation</a> Verification Code: 13589C9</li>";
masterSheet.getRange(startRow + i, 8).setValue("SENT");
}
if (motorVehicleUsage != " " && workersCompForm != " " && affidavit != " ") {
var sendingDate = new Date();
var formatSendingDate = Utilities.formatDate(sendingDate, "GMT-05:00", 'DD');
masterSheet.getRange(startRow + i, 10).setValue(formatSendingDate);
var subject = "Additional Onboarding Forms";
var template = HtmlService.createTemplateFromFile('Initial Form Email Message');
template.workersCompForm = workersCompForm;
template.motorVehicleUsage = motorVehicleUsage;
template.affidavit = affidavit;
var html = template.evaluate().getContent();
MailApp.sendEmail(emailAddress, subject, "Requires HTML", {htmlBody:html});
}
}
}

这是我的 HTML 文件中包含 scriptlet 的部分。

<p>We would like you to complete the following additional...</p>
<ul>
<?!= workersCompForm ?><?!= motorVehicleUsage ?><?!= affidavit ?>
</ul>

我最初在 var html 上方有 if 语句,并且有 var html = template.evaluate().getContent();位于底部,就在 MailApp 上方。那是我得到不一致结果的时候。

google.script.run.html() 根本不起作用,因为即使在阅读文档后我也不知道如何使用它。

问题

我很确定我在这个脚本中的某个地方需要一个 withSuccessHandler ,但我只是无法概念化将它放在哪里或如何使其工作。我尝试创建 var html = function();但没能成功。我应该使用 withSuccessHandler 吗?我应该把它放在哪里?我只是无法全神贯注于与服务器的通信和计时。

更新

将属于 Apps 脚本项目一部分的 HTML 文件添加到此问题,将代码文件更改为我的原始代码,而没有根据 Sandy 的建议进行 google.script.run 调用,即它不在 .gs 文件中运行。尽管发送的邮件看似随机,但我仍然遇到同样的问题。当我在电子表格上设置发送条件以发送两个循环的电子邮件时,有时是第一个 for 循环发送电子邮件,有时是第二个 for 循环发送电子邮件。

我将 var template = HtmlService.createTemplateFromFile('Initial Form Email Message'); 替换为 var template = HtmlService.createHtmlOutputFromFile('Initial Form Email Message'); 没有运气,所以我尝试了 var template = HtmlService.createHtmlOutputFromFile('Initial Form Email Message').getContent(); 并且通过这些尝试无法发送任何电子邮件。但电子表格始终会更新为正确的值。

最佳答案

google.script.run就是所谓的“客户端 API”。 “客户端”是指它在用户计算机上的浏览器中运行。 google.script.run不适合从 .gs 使用服务器代码。所以,你不会得到 google.script.run使用 .gs 的脚本文件进行工作扩大。 google.script.run将在 HTML 的事件属性中运行,例如 onclick()或在 <script>与其他 JavaScript 一起标记。

可以在服务器代码中创建 HTML,并将其发送到某个地方。您可以使用代码中的文字字符串来执行此操作,也可以使用 .html服务器评估的文件,然后转换为内容。但这还没有通过 google.script.run 完成。 ,这是通过 HTML Service 完成的。

var theHtml = HtmlService.createHtmlOutputFromFile(filename).getContent();

关于google-apps-script - 谷歌应用程序中withsuccesshandler的理解和应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34337012/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com