[英]Google script function breaking when using else if statement.
For some reason my function falls apart after adding an "else if".出于某种原因,我的函数在添加了“else if”后就崩溃了。 It worked fine when I had just if and else.当我只有 if 和 else 时,它运行良好。 Can anyone tell me what I am doing wrong.谁能告诉我我做错了什么。 It seems like it should be working.看起来它应该工作。 I'm not the best at this so please be nice :)我不是最擅长的,所以请保持友善:)
This is the opening function.这是打开函数。
function SendGoogleForm(e) {
var formData = e.values;
var requestor = formData[1];
var newHire = formData[2];
var globalID = formData[3];
var startDate = Utilities.formatDate(new Date(formData[4]), Session.getScriptTimeZone(), "MMM d, yyyy");
var newhireRole = formData[5];
var newhireStatus = formData[6];
if (newhireRole == "Food Care") {
var mailBody = HtmlService.createTemplateFromFile('foodCare');
mailBody.requestor = requestor;
mailBody.newHire = newHire;
mailBody.globalId = globalID;
mailBody.startDate = startDate;
mailBody.newHireRole = newhireRole;
mailBody.newHireStatus = newhireStatus;
var mailMessage = mailBody.evaluate().getContent();
var subject = "NACCC Food Care Pre-Approved On-boarding Request for " + newHire;
var recipient = 'juan.miranda@testr.com';
MailApp.sendEmail(recipient, subject, '',{htmlBody:mailMessage});
}else if (newhireRole == "Product Care"){
var mailBody = HtmlService.createTemplateFromFile('productCare');
mailBody.requestor = requestor;
mailBody.newHire = newHire;
mailBody.globalId = globalID;
mailBody.startDate = startDate;
mailBody.newHireRole = newhireRole;
mailBody.newHireStatus = newhireStatus;
var mailMessage = mailBody.evaluate().getContent();
var subject = "NACCC Product Care Pre-Approved On-boarding Request for " + newHire;
var recipient = 'juan.miranda@testr.com';
MailApp.sendEmail(recipient, subject, '',{htmlBody:mailMessage});
} else {
var mailBody = HtmlService.createTemplateFromFile('specialtyMaterials');
mailBody.requestor = requestor;
mailBody.newHire = newHire;
mailBody.globalId = globalID;
mailBody.startDate = startDate;
mailBody.newHireRole = newhireRole;
mailBody.newHireStatus = newhireStatus;
var mailMessage = mailBody.evaluate().getContent();
var subject = "NACCC Specialty Materials Pre-Approved On-boarding Request for " + newHire;
var recipient = 'juan.miranda@testr.com';
MailApp.sendEmail(recipient, subject, '',{htmlBody:mailMessage});
}
}
The Final curly bracket is in red and I have no idea why.最后的大括号是红色的,我不知道为什么。 I tried commenting out different parts of the "if" statement but for some reason it wont let me do three conditions.我尝试注释掉“if”语句的不同部分,但由于某种原因它不会让我做三个条件。 Any ideas?有任何想法吗? :/ :/
The issue seems to be related to variable declaration, you're using var
and re-declaring and such.该问题似乎与变量声明有关,您正在使用var
并重新声明等等。
Looks like it is time to refactor, you're doing a lot of the same thing - so let's parameterize this so that it's easier to read and debug (and follow DRY ).看起来是时候重构了,您正在做很多相同的事情 - 所以让我们对其进行参数化,以便更容易阅读和调试(并遵循DRY )。
You have a very common sequence of steps that construct an email, let's make this a function:您有一个非常常见的构建电子邮件的步骤序列,让我们将其设为一个函数:
function constructEmail(file, requestor, newHire, globalId, startDate, newHireRole, newHireStatus) {
let mailBody = HtmlService.createTemplateFromFile(file);
body.requestor = requestor;
body.newHire = newHire;
body.globalId = globalId;
body.startDate = startDate;
body.newHireRole = newHireRole;
body.newHireStatus = newHireStatus;
return body.evaluate().getContent();
}
Then we can call into it and get the content as a return.然后我们可以调用它并获取内容作为返回。
function SendGoogleForm(e) {
let formData = e.values;
let requestor = formData[1];
let newHire = formData[2];
let globalId = formData[3];
let startDate = Utilities.formatDate(new Date(formData[4]), Session.getScriptTimeZone(), "MMM d, yyyy");
let newHireRole = formData[5];
let newHireStatus = formData[6];
let mailMessage = null;
let subject = "NACCC Food Care Pre-Approved On-boarding Request for " + newHire
let recipient = 'juan.miranda@testr.com';
switch (newHireRole) {
case "Food Care":
mailMessage =
constructEmail('foodCare',
mailBody,
requestor,
newHire,
globalId,
startDate,
newHireRole,
newHireStatus);
break;
case "Product Care":
mailMessage =
constructEmail('specialtyMaterials',
mailBody,
requestor,
newHire,
globalId,
startDate,
newHireRole,
newHireStatus);
break;
default:
mailMessage =
constructEmail('productCare',
mailBody,
requestor,
newHire,
globalId,
startDate,
newHireRole,
newHireStatus);
break;
}
MailApp.sendEmail(recipient, subject, '', {
htmlBody: mailMessage
});
}
First of all, let's get used to using the let
keyword to limit the scope of our variables.首先,让我们习惯使用let
关键字来限制变量的范围。 Next we'll create a helper method to do the repetitive work, then we will use the switch
operation instead of the if / else if / else
syntax.接下来我们将创建一个辅助方法来完成重复性工作,然后我们将使用switch
操作而不是if / else if / else
语法。 This should make it easier to read, follow and debug.这应该使阅读、跟踪和调试更容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.