繁体   English   中英

使用 else if 语句时 Google 脚本功能中断。

[英]Google script function breaking when using else if statement.

出于某种原因,我的函数在添加了“else if”后就崩溃了。 当我只有 if 和 else 时,它​​运行良好。 谁能告诉我我做错了什么。 看起来它应该工作。 我不是最擅长的,所以请保持友善:)

这是打开函数。

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});

}

}

最后的大括号是红色的,我不知道为什么。 我尝试注释掉“if”语句的不同部分,但由于某种原因它不会让我做三个条件。 有任何想法吗? :/

该问题似乎与变量声明有关,您正在使用var并重新声明等等。

看起来是时候重构了,您正在做很多相同的事情 - 所以让我们对其进行参数化,以便更容易阅读和调试(并遵循DRY )。

您有一个非常常见的构建电子邮件的步骤序列,让我们将其设为一个函数:

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();
}

然后我们可以调用它并获取内容作为返回。

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
  });

}

首先,让我们习惯使用let关键字来限制变量的范围。 接下来我们将创建一个辅助方法来完成重复性工作,然后我们将使用switch操作而不是if / else if / else语法。 这应该使阅读、跟踪和调试更容易。

暂无
暂无

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

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