从用户的角度来看,OrbeonForms的架构非常简单。它由与数据库(持久层)对话的FormBuilder(表单编辑器)和FormRunner(表单运行时)组成。此外,与用户管理系统的集成是一种常见的情况。您已经使用FormBuilder创建了表单,发布了它们,并设置了OrbeonForms,以便它将表单捕获的数据存储在您的关系数据库中。现在,您的另一个应用程序如何访问这些数据?共有三种设计方法。当用户单击表单中的提交按钮时,让Orbeon表单将数据发送到您的应用程序。您的应用程序为此调用OrbeonForms提供的RESTAPI。您的应用程序直接访问OrbeonForms持有的数据库中的数据。下面一一介绍。方法1.提交时发送数据在大多数情况下,这是最好的选择,也是我们推荐的选择。本质上,您设置OrbeonForms,以便当用户填写表单并提交时,OrbeonForms将用户输入的数据发送到您的应用程序。如果需要,您的应用程序可以对这些数据做任何想做的事情,在对OrbeonForms的响应中,您的应用程序可以告诉OrbeonForms用户下一步应该去哪个页面。当用户单击在FormBuilder中创建的表单上的提交按钮(或与此相关的表单底部的任何其他按钮)时,将运行一个流程。本质上,一个流程定义了一系列要执行的操作,其中一个可以是将数据发送到您的应用程序。目前,该过程在您的properties-local.xml中定义。在您的流程中,您将使用send()操作来指示OrbeonForms将用户输入的数据发布到您选择的URL。你的应用程序可以用它接收到的数据做它想做的事情:在数据库中执行一些操作,调用服务等。如果你将replace="all"参数传递给send(),那么无论你的应用程序发送回OrbeonFormsHTTP响应将由OrbeonForms发送/代理回浏览器。这允许您发送自定义确认页面,或重定向到用户下一步应该去的另一个页面或表单。方法2.调用RESTAPI您的第二个选择是让您的应用程序调用OrbeonForms持久性API来检索OrbeonForms保存在数据库中的数据。这是一个简单的RESTAPI,您需要先调用搜索API列出使用特定表单提交或保存的数据,然后调用CRUDAPI检索您感兴趣的任何数据。如前所述,由Orbeon表单非常简单,但在调用此类API时需要牢记一些复杂情况,这通常使上述选项1更可取:您决定何时调用API。您很可能希望定期(例如每小时或每天)执行此操作以处理提交给系统的任何新数据。这意味着您将需要一个类似cron的基础架构来定期执行任务,并且您的应用程序不会实时了解新数据。假设您的应用程序只对处理新数据感兴趣,它需要以某种方式跟踪它已经处理过的数据。出于安全原因,现成的RESTAPI访问被阻止。您可以在OrbeonForms级别完全开放对API的访问,并通过过滤器等其他方式保护它,或者通过授权服务在API的调用者和OrbeonForms之间设置一些身份验证。方法3.访问数据库根据上面的选项2,访问数据库中的数据而不是通过API会增加升级OrbeonForms需要更改代码的可能性,因为Orbeon表的格式比API更可能发生变化。尽管有此警告,我们发现客户访问数据库中的数据通常比通过API更实用。更多Jerry原创文章在这里:《王子熙》:
