工作流引擎之十 网关

目录

一,排他网关

1.1 流程定义

1.3 测试 

二,并行网关

2.1 什么是并行网关

2.2 流程定义

2.3 测试 

 三,包含网关

        3.1 流程定义

3.2 测试

四,课程总结

        什么是工作流?

        什么 activiti?

如何使用 activiti 开发?


一,排他网关

排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策。 当流程 执行到这个网关,所有分支都会判断条件是否为 true,如果为 true 则执行该分支, 注意,排他网关只会选择一个为 true 的分支执行。(即使有两个分支条件都为 true,排他网关也会只 选择一条分支去执行)

为什么要用排他网关?

不用排他网关也可以实现分支,如下图:

上图中,在连线的 condition 条件上设置分支条件。 缺点: 如果条件都不满足,不使用排他网关,流程就结束了(是异常结束)。

如果 使用排他网关决定分支的走向,如下:

 如果从网关出去的线所有条件都不满足则系统抛出异常。

org.activiti.engine.ActivitiException: No outgoing sequence flow of the exclusive gateway 'exclusivegateway1' could be selected for continuing the process at org.activiti.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehav ior.leave(ExclusiveGatewayActivityBehavior.java:85)

说明 :经过排他网关必须要有一条且只有一条分支走。 

1.1 流程定义

 

1.3 测试 

        在部门经理审核后,走排他网关,从排他网关出来的分支有两条,一条是判断请假天数是否大于 3 天,另一条是判断请假天数是否小于等于 3 天。

        设置分支条件时,如果所有分支条件都不是 true,报错: org.activiti.engine.ActivitiException: No outgoing sequence flow of the exclusive gateway 'exclusivegateway1' could be selected for continuing the process at org.activiti.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior.leave(ExclusiveGatewayActivit yBehavior.java:85)

二,并行网关

2.1 什么是并行网关

        并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进 入和外出顺序流的:

         fork 分支: 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。

         join 汇聚: 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通 过汇聚网关。

        注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时, 网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。

        与其他网关的主要区别是,并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

 

说明: 

        财务结算和入库是两个 execution 分支,在 act_ru_execution 表有两条记录分别是财务会计和行政考 勤,act_ru_execution 还有一条记录表示该流程实例。 待财务会计和行政考勤任务全部完成,在汇聚点汇聚,通过 parallelGateway 并行网关。 并行网关在业务应用中常用于会签任务,会签任务即多个参与者共同办理的任务。

2.2 流程定义

 

2.3 测试 

当执行到并行网关数据库跟踪如下:

 

 

 三,包含网关

        什么是包含网关

        包含网关可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上 定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行 网关一样。 包含网关的功能是基于进入和外出顺序流的:

        分支: 所有外出顺序流的条件都会被解析,结果为 true 的顺序流会以并行方式继续执行, 会为每个顺序流>创建一个分支。

         汇聚: 所有并行分支到达包含网关,会进入等待状态, 直到每个包含流程 token 的进入顺序流的分支都 到达。 这是与并行网关的最大不同。换句话说,包含网关只会等待被选中执行了的进入顺序流。 在 汇聚之后,流程会穿过包含网关继续执行。

        3.1 流程定义

        企业体检流程,公司全体员工进行常规项检查、抽血化验,公司管理层除常规检查和抽血化验还要 进行增加项检查。

 员工类型:

        通过流程变量 userType 来表示,如果等于 1 表示普通员工,如果等于 2 表示领导

 注意:通过包含网关的每个分支的连线上设置 condition 条件。

3.2 测试

        如果包含网关设置的条件中,流程变量不存在,报错; org.activiti.engine.ActivitiException: Unknown property used in expression: ${userType=='1' || userType=='2'} 需要在流程启动时设置流程变量 userType

        当执行到包含网关: 流程实例执行表:SELECT * FROM act_ru_execution

 

 小结:在分支时,需要判断条件,符合条件的分支,将会执行,符合条件的分支最终才进行汇聚。

四,课程总结

        什么是工作流?

        就是通过计算机对业务流程进行自动化管理,实现多个参与者按照预定义的流程去自动执行业务流 程。

        什么 activiti?

        Activiti 是一个工作流的引擎,开源的架构,基本 bpmn2.0 标准进行流程定义,它的是前身是 jbpm。 Activiti 通过是要嵌入到业务系统开发使用。 如何使用 activiti 开发?  第一步:部署 activiti 的环境。 环境包括:jar 包和数据库(25 张表) 业务系统通过 spring 和 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 方法拾取任务,拾取任务之后组任务就 变成了个人任务(该任务就有负责人)。 网关: 排他网关:任务执行之后的分支,经过排他网关分支只有一条有效。 并行网关:任务执行后,可以多条分支,多条分支总会汇聚,汇聚完成,并行网关结束。 包含网关:是排他网关和并行网关结合体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vegetari

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值