据我所知,在Google Apps脚本应用程序中,只有一个doGet()可以触发唯一的doPost()。
我想执行一个Software Publisher System,该用户可以上传文件或在表单中填写修订信息,然后将Submit推送到下一步。最后一页将显示输入信息,发送电子邮件给伙计并完成所有操作。
但是,在按下“提交”按钮后如何输入下一个表单?
我尝试了一种方法,该方法在doPost()中创建第二步和第三步表单,并使用try ... catch来区分触发当前步骤的表单,例如以下代码。(由于任何步骤都无法使非上一步抛出该回调项,因此会产生异常)
它工作得很好,但我认为它没有感觉,也很愚蠢。有更好的解决方案吗?拜托了
//---------------------------------------------------------------------------
function doGet(e)
{
var app = UiApp.createApplication().setTitle("AP Publisher");
createFileUploadForm(app);
return app;
}
//---------------------------------------------------------------------------
function doPost(e)
{
var app = UiApp.getActiveApplication();
try {
// 2nd step form
var fileBlob = e.parameter.thefile;
createRevisionForm();
}
catch(error) {
try {
// 3rd step form
createConfirmForm(e);
}
catch(error2) {
//Complete
sendMail(e);
modifySitePageContent(e);
saveHistoryFile(e);
showConfirmedInfo(e);
}
}
return app;
}
该答案是完全根据上一个的数据动态地以创建新页面的形式复制的。页面。
使用该UiApp
服务,您具有一个doGet()
和一个doPost()
功能……但是,这是扩展它们以支持动态多部分表单的一种方式。(示例代码是从此答案中借用的。)
您doGet()
只需构建表单的part1。但是,在表单中,您需要按名称标识表单,如下所示:
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;
}
为了生成每个表单部分,后续的表单处理程序可以使用在先前的部分中检索到的数据向ui动态添加新的Form对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句