简体   繁体   中英

Google script function breaking when using else if statement.

For some reason my function falls apart after adding an "else if". It worked fine when I had just if and 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. Any ideas? :/

The issue seems to be related to variable declaration, you're using var and re-declaring and such.

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 ).

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. 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. This should make it easier to read, follow and debug.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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