2016-05-27 15 views
1

なんらかの理由で、 "else if"を追加した後に私の機能が崩壊します。私はちょうどもしかしたらそれはうまくいった。誰でも私が間違っていることを教えてもらえますか?それはうまくいくはずです。私はこれで最善ではないので、素敵でください:)else if文を使用すると、Googleスクリプトの機能が停止します。

これはオープニング機能です。

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 = '[email protected]'; 

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 = '[email protected]'; 

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 = '[email protected]'; 

MailApp.sendEmail(recipient, subject, '',{htmlBody:mailMessage}); 

} 

} 

最後の中括弧は赤で、理由はわかりません。私は "if"ステートメントのさまざまな部分をコメントアウトしようとしましたが、なんらかの理由で3つの条件をさせません。何か案は? :/

+0

コードのこの部分でエラーが発生していないようですが、そのファイルにはこのコード以上のものがありますか?あなたのエディタに応じて、最後の赤いカールブラケットは、それをマークするだけで、カッコを検索するのに役立ちます – LordNeo

答えて

1

問題は変数宣言に関連しているようですが、あなたは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 = '[email protected]'; 

    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キーワードを使用して使用しましょう。次に、反復作業を行うヘルパーメソッドを作成し、次にif/else if/else構文の代わりにswitchオペレーションを使用します。これにより、読みやすく、フォローし、デバッグが容易になります。

関連する問題