管理复杂的Web表单

时间:2016-11-06 15:18:44

标签: javascript forms rule-engine angular-schema-form

我在一个应用程序上工作,其核心是非常复杂的Web表单集。这种复杂性的来源

  1. 比例,一些表格包含约50页,每页最多30个问题
  2. 复杂规则,例如如果用户回答"否"问题4,然后问题5-15不适用,所以应从表格中删除
  3. 目前我们对表单使用Angular Schema Form,但它并没有提供一种在表单字段之间管理大量复杂规则的引人注目的方法。

    我对rules-based programming没有太多经验,但在我看来,这可能会提供一种更好的方法来管理表单字段之间的规则。例如,使用基于规则的方法,我们可以定义与每个表单字段关联的规则,规则引擎可以使用它们来决定下一个要显示的字段。使用我们当前的方法,我们通过大量的命令式JavaScript来实现这一点,这几乎是不可能测试和维护的。

    如果有人有开发此类复杂网页表单的经验,我有兴趣了解他们的经历,例如他们可以推荐的工具/库。我们当前的堆栈基于JDK(Java,Groovy,Grails)和JavaScript(Angular,Node),因此在这些平台上运行的工具/库/框架将特别令人感兴趣。

2 个答案:

答案 0 :(得分:1)

我有为这类流程构建解决方案的经验 - 诚然,一次不是50个表格页面,但我的用例确实有很长的技术形式,根据较早的答案,隐藏了一系列问题。

我为专家写了一个设计时工具来设置问题。此工具将问题显示为树,并允许将问题分组为块,以使作者更容易管理显示/隐藏规则。这些规则被编码为简单的'Q10> 123'表示当回答Q10大于123时,则显示此问题(或问题块)。问题所要求的答案可以是文本输入,下拉选择等。

作者的设计时活动的结果是问题树的XML定义,问题详细信息(提示,强制,类型,选项等)和可见性规则。

在运行时,我将其提供给嵌入在网页中的JavaScript“播放器”。播放器使用问题定义,设置模型,创建所需的显示元素等,生成呈现页面所需的HTML。这包括根据这些规则运行可见性检查。当给出答案时,此检查再次运行,以便根据给定答案隐藏/进入任何相关问题。

在用户填写表单时,我们通过向服务器发布隐藏表单将数据保存到数据库。此表单包含每个问题的“isVisible”标记,该标记也存储在数据库中,作为一种能够快速显示结果答案的方法,并且知道哪些是隐藏的,如果它们隐藏在表格的最后然后,当结果显示,打印或通过电子邮件发送等时,应隐藏它们。

我最初是在VBScript中构建的(IE当时是浏览器!),然后将其移至JavaScript,最近更新了JQuery。它被使用了数百万次,似乎是健壮和实用的。

总之,您需要一个工具来帮助您的专家为表单设置问题;你需要一种方法来保存和传输这些信息;你需要一种方法来处理表格和用户的问题定义;你需要一种方法来存储给出的答案;并且您需要一种快速重新显示结果的方法,而无需在所有问题上重新计算显示/隐藏。

答案 1 :(得分:-1)

如果您想使用规则引擎,请问自己这些问题。如果答案适用,请使用它。

您的算法是一堆计算还是涉及重要的决策能力?

  • 如果您有很多条件,或者您的规则不是非常表格(您可能可以将规则存储在数据库中),您甚至可以采用混合方法,但它更难以维护,因为您在不同的部分有规则,但更容易编程,因为你只编写特定的规则。

您的决定有多复杂?

  • 如果您有多个条件语句

  • 您可以清楚地定义规则

您的规则有多不稳定?

  • 您还不了解您的规则,或者您的规则需要灵活,并会随着时间的推移而发生变化。

您的算法是否需要自定义tweeking?

  • 如果您不需要为性能之类的东西进行调整,请使用规则引擎