【问题标题】:Variables available for doGet() function? GAS Email Approval WebAppdoGet() 函数可用的变量? GAS 电子邮件审批 WebApp
【发布时间】:2015-03-02 21:11:28
【问题描述】:

我创建了一个 WebApp 来自动化信用卡费用的审批流程。这很有效,但我想添加更多技巧。我希望返回/批准电子邮件包含为请求电子邮件收集的信息,但我似乎无法访问在 doGet 函数的发送邮件函数中创建的变量。我该怎么做?

脚本/WebApp:

function CCDEmail(e) {
  var Explain = e.values[1];
  var Cost = e.values[2];  
  var Items = e.values[3];
  var theDate = e.values[4];
  var emailfrom = e.values[5];
  var emailto = e.values[6];

  var url = 'https://script.google.com/macros/s/AKfycbxnhUpURschXwP_rVFSUv673DtHcfuAvNkMTYHpBHU/dev';

  var approve = url + '?approval=true'+'&reply='+emailfrom; 
  var reject = url + '?approval=false'+'&reply='+emailfrom;

  var html = "<body>"+
             "<h2>Please review Credit Card Expenses</h2><br />"+
             "Month:"+ theDate+ "<br />"+
             "Total Cost:"+ Cost + "<br />" + "List of items:"+ Items+ "<br />"+
             "Explanation of Other purchases:"+ Explain+ "<br />"+
             "<br />"+
             "<a href="+ approve +">Approve</a><br />"+
             "<a href="+ reject +">Reject</a><br />"+
             "</body>";

  MailApp.sendEmail(emailto, "Credit Card Declaration " +theDate, "What no html?", {htmlBody: html});  
}



function doGet(e){
  //add date and other variables from above
  var answer = (e.parameter.approval == 'true') ? 'Approved' : 'Please see me!'; 

  MailApp.sendEmail(e.parameter.reply, "Credit Card Declaration", "Your manager said: "+ answer);   
  //add send email to accounts

  var app = UiApp.createApplication();
  app.add(app.createHTML('<h2>An email was sent to '+ e.parameter.reply + ' saying: '+ answer + '</h2>'))
  return app
}

提前致谢,

提姆

【问题讨论】:

标签: google-apps-script


【解决方案1】:

第一个问题是,“您是从doGet() 调用CCDEmail(e),还是稍后独立运行CCDEmail(e) 函数。

如果CCDEmail(e) 函数独立于doGet() 被调用,那么您需要一种将值存储在doGet() 函数之外的方法。有三种方法可以做到这一点,1)缓存 2)全局变量。 3) 属性

缓存是临时的,所以根据打开应用程序和运行CCDEmail(e)函数之间的时间间隔,你可能不想使用缓存。

有些人强烈反对使用全局变量,所以根据您的意见,您可能想要也可能不想使用它们。

属性很好用,但如果你有大量数据,你可能会达到极限。

可能首先使用“属性”选项。

doGet() 中声明并设置一些变量,然后在CCDemail() 函数中检索值:

function doGet(e){
  //add date and other variables from above
  var answer = (e.parameter.approval == 'true') ? 'Approved' : 'Please see me!'; 

  var Explain = e.values[1];
  var Cost = e.values[2];  
  var Items = e.values[3];
  var theDate = e.values[4];
  var emailfrom = e.values[5];
  var emailto = e.values[6];

  // Set multiple script properties in one call.
  var scriptProperties = PropertiesService.getScriptProperties();
  scriptProperties.setProperties({
    'argExplain': Explain,
    'argCost': Cost,
    'argItems': Items'
  });



  MailApp.sendEmail(e.parameter.reply, "Credit Card Declaration", "Your manager said: "+ answer);   
  //add send email to accounts

  var app = UiApp.createApplication();
  app.add(app.createHTML('<h2>An email was sent to '+ e.parameter.reply + ' saying: '+ answer + '</h2>'))
  return app
}

要检索值:

function CCDEmail() {

  // Get multiple script properties in one call, then log them all.
  var scriptProperties = PropertiesService.getScriptProperties();
  var data = scriptProperties.getProperties();

  var Explain = data['argExplain'];
  var Cost = data['argCost'];  
  var Items = data['argItems'];
  var theDate = data['argtheDate'];
  var emailfrom = data['argemailfrom'];
  var emailto = data['argemailto'];

  Logger.log(data['argExplain']);

  var url = 'https://script.google.com/macros/s/AKfycbxnhUpURschXwP_rVFSUv673DtHcfuAvNkMTYHpBHU/dev';

  var approve = url + '?approval=true'+'&reply='+emailfrom; 
  var reject = url + '?approval=false'+'&reply='+emailfrom;

  var html = "<body>"+
             "<h2>Please review Credit Card Expenses</h2><br />"+
             "Month:"+ theDate+ "<br />"+
             "Total Cost:"+ Cost + "<br />" + "List of items:"+ Items+ "<br />"+
             "Explanation of Other purchases:"+ Explain+ "<br />"+
             "<br />"+
             "<a href="+ approve +">Approve</a><br />"+
             "<a href="+ reject +">Reject</a><br />"+
             "</body>";

  MailApp.sendEmail(emailto, "Credit Card Declaration " +theDate, "What no html?", {htmlBody: html});  
}

我没有测试这段代码。它可能有错误,但希望如何完成您想要的基本想法是正确的。

【讨论】:

  • 桑迪,非常感谢,我会试一试。 CCDEmail() 和 doGet() 之间可能有几天的时间。我想知道是否有另一种方法,使用 CCDEmail() 函数将“批准”和“拒绝”变量与其他数据变量一起输入,以便反馈这些变量?
猜你喜欢
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2016-06-15
相关资源
最近更新 更多