项目实践工作流之Activiti学习(四十一)

2023-11-22 13:48:53 浏览数 (3)

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 方法拾取任务,拾取任务之后组任务就变成了个人任务(该任务就有负责人)。

网关:

排他网关:任务执行之后的分支,经过排他网关分支只有一条有效。

并行网关:任务执行后,可以多条分支,多条分支总会汇聚,汇聚完成,并行网关结束。

包含网关:是排他网关和并行网关结合体。

0 人点赞