工作流简介
什么是工作流
简单的理解就是工作的流程,这里的流程指的是,完成一个企业中具体业务的一系列工作步骤,所有的步骤合在一起就是业务从开始到结束的流转过程。
从计算机系统的角度来讲,工作流系统表示:业务过程的部分和整体在计算机应用环境的自动化操作
工作流的三大要素
工作流示例 - 请假
工作流系统的组成
工作流的相关概念
Activiti5简介
Activiti5框架的由来
JBPM
,全称是Java Business Process Management
(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。JBPM
是公开源代码项目 。
JBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss
,成为了JBoss
企业中间件平台的一个组成部分,它的名称也改成JBoss jBPM
。
在JBPM4
之后,公司内部对于软件的规划发生了分歧,所以当时的项目架构师脱离了原来的公司,加入新的公司后,改了名称Activiti5
。
JBPM
采用Hibernte
(JBPM核心发生了很大的变化)
Activiti5
采用MyBatis
(MyBatis 3, 1和2都叫做iBatis)
Activiti5组成
ProcessEngine:这个类是Activiti5的核心,所有的服务都需要通过ProcessEngine来创建,该类是线程安全的
Activiti5的持久化层采用的是Mybatis,这样移植性好
Activiti5主要包括7个Service,这些Service都是通过ProcessEngine创建
repositoryService:(持久化服务) 与数据库进行交互的
runtimeService:(运行时服务) 与运行流程有关
formService:(表单服务)
identityService:(身份信息)
taskService:(任务服务) 与流程中的每一个步骤有关
historyService:(历史信息) 查看历史的流程步骤
managementService:(管理定时任务)在固定的时间点完成固定的任务
Activiti5框架表结构
Activiti使用到的表都是ACT_开头的。默认会生成25张表。
ACT_RE_*
: ‘RE’表示repository
(存储),RepositoryService
接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
ACT_RU_*
: ‘RU’表示runtime
,运行时表-RuntimeService
。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
ACT_ID_*
: ’ID’表示identity
(组织机构),IdentityService
接口所操作的表。用户记录,流程中使用到的用户和组。这些表包含标识的信息,如用户,用户组,等等。
ACT_HI_*
: ’HI’表示history
,历史数据表,HistoryService
。就是这些表包含着流程执行的历史相关数据,如结束的流程实例,变量,任务,等等。
ACT_GE_*
: 全局通用数据及设置(general),各种情况都使用的数据。
Activiti5框架表详解
act_ge_bytearray | 二进制数据表 |
act_ge_property | 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录 |
act_hi_actinst | 历史节点表 |
act_hi_attachment | 历史附件表 |
act_hi_comment | 历史意见表 |
act_hi_identitylink | 历史流程人员表 |
act_hi_detail | 历史详情表,提供历史变量的查询 |
act_hi_procinst | 历史流程实例表 |
act_hi_taskinst | 历史任务实例表 |
act_hi_varinst | 历史变量表 |
act_id_group | 用户组信息表 |
act_id_membership | 用户与用户组对应信息表 |
act_id_user | 用户信息表 |
act_re_deployment | 部署信息表 |
act_re_model | 流程设计模型部署表 |
act_re_procdef | 流程定义数据表 |
act_ru_event_subscr 、throwEvent、catchEvent | 时间监听信息表 |
act_ru_execution | 运行时流程执行实例表 |
act_ru_identitylink | 运行时流程人员表,主要存储任务节点与参与者的相关信息 |
act_ru_job | 运行时定时任务数据表 |
act_ru_task | 运行时任务节点表 |
act_ru_variable | 运行时流程变量数据表 |
流程的相关概念
流程定义
部署流程后,数据库中会有3张表的数据发生变化,用于存储当前部署及流程定义相关的数据,图形,文件内容
流程实例
流程实例其实就是流程定义的具体应用,通过startXXXXX方法启动流程实例,
启动流程后,会在RU表及HI表中增加相应的数据
任务
所谓的任务其实就是流程中的工作步骤,可以将任务委派给某个人完成,也可以委派给某个小组后再分配给个人完成,当流程中所有的任务完成后,流程结束。
开始,结束
流程的边界,由框架自动完成,不需要人工参与
变量
将流程中固定不变的内容通过变量来表示,可以让流程更具备通用性
在流程定义图中使用EL表达式(${tl})
增加变量,在启动流程时传递变量
Map<String, Object> var = new HashMap<String, Object>() ;
var.put(“tl”, “zhangsan”);
网关
网关就是流程中的分支判断,可以在流程定义图中增加判断条件实现
框架中的网关主要分为3种:
排他网关:多个逻辑分支同时只能执行一个,分支执行完毕,流程结束
并行网关:多个逻辑分支同时执行,一个分支执行完毕后,流程没有结束,需要等待其他分支的执行,所有的分支执行完毕后,流程结束
包含网关:多个逻辑分支如果有一个条件成立,那么等同于排他网关,如果有多个条件成立,那么等同于并行网关。