Google Script Pass变量点击处理程序

时间:2014-02-02 19:00:51

标签: google-apps-script

我创建了一个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()之后)。有什么想法吗?

1 个答案:

答案 0 :(得分: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);
}

然后,您可以e.parameter.status使用retrieveInput(e)和其他人。