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