其他分享
首页 > 其他分享> > Activiti:流程网关管理

Activiti:流程网关管理

作者:互联网

排他网关 ExclusiveGateway

网关主要控制 Activiti 流程分支的流向。

概念

排它网关用于对流程中的决策进行建模。

当流程执行到达此网关时,所有分支都将按定义顺序进行判断,选择判断条件结果为真(true)的分支继续处理。

注意:

排它网关时只选择一个条件值为 true 的分支进行处理。如果多个分支的条件计算结果都为true,排他网关会选择id 值较小的一条分支去执行。

简而言之,就是传递流程变量,排他网关根据流程变量决定该走哪条线路

基本使用

bpmn 排他网关符号如下:

image-20220507095205857

需求:

直接领导审批后, 如果小于等于3天的由行政审批;大于3天的由总经理审批, 总经理审批完再由行政审批 .

修改ModelSaveRestResource类:

增加:

      String json_xml = values.getFirst("json_xml");
      String key = objectMapper.readTree(json_xml).get("properties").get("process_id").textValue();
      model.setKey(key);
image-20220507102223762

流程唯一标识key : testExclusiveGateway ,流程名: 排他网关流程模型

设置条件:

image-20220507095644685 image-20220507095757144 image-20220507100021870

流程定义里用户任务节点的办理人分别是: 直接领导审批 zhangsan 行政审批 wj1 总经理 wj2

保存后,流程定义模型数据会保存到act_re_model表里:

image-20220507102444047

保存成功后,直接部署。

编写测试类,进行测试:

    @Autowired
    RuntimeService runtimeService;    
     /**
     * 启动流程实例
     */
    @Test
    public void startProcess() {
        // 流程变量
        Map<String, Object> variables = new HashMap<>();
        // 天数
        variables.put("duration", 2);
        // 启动流程实例
        runtimeService.startProcessInstanceByKey("testExclusiveGateway", variables);
    }

启动流程实例后,由直接领导进行审批。

image-20220507102934924

审批:

    @Test
    public void completeTask() {
        //完成任务(任务id)
        taskService.complete("3ef40b37-cdad-11ec-a0e0-28d0ea3dce6b");
    }

image-20220507103420263

因为duration小于等于3,所以由行政进行审批。

并行网关 ParallelGateway

概念

并行网关用于对流程中的并发性建模,在流程模型中引入并发性的最简单的网关是并行网关,将流程分成多条分支,然后再多条分支汇聚到一起。

注意:分支 与 汇聚成对出现 。并行网关不会解析条件,即使顺序流中定义了条件,也会被忽略

并行网关在业务应用中常用于会签任务,会签任务即多个参与者共同办理的任务。

基本使用

bpmn 并行网关符号如下:

image-20220507105517072

需求:开启流程实例 -> 分成两个分支(部门经理审批,总监审批 ) -> 两个分支任务都完成了 -> 汇聚分支

流程唯一标识key : testParallelGateway ,流程名: 并行网关流程模型

image-20220507141628371

保存:

image-20220507141737754

部署并启动实例

    /**
     * 启动流程实例
     */
    @Test
    public void startProcess2() {
        runtimeService.startProcessInstanceByKey("testParallelGateway");
    }

启动后,会出现两条任务:

image-20220507142146626

包含网关 InclusiveGateway

概念

包含网关可以看做是排他网关和并行网关的结合体。和排他网关一样,你可以在连线上定义条件表达式,定义的表达式会被包含网关解析。但是包含网关主要区别是也可以不指定表达式,同时选择多条分支,这和并行网关是一样的。

简而言之:

基本使用

bpmn 包含网关符号如下:

image-20220507143658132

开启请假流程实例 -> 包含网关分支 -> 如果小于等于3天的部门经理审批,大于3天的由总经理审批,请假都必须经 过行政审批 -> 汇聚分支-> 流程结束

说明 :

流程唯一标识key : testInclusiveGateway ,流程名: 包含网关流程模型

跳转条件需要设置

image-20220507144311999

部署并启动实例:

    /**
     * 启动流程实例
     */
    @Test
    public void startProcess3() {
        // 流程变量
        Map<String, Object> variables = new HashMap<>();
        variables.put("duration", 2);
        // 启动流程实例
        runtimeService.startProcessInstanceByKey("testInclusiveGateway", variables);
    }

启动后:我们请假天数是2,流向了行政审批和部门经理审批与预期相同。

image-20220507144658048

标签:网关,Activiti,流程,并行,实例,审批,分支
来源: https://www.cnblogs.com/wwjj4811/p/16242554.html