Как вычислить переменную в скрипте электронной таблицы Google, а затем вернуть в электронном письме с подтверждением

Я немного новичок в этом, поэтому заранее спасибо за любую помощь! Я получил письмо с подтверждением, работающее на основе триггера / события отправки формы Google в электронную таблицу. Однако я хочу, чтобы сценарий извлекал два поля из представления пользователя, а затем вычислял поле, которое будет включено в электронное письмо с подтверждением. Как только я добавил код для расчета поля (cost1), электронное письмо с подтверждением перестало отправляться. Я проверил стенограмму выполнения, и она работала намного быстрее, и сказал, что она выполнена успешно, но электронное письмо не отправлено ... Что-то не так с моим кодом или я прошу скрипт сделать слишком много?

Сценарий:

function EmailFormConfirmation() {


  var sheetName = "Form Responses"; 
  var columnNumber = 3;
  var subject = "Summer School Registration Confirmation";
  var gn = 2;
  var sfn = 4;
  var sln = 5; 
  var s1 = 13;
  var s2 = 14;


  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var dataSheet = ss.getSheetByName(sheetName);
  var numRows = dataSheet.getLastRow();
  var email = dataSheet.getRange(numRows,columnNumber).getValue();
  var guardianName = dataSheet.getRange(numRows,gn).getValue();
  var studentFirst = dataSheet.getRange(numRows,sfn).getValue();
  var studentLast = dataSheet.getRange(numRows,sln).getValue();
  var session1 = dataSheet.getRange(numRows,s1).getValue();
  var session2 = dataSheet.getRange(numRows,s2).getValue();
  var emailPattern = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+$/; //email reg expression
  var validEmailAddress = emailPattern.test(email); 
  var cost1 = 0
    if(session1 === "Driver's Education Classroom & Behind the Wheel")
    {
      var cost1 = cost1+400
    }
    else
    {
      var cost1 = cost1+180
    }

    if(session2 > 0)
    {
      var cost1 = cost1+180
      return(cost1)
    }
    else
    {
      return(cost1)
    };
  var body = "Dear" + " " + guardianName + "," +
  "\n\nThank you for submitting summer school registration for" + " " + studentFirst + " " + studentLast + "." +
  "\n\nYou have selected the following for Session 1:" + " " + session1 +
  "\n\nYou have selected the following for Session 2:" + " " + session2 +
  "\n\nIf any changes need to be made, please contact the office." +
  "\n\nYour total fees due for summer school are:" + " " + "$" + cost1 +  
  "\n\n\nSummer School Registrar";

  if (validEmailAddress) {

      MailApp.sendEmail(email, subject,body); 
    }

  }  

person Liss J    schedule 16.01.2014    source источник


Ответы (1)


return всегда запускается в последнюю очередь в функциях JS и замыкает вашу функцию перед запуском MailApp.sendEmail. Кроме того, переменные в JS имеют область видимости. Таким образом, вам не нужно объявлять var внутри ваших if блоков.

Ниже я использовал тернарный оператор [test ? if true : else] и установил длинную строку в переменную.

Ваш расчет стоимости должен выглядеть примерно так:

var dcebw = "Driver's Education Classroom & Behind the Wheel";

var cost1 = session1 === dcebw ? 400 : 180;

cost1 += session2 > 0 ? 180 : 0;
person fooby    schedule 16.01.2014
comment
Это красота! Еще один вопрос: он отправил электронное письмо и сообщает об общей стоимости 180 долларов вместо 360 долларов, если сделаны два выбора, поэтому я предполагаю, что мой сеанс2 ›0 не работает вместо не равно нулю. Есть ли способ исправить это? Еще раз огромное спасибо за вашу помощь! - person Liss J; 17.01.2014
comment
Судя по вашему вопросу, я предполагаю, что session2 не число. Если второй сеанс не является числом, тогда session2 > 0 всегда будет ложным. Если вы просто хотите проверить, что session2 правдивый, вы можете использовать cost1 += session2 ? 180 : 0; - person fooby; 17.01.2014