2017-08-07 36 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