2017-08-07 85 views
1

下面是我的示例脚本,我面临两个问题错误:请求不服务现有谷歌页邮件合并

我建立一个工作流程 - 用户使用Web应用程序提交数据,存储在表中的数据,并将其转发电子邮件审批和核准输入可以得到更新的表

  1. 获得“错误:请求不可用”,当我点击按钮,批准
  2. 无法触发形式电子邮件提交

Sample Sheet 的deatiled脚本在上述片更新

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 
 
}

回答

0

与替换您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 
} 
+0

没有运气面对相同的错误错误:请求不可用。 (第82行,文件“代码”,项目“电子邮件”) – KiKu

+0

您需要部署一个新版本,因为它指向执行链接 – Ritz

+0

是的,我部署了新版本但仍面临同样的错误... 缺少什么在我的脚本中。? – KiKu