【问题标题】:Simple google apps workflow Form->Spreadsheet->email Manager->Update spreadsheet & Requestor简单的谷歌应用程序工作流程表格->电子表格->电子邮件管理器->更新电子表格和请求者
【发布时间】:2015-08-10 22:01:31
【问题描述】:

我创建了一个写入电子表格的表单。 Apps 脚本运行 onSubmit 并查找新数据并向经理发送电子邮件 经理收到了带有“批准”按钮的电子邮件。

我无法将批准者的回复发布回电子表格。

当批准者选择按钮时,消息“找不到脚本功能:doPost”

var COLUMN_STATE = 4; //the number is the column # + 1  6 = column G (7th column)
var COLUMN_APROVE = 5
var STATE_APPROVED = "APPROVED";
var STATE_REJECTED = "REJECTED";
var STATE_MANAGER_EMAIL = "MANAGER_EMAIL";

var REQUEST_SPREADSHEET_ID = "0AkbHPyoRSG2DdDJpaWd1bGEzb19HY2pjVHdiQUhxNUE";

// Main tutorial function: For each row
//   - if it has recently been APPROVED or REJECTED by a manager, email the results to 

function onRequest() {
  // This is the Request Spreadsheet
  var ss = SpreadsheetApp.openById(REQUEST_SPREADSHEET_ID);
  var sheet = ss.getSheets()[0];

  // Fetch all the data from the Request Spreadsheet
  // getRowsData was reused from Reading Spreadsheet Data using JavaScript Objects 
  var data = getRowsData(sheet);

  // For every Request
  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    row.rowNumber = i + 2;
    if (!row.state) {
      // This is a new Request
      // Email the manager to request for approval.
      sendReportToManager(row);// Update the state of the Request
      sheet.getRange(row.rowNumber, COLUMN_STATE).setValue(row.state);
    } 
   }
  }


// Sends an email to a manager to request approval 
function sendReportToManager(row) {
  var subject = "ID#" + " " + row.rowNumber + " "+"Request for Time Off"
  var message ='<form action="xxxx" method="Post">' +
      "<P>" + "Request Id: " + row.rowNumber + "</P>"+ 
      "<P>" + row.username + " has requested your approval for Time Off." + "</P>"+ 
      '<input type="hidden" name="row" value="' + row.rowNumber +'" /> ' +
      '<input type="submit" value="Submit" />' +
      '</form>';
      //(Logger.log(row));
  MailApp.sendEmail(row.supervisorsEmail,subject, "", {htmlBody: message});
  row.state = STATE_MANAGER_EMAIL;
}

function doPost(e) {
  var template = HtmlService.createTemplateFromFile('Thanks.html');
  template.name = e.parameter.name;
  template.comment = e.parameter.comment;
  template.screenshot = e.parameter.screenshot;
  return template.evaluate();
  (Logger.log(e));
}

【问题讨论】:

    标签: google-apps-script workflow


    【解决方案1】:

    action="xxxx" 中的 URL 应该是“发布”对话框中提供的 URL。它将以/exec 结尾。您需要将publish your script 作为一个webapp,它会为您提供一个URL,并确保您的doPost() 方法在那里被调用。

    【讨论】:

    • 我已经发布了脚本并且在我的代码中有 URL。 “XXXX”只是 Https:// 的占位符 .....
    • 您是否创建了新版本# 并在添加您的 doPost 后重新发布您的脚本?我已经复制了你的脚本,添加了一个 html 模板并发布了 - 它对我有用,所以这可能是一个像这样的简单问题。
    • 加载帖子页面需要 19 秒。我可以做些什么来加快确认速度吗?
    • 我正在使用最小的Thanks.html 进行测试,大约需要 3 秒。这样就减少了 webapp 显示的基础成为瓶颈的机会。您需要查看后期操作的其余部分在做什么。将编辑器打开到 doPost,从 gmail 执行确认,然后查看执行记录并查看执行的每个操作的时间戳。那应该指出你的慢点。 (我的最小版本的总执行时间为 0.028 秒 - 所以 caja + 基础设施的开销约为 3 秒。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2023-03-09
    相关资源
    最近更新 更多