5.3.2流程定义:
企业体检流程,公司全体员工进行常规项检查、抽血化验,公司管理层除常规检查和抽血化验还要进行增加项检查。
图标:
员工类型:
通过流程变量 userType 来表示,如果等于 1 表示普通员工,如果等于 2 表示领导
注意:通过包含网关的每个分支的连线上设置 condition 条件。
5.3.3测试
如果包含网关设置的条件中,流程变量不存在,报错;
org.activiti.engine.ActivitiException: Unknown property used in expression: ${userType=='1' || userType=='2'}
需要在流程启动时设置流程变量 userType
当执行到包含网关:
流程实例执行表:SELECT * FROM act_ru_execution
第一条记录:包含网关分支。
后两条记录:两个分支:常规项体检,抽血化验
当前任务表:ACT_RU_TASK_
上图中,常规项体检,抽血化验都是当前的任务,在并行执行。
如果有一个分支执行到汇聚:
先走到汇聚结点的分支,要等待其它分支走到汇聚。
等所有分支走到汇聚,包含网关就执行完成。
包含网关执行完成,分支和汇聚就从 act_ru_execution 删除。
小结:在分支时,需要判断条件,符合条件的分支,将会执行,符合条件的分支最终才进行汇聚。
总结
什么是工作流?
就是通过计算机对业务流程进行自动化管理,实现多个参与者按照预定义的流程去自动执行业务流程。
什么 activiti?
Activiti 是一个工作流的引擎,开源的架构,基本 bpmn2.0 标准进行流程定义,它的是前身是 jbpm。
Activiti 通过是要嵌入到业务系统开发使用。
如何使用 activiti 开发?
第一步:部署 activiti 的环境。
环境包括:jar 包和数据库(25 张表)
业务系统通过 spring 和 activiti 整合进行开发。
第二步:使用 activiti 提供流程设计器(和 idea 或 eclipse 集成的 designer)工具进行流程定义
流程定义生成两个文件:.bpmn 和.png(不是必须的)。
第三步;将流程定义文件部署到 activiti 的数据库
SELECT * FROM act_re_deployment #流程定义部署表
一次部署插入一条记录,记录流程定义的部署信息
SELECT * FROM act_re_procdef #流程定义表一次部署流程定义信息,如果一次部署两个流程定义,插入两条记录
建议:一次部署只部署一个流程定义,这样 act_re_deployment 和 act_re_procdef 一对一关系
常用两个方法:单个文件部署和 zip 文件部署。
建议单个文件部署。
第四步: 启动一个流程实例
业务系统就可以按照流程定义去执行业务流程,执行前需要启动一个流程实例
根据流程定义来启动一个流程实例。
指定一个流程定义的 key 启动一个流程实例,activiti 根据 key 找最新版本的流程定义。
指定一个流程定义的 id 启动一个流程实例。
启动一个实例需要指定 businesskey(业务标识),businessKey 是 activiti 和业务系统整合时桥梁。
比如:请假流程,businessKey 就是请假单 id。
启动一个实例还可以指定流程变量,流程变量是全局变量(生命期是整个流程实例,流程实例结束,变量就消失)
第五步:查询待办任务
查询个人任务:使用 taskService,根据 assignee 查询该用户当前的待办任务。
查询组任务:使用 taskService,根据 candidateuser 查询候选用户当前的待办组任务。
第六步:办理任务
办理个人任务:调用 taskService 的 complete 方法完成任务。
如果是组任务,需要先拾取任务,调用 taskService 的 claim 方法拾取任务,拾取任务之后组任务就变成了个人任务(该任务就有负责人)。
网关:
排他网关:任务执行之后的分支,经过排他网关分支只有一条有效。
并行网关:任务执行后,可以多条分支,多条分支总会汇聚,汇聚完成,并行网关结束。
包含网关:是排他网关和并行网关结合体。