Ошибка: запрос недоступен - слияние электронной почты Google Sheet

Ниже мой пример сценария, я столкнулся с двумя проблемами

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

  1. Получение «Ошибка: запрос недоступен», когда я нажимаю кнопки подтверждения
  2. Не удалось отправить электронное письмо при отправке формы

Образец таблицы обновлен в приведенном выше сценарии обновлен

var REQUESTS_STATE_COLUMN = 32;
var STATE_APPROVERS_EMAILED = "EMAILED_Response Pending";
var STATE_APPROVED = "Approved";
var STATE_DENIED = "Rejected";


function sendEmail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getRange("A2:AH2");
  var data = dataRange.getValues();
  for (i in data) {
    var rowData = data[i];
    var email = rowData[2];
    var emailAddress = rowData[2];
    var submiterEmail = rowData[2];
    var ProjectName = rowData[3];
    var SrDesign = "Sr. Design Architect Services";
    var PerHourRate = rowData[6];    
    var NumberOfHours = rowData[7];
    var TotalRate = rowData[8];
    var Contact  = "Contact Centre Expert";
    var PerHourRate2 = rowData[10];
    var NumberOfHours2 = rowData[11];
    var NTotalRate2 = rowData[12];
    var NJrDesign = "Jr. Design Architect";
    var PerHourRate3 = rowData[14];
    var NumberOfHours3 = rowData[15];
    var TotalRate3 = rowData[16];
    var Outsourced = "Outsourced Technical Support Resource";
    var PerHourRate4 = rowData[18];
    var NumberOfHours4 = rowData[19];
    var TotalRate4 = rowData[20];
    var Supplier = "Supplier Management";
    var PerHourRate5 = rowData[22];
    var NumberOfHours5 = rowData[23];
    var TotalRate5 = rowData[24];
    var Project = "Project Management & Execution";
    var PerHourRate6 = rowData[26];
    var NumberOfHours6 = rowData[27];
    var TotalRate6 = rowData[28];
    var UserAccount = rowData[28];
    var GrandTotalRate = rowData[29];
    var row = e.range.getRow();
    var seq = rowData[1];
    var url = ScriptApp.getService().getUrl();
    var sheet = SpreadsheetApp.openById('1sS8_GQ3EMcsXCtj_j8LKg4jywKMu_8symTAFbIkGyh4').getSheetByName("Sheet1");
    var cellval = dataRange.getCell(i+1, 1).getValue();


  var options = '?approval=%APPROVE%&reply=%EMAIL%'
           .replace("%EMAIL%",rowData[2])         
 var approve = url+options.replace("%APPROVE%","Approved")+'&row='+row+'&cellval='+cellval; 
  var reject = url+options.replace("%APPROVE%","Rejected")+'&row='+row+'&cellval='+cellval;

 var subject = 'Technology Charges for '+ProjectName+''; 
var html = '<p style="font-family:Verdana; fontsize=9px">Hello Recipient,<br/><br/><br/><br/>Referance No: '+cellval+'<br/><a href='+ approve +'> <b>approve </b></a><a href='+ reject +'> <b>Reject</b></a><br/>'
MailApp.sendEmail({
    to: emailAddress,
    subject: subject,
    htmlBody: html,
  });

   //Add a state in the form spreadsheet with APPROVERS_EMAILED state  
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  sheet.getRange(lastRow, REQUESTS_STATE_COLUMN+1).setValue(STATE_APPROVERS_EMAILED);

}
}

function doGet(e){
  var answer = (e.parameter.approval === 'Approved') ? 'Yes -Approved!' : 'No-Rejected '; 
  var cellval = e.parameter.cellval;
  var email = e.parameter.reply;

  var sheet = SpreadsheetApp.openById("1sS8_GQ3EMcsXCtj_j8LKg4jywKMu_8symTAFbIkGyh4").getSheetByName("Sheet1");
  var data = sheet.getDataRange().getValues();
  var headers = data[0];
  var approvalCol = headers.indexOf("Approval") + 1;
  if (0 === approvalCol) throw new Error ("Must add Approval column.");

  // Record approval or rejection in spreadsheet
  var row = ArrayLib.indexOf(data, 0, cellval);
  if (row < 0) throw new Error ("Request not available.");  // Throw error if request was not found
  sheet.getRange(row+1, approvalCol).setValue(e.parameter.approval);

  // Display response to approver
  var app = UiApp.createApplication();
  app.add(app.createHTML('<h2>Thank you..! Your response has been recorded'+' saying: '+ answer + '</h2>'))
  return app
}


person KiKu    schedule 07.08.2017    source источник


Ответы (1)


Замените метод doGet приведенным ниже. Это должно устранить вашу первую ошибку.

function doGet(e) {
    var answer = (e.parameter.approval === 'Approved') ? 'Yes -Approved!' : 'No-Rejected ';
    var cellval = e.parameter.cellval;
    var email = e.parameter.reply;

    var sheet = SpreadsheetApp.openById("1sS8_GQ3EMcsXCtj_j8LKg4jywKMu_8symTAFbIkGyh4").getSheetByName("Sheet1");
    var data = sheet.getRange(2, 1, sheet.getLastRow() - 1).getValues();
    data = data.concat.apply([], data);
    var rowIndex = data.indexOf(cellval);

      if (rowIndex == -1) {
          throw new Error("Request not available.");
      } else {
          sheet.getRange(rowIndex + 2, 32).setValue(e.parameter.approval); //Assuming column 32 is approval column
      }
    var app = UiApp.createApplication();
    app.add(app.createHTML('<h2>Thank you..! Your response has been recorded' + ' saying: ' + answer + '</h2>'))
    return app
}
person Ritz    schedule 07.08.2017
comment
Нет удачи. Возникла та же ошибка. Ошибка: запрос недоступен. (строка 82, код файла, адрес электронной почты проекта) - person KiKu; 08.08.2017
comment
Да, я развернул новую версию, но по-прежнему сталкиваюсь с той же ошибкой ... Чего не хватает в моем скрипте? - person KiKu; 08.08.2017
comment
Попробуйте изменить сообщение об ошибке «Запрос недоступен». к чему-то еще и развернуть снова ... просто чтобы проверить, указывает ли он на новую версию или нет - person Ritz; 08.08.2017
comment
Да, при указании на новую версию появляется сообщение об ошибке ... Удачи ...? - person KiKu; 08.08.2017
comment
Да, можно распечатать значение ячейки с помощью логгеров [17-08-08 17: 16: 30: 879 IST] IMACD-00001 - person KiKu; 08.08.2017
comment
Привет, Ритц, я могу распечатать ответ об утверждении, если я определю var cellval = IMACD-00001; но когда определите celval с помощью var cellval = e.parameter.cellval.toString (); не работает - person KiKu; 08.08.2017
comment
Спасибо .. Ритц. Наконец, это сработало. У меня нет слов, чтобы оценить ваши усилия ... Продолжайте качаться ... Сэр ....! - person KiKu; 08.08.2017