工作流系统核心模型
流程定义-->工作流引擎<-->持久化组件
| |
| |
工作列表 业务数据库
概念:
工作流逻辑(规则):绘制的流程图
工作流实例:按照预定的规则完成一次实际的执行(比如张三完成一次请假流程)
activiti的后台是有数据库支持的,有23张表,所以的表都以ACT_打头,第二部分表示表的用途的两个字母的标识,用途也和服务的API相对应,默认使用的数据池是mybatis
1,流程定义process-definition
编程步骤总结
1,创建流程定义
2,部署流程定义
3,启动流程实例
4,获取任务列表
5,执行任务
6,结束任务
二:执行和管理工作流
1,activiti的数据库表是存放流程数据的,而不是存放业务数据,业务数据需要用户自己创建表,一定需要业务去关联流程,根据业务去判断流程
2,由流程引擎创建各个service,这些service是调用23张表的服务,主要学习的这3部分
repositoryService,管理流程定义及发布
runtimeService,管理执行
taskService,管理任务
3,跟流程定义相关的表都是re开头的表
部署对象表在act_re_deployment表中存放记录
流程定义的记录存放在act_re_procdef表中
资源文件表(*.bpmn和*.png)记录存放在act_ge_bytearry表中
主键生成策略表act_ge_property,字段next.dbid代表下一个主键的数字
4,流程定义表的id是由key字段:version字段:随机数组成,version是从1开始的,启动流程定义以最新的版本启动
5,流程定义修改是通过版本升级完成的,每次变动都把版本数+1
6,启动一个流程定义,会产生一个流程实例,相应的会在act_ru_execution表中产生数据,
我们称之为:正在执行的执行对象表,单例流程(没有分支)的act_ru_execution中的ID_和PROC_INST_ID_是一样的,ID_代表执行对象ID,PROC_INST_ID_代表流程实例ID,有分支的两个ID
是不相同的,ACT_ID_代表当前活动ID,是指当前任务执行到哪里(节点)
7,启动一个流程定义,同时会产生一个流程实例的历史表,叫做:act_hi_procinst,从开始到结束只有1个流程实例,执行对象可能有多个,只有节点是UserTask的时候还会产生一个正在执行的任务表act_ru_task和任务历史表act_hi_taskinst。还会生成一个所有活动节点的历史表act_hi_actinst
8,流程变量
流程变量的作用:
a,原来传递业务参数:比如请假天数,请假时间,请假原因
b,指定连线完成任务
c,动态地指定任务办理人
act_ru_variable:正在执行的流程变量表
act_hi_varinst:历史的流程变量表
d,当一个javabean(实现序列化)放置在流程变量中,要求javabean的属性不能再发生变化,如果发生变化,再获取的时候会抛出异常,解决办法是在javabean中添加固定版本的字段
9:网关
排他网关(exclusive GateWay),相当于java中的if else语句,如果条件都不满足,则走默认的flow
并行网关(parallel GateWay),分为两个:分支和聚合,聚合有两个活动,完成任务就行,没有流程变量的概念,是没有条件的。
10:开始活动节点
11:接收任务活动 receiveTask
等待得到消息以后才会往下执行,一般用作机器自动处理业务,我的见解向一个定时器
12:组任务
如果在act_ru_task表中的ASSIGNEE_字段为null,有两种可能,一,你没有选择办理人,二:
这个任务是组任务,不是个人任务
会在任务办理人表的表中新增数据act_ru_identitylink表中增加数据(包括个人任务,组任务),参与者(participant)记录流程实例,候选者(candidate)记录任务ID。
candidate是候选者,是等待领取任务的人,participant是参与过的人,已经领取到任务的人
13:角色组
identifyService就是组织机构管
act_id_group:id开头的都是与角色相关的表,这个表是角色表
act_id_user:用户表
act_id_membership:用户角色关联表
14:activiti网页编辑器网址
http://www.mossle.com/lemon-dev-modeler.html