工作流简介

什么是工作流

简单的理解就是工作的流程,这里的流程指的是,完成一个企业中具体业务的一系列工作步骤,所有的步骤合在一起就是业务从开始结束的流转过程。

从计算机系统的角度来讲,工作流系统表示:业务过程的部分和整体在计算机应用环境的自动化操作

工作流的三大要素

工作流示例 - 请假

工作流系统的组成

工作流的相关概念

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种:

排他网关:多个逻辑分支同时只能执行一个,分支执行完毕,流程结束

并行网关:多个逻辑分支同时执行,一个分支执行完毕后,流程没有结束,需要等待其他分支的执行,所有的分支执行完毕后,流程结束

包含网关:多个逻辑分支如果有一个条件成立,那么等同于排他网关,如果有多个条件成立,那么等同于并行网关。

01-26 00:26