1、前言
Activiti 5对表单的支持目前仍是比较弱的,表如今对表单的开发还须要写Freemark模板,而且它的模板还须要跟class文件一块儿打包发布。这使得流程的表单设计必须由开发人员来开发处理。于是,开发一套易用性强的流程表单功能就显得颇有必要。
2、需求
用户通常都但愿能有如Microsoft的Office套件中的InfoPath那样,能够本身进行设计,而且能与工做流程绑在一块儿进行流转处理。以下所示:
数据结构
表单中每一个字段有固定的数据类型,并由不一样的数据控件展现,如日期、数字、单选或多选、下拉、多行文本甚至富文本编辑器。在实现更强的功能上,咱们还容许控件能实现脚本交互。
3、设计实现思路
在表单与流程的整合中,咱们通常不建议把表单的全部数据都存储在流程中,仅须要把参与流程跳转的数据才存到流程变量中去。如请假出差的流程,以下所示:
jsp
如申请出差金额则须要参与流程的处理中去,于是在进入这个判断节点以前,流程变量中须要存在这个变量,而且经过判断这个变量值来让流程自动跳转。
1. 流程实例与业务表单关联
基于以上设计的原则,流程中则不存储业务表单的数据,那么流程与业务表单又如何关联?在Activiti 5 则比Jbpm4考虑了这块,他在流程实例表及任务实例表相关运行表中增长了一个字段(BusinessKey),用来关联业务表单的数据,咱们通常把这个字段称为业务主键。其关联关系以下所示:
编辑器
那么流程表单的数据如何存储及如何展现,从上图能够看到,咱们对自定义的表单提供了生成物理表的方式,那么表单的存储则经过在线生成的页面获取物理表必须要的数据,而后保存至物理表中。这须要咱们在设计表单时,生成一套表单数据规范,在审批时,可以进行页面表单的数据验证及存储。另外,还须要对在执行过程当中的表单进行权限控制,如同一节点上审批相同的表单,不一样角色的人员对表单的字段的读写权限是不同的。
2. 在线表单设计功能要求
咱们把以上的需求进行了用例描述,则获得以下示例
布局
3. 在线流程表单设计逻辑结构分析
生成流程表单的流程以下所示:
url
说明:
表单设计能够先设计物理表再根据模板生成在线表单
也能够先设计表单的样式再生成物理表
以上两种方式最终的目标均须要生成物理表,物理表的结构及数据展现控件等咱们则须要用表来记录。所以,如下为他们大致上的数据结构模型:
spa
表单生成物理表后,表单页面须要跟物理表单的数据对应起来,在提交页面表单时,咱们采用了Json的数据结构来提交,在后台获取能够有效转存为物理表的数据。以下格式:
表单数据分为3部分:
1. 主表数据。
2. 子表数据
3. 意见数据
设计
数据格式如:
{"main":{"tableId":"tableId","fields":{"itemSubject":"出差深圳两天","total":"230","creatorID":"1340762352749","creator":"张小军","descp":"出差深圳两天"}},"sub":[],"opinion":[]}
在线表单的控件展现,须要按字段及结构来解析最终显示及数据验证。
流程启动后,须要把业务主键传至流程实例中去,幸亏,activiti已经提供了比较完整的API接口,以下:
Java代码 [url=][/url]
接口
以上方法会把业务表单中须要参与流程运行的字段放到variables做为流程变量。
4. 流程定义与业务表单绑定
流程定义容许绑定多种业务表单,目前咱们能够简单分为三种模式,在线表单、同系统的定制业务表单、第三方业务表单。
在线表单能够用全局表单,则整个流程用同一个表单,若是每一个流程节点的表单不同,则能够经过设计表单。 表单数据结构以下所示:
开发
因此在启动流程时及在任务进行跳转时,都可以获取流程节点的表单设置,从而在启动流程或执行任务处理时能进行正确的表单展现。
流程在完成整个审批后,还能够经过流程运行历史,能经过该如下该表能够查询当时每一个节点审批时的表单状况。
get
电信:http://office.jee-soft.cn:10080/bpm3/login.jsp
网通:http://oa.jee-soft.cn:10080/bpm3/login.jsp帐号:admin密码:1