For loop 为什么doGet触发器函数不能访问请求中传递的参数?
我正试图编写一个请假系统,并从其他示例中复制代码,以达到我的目的 我遇到的最大问题是For loop 为什么doGet触发器函数不能访问请求中传递的参数?,for-loop,google-apps-script,web-applications,scope,For Loop,Google Apps Script,Web Applications,Scope,我正试图编写一个请假系统,并从其他示例中复制代码,以达到我的目的 我遇到的最大问题是doGet似乎无法读取参数。如果我将参数插入到代码中,它可以正常工作,但是当我尝试使用https链接传递变量时,它不起作用。有什么想法吗 我已将其发布为web应用程序,并允许我所在领域的任何人访问它 这是https链接:https://script.google.com/a/olemissalumni.com/macros/s/mywebappURL/exec?id=2_ABaOnue6Zr2ADAQPNUo-N
doGet
似乎无法读取参数。如果我将参数插入到代码中,它可以正常工作,但是当我尝试使用https链接传递变量时,它不起作用。有什么想法吗
我已将其发布为web应用程序,并允许我所在领域的任何人访问它
这是https链接:https://script.google.com/a/olemissalumni.com/macros/s/mywebappURL/exec?id=2_ABaOnue6Zr2ADAQPNUo-NdwmIgOL-J4Gk9H6ihNVkqZwLs2ubWh\u 0SAXYDLDPB\u 1r6AyCA&状态=已批准
这是doGet
触发功能
function doGet(e) {
//testing variables
// var responseID = '2_ABaOnue6Zr2ADAQPNUo-NdwmIgOL-J4Gk9H6ihNVkqZwLs2ubWh_0SaXYdllDpb_1r6AyCA';
// var status = 'Approved';
// Retrieve the parameter information for response ID and status
var responseID = e.parameters.id;
var status = e.parameters.status;
// Open the sheet which stores the responses
var ssID = 'spreadsheet id' // Replace with spreadsheet ID
var ssName = 'Form Responses' // Replace with sheet name
var sheet = SpreadsheetApp.openById(ssID).getSheetByName(ssName);
// Find the row where the ID in the URL equals the ID in the sheet and update the
// status to the parameter value
var data = sheet.getDataRange().getValues();
Logger.log('Email' + data[1][1]);
Logger.log('type' + data[1][9]);
//console.log(data);
for (var i = 0; i < data.length; i++) {
if (data[i][11] == responseID) {
sheet.getRange(i, 12, 1, 1).setValue(status);
var date = Utilities.formatDate(data[i][0], "GMT+0200", "EEE, MMM d, yyyy");
var type = data[i][10];
var email = data[i][1]; //get the actual email address of the person who filled out the e
sheet.getRange(i, 13, 1, 1).setValue(email);
}
}
if (status == 'Approved') {
var subject = 'Your e for time-off has been approved';
var message = 'Your e for time-off (' + type + ') on ' + date + ' has been approved.';
} else {
var subject = 'Your e for time-off has been denied';
var message = 'Your e for time-off (' + type + ') on ' + date + ' has been denied.';
}
// Send email to employee alerting them of the approval/denial of e
MailApp.sendEmail(email, subject, message);
// Show message to manager that the response has been updated.
var result = "The e has been '" + status + "'.";
return ContentService.createTextOutput(result);
}
函数doGet(e){
//测试变量
//var responseID='2_abaune6Zr2adaqpnuo-NdwmIgOL-J4Gk9H6ihNVkqZwLs2ubWh_0SaXYdllDpb_1r6AyCA';
//风险值状态=‘已批准’;
//检索响应ID和状态的参数信息
var responseID=e.parameters.id;
var状态=e.parameters.status;
//打开存储响应的工作表
var ssID='spreadsheet id'//替换为电子表格id
var ssName='Form Responses'//替换为工作表名称
var sheet=SpreadsheetApp.openById(ssID).getSheetByName(ssName);
//查找URL中的ID与工作表中的ID相等的行,并更新
//将状态设置为参数值
var data=sheet.getDataRange().getValues();
Logger.log('Email'+数据[1][1]);
Logger.log('type'+数据[1][9]);
//控制台日志(数据);
对于(变量i=0;i
您的Web应用程序正确访问参数,错误源不同
- 通常,在检索与数组相对的字符串时,您应该使用
而不是e.parameter
,在您的情况下,应用程序脚本将为您将数组转换为字符串,以便类型e.parameters
的比较将返回if(['Approved']='Approved')
true
- 但是,通常要小心将值与数组进行比较,并使用
而不是e.parameter
来访问单个值e.parameters
- 现在代码的真正问题是
循环的MailApp.sendmail(电子邮件、主题、消息)代码>在
之外
- 在
循环和内部for
语句中,覆盖if
(和电子邮件
和日期
)的值,并在退出循环后将电子邮件发送到上次保存的电子邮件键入
- 这将导致问题,如果
语句被多次执行data[i][11]==responseID
- 如果
数据[i][1]中没有有效的电子邮件地址
- 如果<代码>如果条件从未满足
- 在后一种情况下,变量
不存在,但脚本仍尝试发送电子邮件并显示错误email
- 将电子邮件发送功能移动到
语句中if
- 此外,在代码中加入日志以确保检索到正确的数据(在一行中定义
及更高版本:Logger.log('type'+data[1][9]);
var type=data[i][10];
- 确保在合并更改后将WebApp部署为新版本
函数doGet(e){
//测试变量
//var responseID='2_abaune6Zr2adaqpnuo-NdwmIgOL-J4Gk9H6ihNVkqZwLs2ubWh_0SaXYdllDpb_1r6AyCA';
//风险值状态=‘已批准’;
//检索响应ID和状态的参数信息
var responseID=e.parameter.id;
var状态=e.parameter.status;
//打开存储响应的工作表
var ssID='spreadsheet id'//替换为电子表格id
var ssName='Form Responses'//替换为工作表名称
var sheet=SpreadsheetApp.getActive().getActiveSheet()/.openById(ssID).getSheetByName(ssName);
//查找URL中的ID与工作表中的ID相等的行,并更新
//将状态设置为参数值
var data=sheet.getDataRange().getValues();
Logger.log('Email'+数据[1][1]);
Logger.log('type'+数据[1][9]);
//控制台日志(数据);
对于(变量i=0;i