我对google-apps-script中的表单有疑问。假设我已经创建了一个包含单个页面和文本输入框的表单。 是否可以根据文本框中的数据动态创建后续页面?类似的东西:
第一页:插入客户ID - >继续 - >第二页:有关客户的信息。
我知道有像onLoad和onSubmit这样的事件,但是没有onContinue事件。
是否可以使用google-apps-script创建类似的内容?存档此类行为的最佳方法是什么? B.R。
答案 0 :(得分:1)
使用UiApp
服务,您有一个doGet()
和一个doPost()
功能......但是这里有一种扩展它们以支持动态多部分表单的方法。 (示例代码来自this answer。
您的doGet()
只是构建表单的第1部分。但是,在表单中,您需要通过名称标识表单,如下所示:
var form = app.createFormPanel().setId("emailCopyForm");
然后,doPost()
将根据提交的表单将后期操作的处理转移到不同的功能。见下文。 (还包括:reportFormParameters ()
,一个默认处理程序,它将显示表单部分收集的所有数据。)
/**
* doPost function with multi-form handling. Individual form handlers must
* return UiApp instances.
*/
function doPost(eventInfo) {
var app;
Logger.log("Form ID = %s", eventInfo.parameter.formId);
// Call appropriate handler for the posted form
switch (eventInfo.parameter.formId) {
case 'emailCopyForm':
app = postEmailCopyForm(eventInfo);
break;
default:
app = reportFormParameters (eventInfo);
break;
}
return app;
}
/**
* Debug function - returns a UiInstance containing all parameters from the
* provided form Event.
*
* Example of use:
* <pre>
* function doPost(eventInfo) {
* return reportFormParameters(eventInfo);
* }
* </pre>
*
* @param {Event} eventInfo Event from UiApp Form submission
*
* @return {UiInstance}
*/
function reportFormParameters (eventInfo) {
var app = UiApp.getActiveApplication();
var panel = app.createVerticalPanel();
panel.add(app.createLabel("Form submitted"));
for (var param in eventInfo.parameter) {
switch (param) {
// Skip the noise; these keys are used internally by UiApp
case 'lib':
case 'appId':
case 'formId':
case 'token':
case 'csid':
case 'mid':
break;
// Report parameters named in form
default:
panel.add(app.createLabel(" - " + param + " = " + eventInfo.parameter[param]));
break;
}
}
app.add(panel);
return app;
}
要生成每个表单部分,后续表单处理程序可以使用前面部分中检索的数据动态地将新的Form对象添加到ui。
答案 1 :(得分:1)
Here is some working code
这演示了一个多页面表单。
该代码使用单个&#34;隐藏&#34;状态在TextBox
和多个SubmitButtons
中,以允许用户在表单序列中前进和后退,以及验证表单的内容。另外两个SubmitButtons
是&#34;重新布线&#34;使用ClientHandlers
只需在表单提交之前修改隐藏状态。