Activiti 工作流表单设计及开发

一、前言

 

 

 

Activiti 5对表单的支持目前还是比较弱的,表现在对表单的开发还需要写Freemark模板,并且它的模板还需要跟class文件一起打包发布。这使得流程的表单设计必须由开发人员来开发处理。因而,开发一套易用性强的流程表单功能就显得很有必要。

 

想部署及学习了解,可参考本人新的博客获得下载源代码。

 

http://redxun.iteye.com/blog/2406509

 

 

二、需求

 

 

用户一般都希望能有如Microsoft的Office套件中的InfoPath那样,可以自己进行设计,并且能与工作流程绑在一起进行流转处理。如下所示:

 出差申请

 

表单中每个字段有固定的数据类型,并由不同的数据控件展示,如日期、数字、单选或多选、下拉、多行文本甚至富文本编辑器。在实现更强的功能上,我们还允许控件能实现脚本交互。

 

 

 

 

三、设计实现思路

 

 

在表单与流程的整合中,我们一般不建议把表单的所有数据都存储在流程中,仅需要把参与流程跳转的数据才存到流程变量中去。如请假出差的流程,如下所示:

 

 出差请假设置

 

如申请出差金额则需要参与流程的处理中去,因而在进入这个判断节点之前,流程变量中需要存在这个变量,并且通过判断这个变量值来让流程自动跳转。

 

 

 

1.流程实例与业务表单关联

基于以上设计的原则,流程中则不存储业务表单的数据,那么流程与业务表单又如何关联?在Activiti 5 则比Jbpm4考虑了这块,他在流程实例表及任务实例表相关运行表中增加了一个字段(BusinessKey),用来关联业务表单的数据,我们一般把这个字段称为业务主键。其关联关系如下所示:

 

流程表单表设计

 

那么流程表单的数据如何存储及如何展示,从上图可以看到,我们对自定义的表单提供了生成物理表的方式,那么表单的存储则通过在线生成的页面获取物理表必需要的数据,然后保存至物理表中。这需要我们在设计表单时,生成一套表单数据规范,在审批时,能够进行页面表单的数据验证及存储。另外,还需要对在执行过程中的表单进行权限控制,如同一节点上审批相同的表单,不同角色的人员对表单的字段的读写权限是不一样的。

 

 

 

2.在线表单设计功能要求

  我们把以上的需求进行了用例描述,则得到如下示例

 

流程表单设计用例图

 

1.设计表单模板

允许用户预先设置好一些带有漂亮格式的表单,如包括表头、表脚及样式。方便用户调整表单。

 

表单模板

 

2.设计表单布局

允许用户在线进行在线布局,目前一般来说都是基于表格的布局方式。

表单布局

 

 

3.设计表单字段控件、数据类型、数据验证

设计表单字段的输入控件类型及数据类型,用于保证用户输入的数据的正确性

 

表单字段设置

4.设置表单字段权限

用于控制表单的字段的读写权限,结合工作流的审批,可以更有效显示数据。

 

表单字段权限

5.支持表单动态脚本

允许对表单控件加上交互脚本,以实现如一些级联更新等的数据交互等。

表单脚本交互

6.表单预览

可以在线实时显示表单的显示效果

表单预览

7.预设流程变量

把参与流程运算的表单字段标识为流程变量。

 

 

 

3.在线流程表单设计逻辑结构分析

生成流程表单的流程如下所示:

流程表单设计过程

 

说明:

表单设计可以先设计物理表再根据模板生成在线表单

也可以先设计表单的样式再生成物理表

 

以上两种方式最终的目标均需要生成物理表,物理表的结构及数据展示控件等我们则需要用表来记录。因此,以下为他们大体上的数据结构模型:

 

表单数据模型

 

表单生成物理表后,表单页面需要跟物理表单的数据对应起来,在提交页面表单时,我们采用了Json的数据结构来提交,在后台获取可以有效转存为物理表的数据。如下格式:

表单数据分为3部分:

1.主表数据。

2.子表数据

3.意见数据

 

数据存储格式

 

数据格式如:

 

{"main":{"tableId":"tableId","fields":{"itemSubject":"出差深圳两天","total":"230","creatorID":"1340762352749","creator":"张小军","descp":"出差深圳两天"}},"sub":[],"opinion":[]}

 

在线表单的控件展示,需要按字段及结构来解析最终显示及数据验证。

 

流程启动后,需要把业务主键传至流程实例中去,幸好,activiti已经提供了比较完整的API接口,如下:

 

 

ProcessInstance processInstance=runtimeService.startProcessInstanceById(porcessDefId, businessKey, variables);

 

 

以上方法会把业务表单中需要参与流程运行的字段放到variables作为流程变量。

 

4.流程定义与业务表单绑定

 

流程定义允许绑定多种业务表单,目前我们可以简单分为三种模式,在线表单、同系统的定制业务表单、第三方业务表单。

 

在线表单可以用全局表单,则整个流程用同一个表单,如果每个流程节点的表单不一样,则可以通过设计表单。 表单数据结构如下所示:

 

所以在启动流程时及在任务进行跳转时,均可以获取流程节点的表单设置,从而在启动流程或执行任务处理时能进行正确的表单展示。

 

流程在完成整个审批后,还可以通过流程运行历史,能通过该以下该表可以查询当时每个节点审批时的表单情况。

 

 

更多资讯请加QQ了解3102760881

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值