Activiti第二天 流程实例、个人任务
课程安排:
Api:
流程实例:
流程实例是什么?
启动流程实例的方法(掌握)
两种方法,第二种方法在企业开发常用(涉及和业务系统整合)
查询流程实例(掌握)
查询结果如何和业务整合。
流程实例的暂停和激活(了解)
个人任务:
个人任务分配方法。(掌握)
三种分配方法,以第二种(UEL表达式)和第三种方法(监听器设置)在企业开发常用 。
查询个人任务。(掌握)
查询结果如何和业务整合。
完成个人任务(办理任务)
案例:
完成activiti实现采购流程管理。
创建采购单
提交采购单
审核采购单
学习目标:
1、重点学习activiti开发方法
2、学习springmvc和mybatis开发方法
1 复习
什么是工作流?
利用计算机技术对业务流程进行自动化管理,实现多个参与者按照预先定义的流程自动执行业务流程。
什么是activiti?
Activiti是实现工作流的一个引擎(框架,组件),通常activiti是要嵌入到业务系统实现业务流程管理。
1、利用bpmn2.0标准进行流程定义
2、将流程定义的文件(.bpmn和.png,.bpmn是必须的)部署到activiti中此时,activiti就可以去管理部署的流程定义
3、启动一个流程实例
4、查询待办任务
5、办理任务
6、流程结束
三个环境:
环境1: 没有加入activiti的采购系统
和加入activiti的采购系统进行功能开发对比
Procject:
数据库:(包括采购系统的表)
环境2:用于activiti的api测试
Project:
数据库:(包括activiti数据库表,包括23张)
环境3:用于activiti和业务系统整合开发,加入activiti的采购系统
Project:
数据库:(包括activiti数据库表和采购系统的表)
Activiti的架构:
activiti.cfg.xml:spring配置文件,配置ProcessEngine对象和各各Service
ProcessEngineConfiguration:
在上边的activiti.cfg.xml进行配置,通过此对象创建ProcessEngine
(重点)SpringProcessEngineConfiguration:用于spring和activiti的整合
Service:
注:红色标注为常用service。
什么是流程定义?
如果要让activiti去管理业务流程,需要按照bpmn2.0标准进行业务流程定义(.bpmn文件,png文件),流程定义的过程在线下操作,定义生成 的文件是静态的。
什么是流程定义部署?
在线下定义的bpmn文件,需要通过activiti的api部署到activiti的数据库中,这样activiti才能去按照流程定义的内容管理业务流程。
2 流程实例
2.1 什么是流程实例?
参与者(可以是用户也可以是程序)按照流程定义内容发起一个流程,发起的这个流程就是一个流程实例。是动态的。
流程定义和流程实例图解:
总结:
流程定义是静态的,流程实例是动态的,流程实例的启动是需要参与者来操作的,流程实例按照流程定义来启动,不同的流程实例之间互不影响 。
使用流程实例记录不同流程的执行过程。
2.2 启动流程实例
必须先启动一个流程实例,activiti才开始去管理控制这个业务流程(流程实例)。
根据流程定义key来启动一个实例
使用RuntimeService 启动一个流程实例,启动流程实例依赖于流程定义,启动实例之前 需要将流程定义部署到activit中。
RuntimeService:用于管理当前正在运行流程信息。
代码如下:
测试结果:
数据库表
记录流程当前 运行的信息:
SELECT * FROM act_ru_execution #流程实例执行表
记录了流程实例的当前执行信息,如果该流程实例结束,流程实例的执行信息从该表删除。
Id_:流程实例执行id
Proc_inst_id_:流程实例id
流程实例执行id和流程实例id区别:
如果流程实例运行当前有多个分支,每个分支执行id和流程实例id不一样,总会有一条记录执行id和流程实例id是一样的。
记录数:当前 执行分支数+1 (每个分支执行id和流程实例id不一样)
Business_key_:业务标识
Proc_def_id_:流程定义id
Act_id_:流程实例当前结点id(包括任务、事件等类型的结点)
SELECT * FROM act_hi_procinst #流程实例历史 表
记录流程实例的历史 信息
Start_time_:流程实例开始运行时间,就是流程实例启动的时间
End_time_:流程实例结束运行时间,如果 为空表示该流程未结束
Duration:流程实例运行时长.
2.3 businessKey(业务标识 )
2.3.1 分析
需求:
查询系统中当前正在运行的流程有哪些?比如:要查询采购流程,包括信息:流程实例id、当前 运行的结点id、采购单号、采购单名称 、采购金额。
分析:
流程实例id、当前 运行的结点id 通过activiti的api 从activiti数据库查询。
采购单号、采购单名称 、采购金额这个字段在activiti数据库中是不存在的,应该从业务系统中查询。
思路 :
在启动每个流程实例时(比如采购流程),指定一个采购单id,将此采购单id记录到activiti的数据库中。
采购单id和每个流程实例一一对应,activiti中为了满足需求:在查询activiti的信息时关联查询业务信息。专门设置businessKey(业务标识 )
2.3.2 businessKey业务标识概念
业务标识:查询activiti的信息时关联查询业务信息要用到的一个标识,标识通常是业务表的一个主键。比如:如果启动一个采购流程,业务标识等于采购单id,如果启动一个请假流程,业务标识等于请假信息的id。
2.3.3 设置businessKey方法:
在启动一个流程实例时设置该流程实例对应的businessKey。