首页 > 解决方案 > 如何在 doGet 函数中调用函数?

问题描述

我想在函数 doGet(request) 启动后运行函数 afterFormSubmit(e) 。

我尝试在 doGet(request) 中调用 afterFormSubmit 函数,但它不会运行。

这是否可以在 doGet 函数中实际运行 afterFormSubmit ?

下面是代码示例。

谢谢。

var DONE = "DONE";
var Approve = "Approve";
var Reject = "Reject";
var EMAIL_SENT = "EMAIL_SENT";
var FOR_RUN = "FOR_RUN";
var COMPLETE = "COMPLETE";

function afterFormSubmit(e) {
  const entryRow = e.range.getRow();
  const ss =
    SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");

  var su = ss.getRange(entryRow, 14).getValue();
  var ku = ss.getRange(entryRow, 14).getValue();
  var check = ss.getRange(entryRow, 9).getValue();
  var checke = ss.getRange(entryRow, 16).getValue();
  var checkv = ss.getRange(entryRow, 17).getValue();

  if (check == "" && checke != EMAIL_SENT) {
    assignEditUrls();
    sendMail_Verification(e);
  }

  if (check == Approve && checkv != EMAIL_SENT) {
    const info = e.namedValues;
    const pdfFile = createPDF(info, e);

    ss.getRange(entryRow, 14).setValue(pdfFile.getUrl());
    ss.getRange(entryRow, 15).setValue(pdfFile.getName());

    Last_sendMail(e);
  }
  sendMail_Rejection(e);
}

function doGet(request) {
  Logger.log(request);

  var sheet = SpreadsheetApp.openById(request.parameters.ssId).getActiveSheet();
  var data = sheet.getDataRange().getValues();

  var user = request.parameters.id;
  var status = request.parameters.status;
  var check = request.parameters.check;

  for (var i = 1; i < data.length; i++) {
    var check = sheet.getRange(i + 1, 12, 1, 1).getValue();
    if (data[i][0] == user[0] && check != DONE) {
      sheet.getRange(i + 1, 9, 1, 1).setValue(status[0]);

      var checkcc = sheet.getRange(i + 1, 9, 1, 1).getValue();
      if (data[i][0] == user[0] && check != DONE) {
        var date = Utilities.formatDate(
          new Date(),
          "GMT+08:00",
          "MM/dd/yyyy HH:mm:ss"
        );
        sheet.getRange(i + 1, 19, 1, 1).setValue("");
        sheet.getRange(i + 1, 13, 1, 1).setValue(date);
        sheet.getRange(i + 1, 12, 1, 1).setValue(DONE);

        if (checkcc == Approve) {
          var result = "You have successfully Approved " + user + " request.";
          return ContentService.createTextOutput(result);
        } else if (checkcc == Reject) {
          var resultvc = "You have successfully Rejected " + user + " request.";
          return ContentService.createTextOutput(resultvc);
        }
      }
    }
  }
}

遵循的一般流程概述:

标签: google-apps-scriptgoogle-sheets

解决方案


据我了解,您的流程如下:

  1. 用户填写表单,这有一个onSubmit触发器。
  2. 此表单信息用于填充电子表格并向验证者发送电子邮件。
  3. 您希望验证者能够单击按钮来批准或拒绝。
  4. 最后,应向用户发送一封电子邮件,通知该决定。

您似乎想要做的是使该afterFormSubmit功能有两个目的。

  • 接收表格
  • doGet从电子邮件触发接收批准或拒绝。

现在,虽然这是可能的,但我认为没有必要,它似乎让事情变得更加复杂。

我建议这些功能执行以下操作:

  1. afterFormSubmit- 接收表格信息,填写电子表格并向验证者发送电子邮件。
  2. doGet- 接收批准,填写电子表格并向最终用户发送批准电子邮件。

推荐阅读