google-apps-script - 如何在 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 表单
- 一封电子邮件发送给验证者,其中包含使用 e.range 提交的数据
- 在发给验证者的电子邮件中,批准或拒绝请求。这就是 doGet 的用武之地。
- 一旦验证者批准,我想向受访者发送一封电子邮件。
解决方案
据我了解,您的流程如下:
- 用户填写表单,这有一个
onSubmit
触发器。 - 此表单信息用于填充电子表格并向验证者发送电子邮件。
- 您希望验证者能够单击按钮来批准或拒绝。
- 最后,应向用户发送一封电子邮件,通知该决定。
您似乎想要做的是使该afterFormSubmit
功能有两个目的。
- 接收表格
doGet
从电子邮件触发接收批准或拒绝。
现在,虽然这是可能的,但我认为没有必要,它似乎让事情变得更加复杂。
我建议这些功能执行以下操作:
afterFormSubmit
- 接收表格信息,填写电子表格并向验证者发送电子邮件。doGet
- 接收批准,填写电子表格并向最终用户发送批准电子邮件。
推荐阅读
- javascript - 无法将 CodeSandbox iframe 嵌入 Docusaurus 文档
- python - non_field_errors PUT 请求出现“未提供数据”错误
- azure-synapse - 启用 Azure Synapse DEP 的工作区出错
- sql-server - 从 Angular 到 Net Core HTTP 404 发布错误
- javascript - React ReCharts Y 轴刻度不等间距
- vba - 将变量从一种形式传递到另一种形式
- mysql - 可以在 mysql 中将小视频(少于 5 秒)存储为 blob 吗?
- flutter - 如何降低 DropdownMenuItem 的高度?
- android-studio - 在 Android Studio 北极狐 M1 中通过 Force Touch 进行“前往声明”
- symfony - Symfony 中带有 esi 的 Cloudflare 缓存