2

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

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

我知道有 onLoad 和 onSubmit 之类的事件,但例如没有 onContinue 事件。

是否可以使用 google-apps-script 创建类似的东西?归档这种行为的最佳方法是什么?BR

4

2 回答 2

2

这是一些演示多页表单的工作代码。TextBox该代码在 a和多个中使用单个“隐藏”状态,SubmitButtons以允许用户在表单序列中前进和后退,以及验证表单的内容。两个额外SubmitButtons的“重新连接”使用ClientHandlers在表单提交之前简单地修改隐藏状态。

于 2014-08-11T23:23:51.700 回答
1

使用该UiApp服务,您拥有一个doGet()和一个doPost()功能......但这是一种扩展它们以支持动态多部分表单的方法。(示例代码是从这个答案中借来的。

doGet()只需构建表单的第 1 部分。但是,在表单中,您需要通过 name来标识您的表单,如下所示:

  var form = app.createFormPanel().setId("emailCopyForm");

然后,您doPost()会将 post 操作的处理传递给不同的函数,具体取决于已提交的表单。见下文。(还包括: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。

于 2013-07-13T09:45:50.270 回答