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

Я пытаюсь создать сценарий, который просматривает электронную таблицу данных учащихся по одной строке за раз и отправляет электронное письмо учащемуся и его родителю, если оценка учащегося меньше 60. Столбцы в электронной таблице: Идентификатор учащегося, Имя учащегося, Адрес электронной почты учащегося, адрес электронной почты родителей, оценка. В таблице 30 строк - я предполагаю использовать до 25 из них, а остальные оставить пустыми. Некоторые поля родительского адреса электронной почты останутся пустыми, это учтено в коде. У всех студентов есть адреса электронной почты.

На самом деле сценарий работает нормально, за исключением того, что он не всегда выполняет все необходимые итерации. Он останавливается каждый раз после разного количества итераций - иногда он делает их все, но обычно это не так. Когда он останавливается, не происходит никаких ошибок или чего-либо еще, он просто перестает выскакивать окнами сообщений или отправлять электронные письма студентам.

Есть идеи, почему он перестает работать до выполнения всех строк?

Вот код:

function onOpen(){
  loadMenu();
}

function loadMenu() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.addMenu("F-Watch Emailer", [{"name":"Send Emails", "functionName":"sendEmails"}]);
}

function sendEmails() {
  var ss  = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange("B2:E30");
  var data = range.getValues();
  //Browser.msgBox(data);

  for (var i = 0; i < 30; i++){
    //set variables
    var row = data[i];
    var emailAddress = row[1];
    var parentEmailAddress = row[2];
    var grade = row[3];

    Browser.msgBox("email = "+emailAddress);

    //email student if necessary, return true or false
    if(emailAddress !== ""){
      var emailSent = sendStudentEmail(emailAddress, grade);     
    }
    else{
      //Browser.msgBox("Student Email Field " + (i + 1) + " is Empty");
    }

    //email parent if necessary, return true or false
    if(parentEmailAddress !== ""){
      var parentEmailSent = sendParentEmail(parentEmailAddress, grade);     
    }
    else{
      //Browser.msgBox("Parent Email Field " + (i + 1) + " is Empty");
    }
  }
}

function sendStudentEmail(emailAddress, grade){
  if(grade < 60){
    var subject = "Weekly F-Watch Email for Mr. Lipson's Class";
    var body = "Attention Students: If you are receiving this automated email, your term grade is currently below 60. Please check iPass and speak to me to make up any late assignments (please refer to my Late Work Policy). If you have any questions, feel free to email me.Have a good day, - Mr. L Note: This is the first in a weekly series of automated emails, and it's in beta. Please forgive any formatting issues. Also, beginning next week, this email will be sent to parents/guardians as well.";
    //MailApp.sendEmail(emailAddress, subject, body);
    //Browser.msgBox("Email sent to " + emailAddress);
    return true;
  }
  else{
    //Browser.msgBox("Email not sent to " + emailAddress);
    return false;
  }
}

function sendParentEmail(parentEmailAddress, grade){
  if(grade < 60){
    var subject = "Weekly F-Watch Email for Mr. Lipson's Class";
    var body = "Parent Email Text";
    //MailApp.sendEmail(emailAddress, subject, body);
    //Browser.msgBox("Email sent to " + parentEmailAddress);
    return true;
  }
  else{
    //Browser.msgBox("Email not sent to " + emailAddress);
    return false;
  }
}

person rockitude    schedule 19.02.2012    source источник


Ответы (2)


Попробуйте использовать отладчик и пройти цикл for, который завершился ошибкой.

Вы можете установить остановку в любой строке кода, дважды щелкнув рядом с номером строки в редакторе скриптов. Отладчик запускается щелчком по значку в виде паука.

person user728291    schedule 25.02.2012

Есть много недокументированных ограничений, иногда Utilities.Sleep(ms) может помочь

person Evgeniy    schedule 02.03.2012