Activiti 工作流表单设计及开发

一、前言

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

二、需求

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

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

三、设计实现思路

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

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

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

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

2.        在线表单设计功能要求
     我们把以上的需求进行了用例描述,则得到如下示例

<ignore_js_op>

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接口,如下:

Java代码  [url=][/url]

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

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

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

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

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

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

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

电信:http://office.jee-soft.cn:10080/bpm3/login.jsp
网通:http://oa.jee-soft.cn:10080/bpm3/login.jsp
账号:admin
密码:1

Activiti 工作流表单设计及开发,布布扣,bubuko.com

时间: 2024-12-27 14:19:08

Activiti 工作流表单设计及开发的相关文章

通达OA工作流-表单设计

第1章    什么是工作流 1.1    工作流的用途 随着企业管理信息化进程的不断深入,协同应用软件的概念已深入人心,而工作流系统正是协同应用软件的核心.通过应用 IT 技术来规范工作流程.提高工作的执行效率和准确度.使企业运营更加高效.规范.稳健,是工作流系统主要解决的问题. Office Anywhere 内置的工作流系统,适用于各行各业,实现企业各类业务的申请.审批.会签.登记.操作等环节的管理,将协同工作的过程进行详细记录,便于日后审核与查询,并实现业务数据的规范化录入.查询.统计.打

通达OA 太牛了!工作流表单设计中级联菜单原来可以这样实现(图文)

在做程序时,经常会有使用级联菜单这样的情况,比如选择行政区域这样的时候.使用通达的表单设计器来做这个需求时,一般都是怎样研究使用js来做级联菜单,略显复杂.今天突然发现原来通达在实现这个需求时居然有特别简单的实现方法,这里一块看一下. 做完的效果,看这里: 实现过程: 先添加一个下拉列表,关键地方就是在"关联子菜单名称"这里写上关联的下级菜单名字. 第二级菜单设置: 第三级菜单设置: 版权声明:本文为博主原创文章,未经博主允许不得转载.

.NET开源工作流RoadFlow-表单设计-新建表单(属性设置)

点击表单设计工具栏上的 新建表单 按钮会弹出新表单属性设置框: 表单名称:新表单表名称. 数据连接:表单对应的数据库连接(此连接在 系统管理-->数据库连接 中维护). 数据表:表单对应的数据库表. 主键:数据库表的主键(主键只能是自增的int型,或uniqueidentifier(guid)类型). 标题字段:业务表中的哪个字段数据来作为待办任务的标题. 程序库分类:表单的分类,此分类在 数据字典 中维护. 任务标题:是否自动生成标题,如果是自动生成则会以 流程名称(发起者姓名) 的形式自动生

【应用篇】Activiti外置表单实例demo(四)

在这里我想说的外置表单.是说我们将我们自己的jsp(.form,.html)等页面上传到工作流的数据库中,当任务运行到当前结点时.给我们像前台发送绑定好的表单. 此处是给表单绑定表单的过程 不允许为:${deptLeaderPass =='false'} 以下我们看相应的页面内容: start.form简单的html页面: <table border="1"> <tr> <td>请假类型:</td> <td> <sele

.net之工作流工程展示及代码分享(一)工作流表单

Workflow表单的作用是能够在客户端进行表单设计,然后在流程中动态开放哪些输入框可以供用户填写. 在这里我扩展了一个常用的WebEditor工具——KindEditor,能够插入自定义的html符号,如下图: Form类如下: 1 public delegate string SetAutoCompleteValue(string autoCompleteType); 2 3 [Serializable] 4 public class Form 5 { 6 [XmlAttribute] 7

如何控制通达OA的工作流表单列表控件的列输入框

通达OA的工作流表单列表控件只提供了从内部或外部数据源映射选择,但有时需要控制某些列不能输入,有些列录入后,带出其他列的数据,如下图 //通过存货编号取存货信息 function getinventory(cinvcode){ var resobj; jQuery.ajax({type:'POST', url:'/userext/index.php?c=workflow&m=getcinvname', data:{cinvcode:cinvcode}, success:function(res)

asp.net 微信企业号办公系统-表单设计-新建表单(属性设置)

点击表单设计工具栏上的 新建表单 按钮会弹出新表单属性设置框: 表单名称:新表单表名称. 数据连接:表单对应的数据库连接(此连接在 系统管理-->数据库连接 中维护). 数据表:表单对应的数据库表. 主键:数据库表的主键(主键只能是自增的int型,或uniqueidentifier(guid)类型). 标题字段:业务表中的哪个字段数据来作为待办任务的标题. 程序库分类:表单的分类,此分类在 数据字典 中维护. 任务标题:是否自动生成标题,如果是自动生成则会以 流程名称(发起者姓名) 的形式自动生

asp.net 微信企业号办公系统-表单设计-保存与发布

表单的过程中可以随时保存,以便下次继续设计. 表单设计完成后即可点击发布按钮,发布表单,发布表单后即可在流程设计时选定该表单.

(转)345OA旗舰版 v10.0.1800 - 工作流表单电子印章控件破解版

此为工作流表单电子印章控件,与其说是破解,其实是某公司购买的正版授权,可以去掉演示版控件的蓝色划线,如果实在想改成自己公司名称,哪只能联系NTKO购买,任何授权都会有被授权的公司名称.替换下ntkoWebSign.cab,修改下js代码里面的控件版本号码,就适用345OA办公系统 v10.0.1800,当345OA系统注册为旗舰版,即可使用工作流表单电子印章.实现工作流办理时,在表单上直接手写签名(需要手写笔).加盖电子印章.文字批注,可以把领导签名扫描制作成带口令的印章文件上传到OA系统,需要