前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Activiti7 网关(包含网关)

Activiti7 网关(包含网关)

原创
作者头像
彼岸舞
修改2020-12-02 09:52:58
1.6K0
修改2020-12-02 09:52:58
举报
文章被收录于专栏:java开发的那点事

什么是包含网关?

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

其实在我看来就是

排他网关:解析条件,要不报错,要不走一个

并行网关:不解析条件,不报错,都走

包含网关:解析条件,条件成立就走,不成立就不走,全都不成立报错

需求:

体检流程

如果是领导 就走 常规,抽血,VIP,普通员工只走常规,抽血

使用流程变量控制

领导:userType=2

员工:userType=1

代码语言:javascript
复制
package com.itheima.test.testGateWay;

import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Before;

import java.util.HashMap;
import java.util.Map;

/**
 * 测试包含网关
 */
public class Test {

    ProcessEngine defaultProcessEngine;

    @Before
    public void init() {
        defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
    }

    @org.junit.Test
    public void deployment(){

        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();

        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("pic/gateway/holidayGateway3.bpmn")
                .name("体检流程")
                .deploy();

        System.out.println(deploy);

    }

    @org.junit.Test
    public void startProcessInstance(){

        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();

        Integer userType = 1;

        Map<String,Object> map = new HashMap<>();

        map.put("userType",userType);

        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1", map);

        System.out.println(processInstance);

    }

    /**
     * 提交任务
     */
    @org.junit.Test
    public void completTask(){
        String assignee = "sunqi";
        Task task = querySingResultByAssignee(assignee);
        System.out.println(task);
        TaskService taskService = defaultProcessEngine.getTaskService();
        taskService.complete(task.getId());
    }

    /**
     * 查询用户唯一任务
     * @param assignee
     * @return
     */
    public Task querySingResultByAssignee(String assignee){
        TaskService taskService = defaultProcessEngine.getTaskService();
        return taskService.createTaskQuery().processDefinitionKey("myProcess_1").taskAssignee(assignee).singleResult();
    }

}

主要查看act_hi_actinst表的流程变化,既可以发现

userType=1 领取->常规->抽血->早餐->结束

userType=2 领取->常规->抽血->早餐->VIP->结束

作者:彼岸舞

时间:2020\09\08

内容关于:Activiti工作流

本文来源于网络,只做技术分享,一概不负任何责任

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档