【问题标题】:Google Script Pass Variable To Click Handler谷歌脚本传递变量到点击处理程序
【发布时间】:2014-02-02 19:00:50
【问题描述】:

我创建了一个 Google Apps 脚本,但我有一个关于将变量传递给点击处理程序的问题。该脚本作为 Web 应用程序发布,并通过电子邮件中的 HTML 链接访问(它是业务请求的批准/拒绝表单)。当有人提交表单时,会向单击批准链接的批准者发送一封电子邮件。此链接包含以下变量:

?status=enteredInCC&rowNum=9

所以当他们点击链接时,脚本会启动,并进入function doGet(e) 块,相关代码在哪里:

var app = UiApp.createApplication();
var grid = app.createGrid(1, 2);
var label = app.createLabel('Please enter the item\'s PLU:')
var input = app.createTextBox().setId("input").setName("input");
grid.setWidget(0, 0, label);
grid.setWidget(0, 1, input);
var handler = app.createServerHandler("retrieveInput").addCallbackElement(input);
var button = app.createButton("OK", handler);
var panel = app.createVerticalPanel().setId("panel")
panel.add(grid);
panel.add(button);
app.add(panel);

return app;

这会导致点击处理程序:

function retrieveInput(e){
  var input = e.parameter.input;
  var app = UiApp.getActiveApplication();
  var panel = app.getElementById('panel');

  panel.clear();

  app.add(app.createHTML('<h2>The request has been updated. You can close this window.</h2>'))
  app.close()
  return app;
}

所有这些都运行良好。但是,在 doGet(e) 函数的早期,一些信息是从 URL 收集并存储在变量中的。现在在retrieveInput(e) 中,我需要访问这些变量来对电子表格进行一些更新(就在panel.clear() 之后)。有什么想法吗?

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    存储在变量中将不起作用,因为 retrieveInput 函数在脚本的新/不同“实例”中被调用,因此无法访问在 doGet 中设置的变量。在您的情况下,我建议您将所需的参数保存为panel 中的隐藏输入,并将其用作callbackElement 而不仅仅是input。像这样:

    function doGet(e) { 
      var app = UiApp.createApplication();
      var panel = app.createVerticalPanel().setId("panel")
      panel.add(app.createHidden('status', e.parameter.status));
      panel.add(app.createHidden('rowNum', e.parameter.rowNum));
      var grid = app.createGrid(1, 2);
      var label = app.createLabel('Please enter the item\'s PLU:')
      var input = app.createTextBox().setId("input").setName("input");
      grid.setWidget(0, 0, label);
      grid.setWidget(0, 1, input);
      var handler = app.createServerHandler("retrieveInput")
        .addCallbackElement(panel); //changed to panel instead of input
      var button = app.createButton("OK", handler);
      panel.add(grid).add(button);
      return app.add(panel);
    }
    

    那么你就可以在retrieveInput(e)中正常使用e.parameter.status和其他人了。

    【讨论】:

    • 工作就像一个魅力。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    相关资源
    最近更新 更多