Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For loop 为什么doGet触发器函数不能访问请求中传递的参数?_For Loop_Google Apps Script_Web Applications_Scope - Fatal编程技术网

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