根据prev的数据动态创建表单中的新页面。页

时间:2013-07-12 17:38:53

标签: google-apps-script google-apps

我对google-apps-script中的表单有疑问。假设我已经创建了一个包含单个页面和文本输入框的表单。 是否可以根据文本框中的数据动态创建后续页面?类似的东西:

第一页:插入客户ID - >继续 - >第二页:有关客户的信息。

我知道有像onLoad和onSubmit这样的事件,但是没有onContinue事件。

是否可以使用google-apps-script创建类似的内容?存档此类行为的最佳方法是什么? B.R。

2 个答案:

答案 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只需在表单提交之前修改隐藏状态。