精华内容
下载资源
问答
  • activiti入门3排他网关 并行网管 包含网关 事件网关
                   

    网关用来控制流程的流向 网关可以 消费 也可以 生成 token。

    网关显示成菱形图形,内部有有一个小图标。 图标表示网关的类型。

    基本分支

    首先 利用 流程变量  写个带有分支的一个基本流程

    流程图:

    部署流程文件:

    //获取流程引擎  ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();    @Test  public void deployFlow(){        //获取仓库服务对象    RepositoryService repositoryService = processEngine.getRepositoryService();        InputStream in = this.getClass().getResourceAsStream("/MyProcess11.zip");    ZipInputStream zipInputStream = new ZipInputStream(in);        Deployment dm = repositoryService.createDeployment()                      .name("学生请假")                      .addZipInputStream(zipInputStream)                      .deploy();        System.out.println("id:"+dm.getId()+",name:"+dm.getName());  }

    启动流程 并 设置请假天数为 3天的 流程变量 提交 

    /**   * 启动流程 并完成 提交   */  @Test  public void startProcessAndComp(){        RuntimeService runtimeService = processEngine.getRuntimeService();    ProcessInstance pi = runtimeService.startProcessInstanceByKey("leave");        System.out.println("id:"+pi.getId()+",流程实例ID:"+pi.getProcessInstanceId()+",流程定义ID:"+pi.getProcessDefinitionId());        TaskService taskService = processEngine.getTaskService();        //通过流程实例ID获取任务对象    Task task = taskService.createTaskQuery()              .processInstanceId(pi.getProcessInstanceId())              .singleResult();    System.out.println("taskID:"+task.getId()+",name:"+task.getName());        Map<String, Object> paramMap = new HashMap<String, Object>();    //设置流程变量day=3    paramMap.put("day", 3);    //提交任务的时候传入流程变量    taskService.complete(task.getId(), paramMap);        //查询任务    task = taskService.createTaskQuery()        .processInstanceId(pi.getProcessInstanceId())        .singleResult();        //如果任务对象为空,则流程执行结束    if (task != null) {      System.out.println("taskID:"+task.getId()+",name:"+task.getName());    } else {      System.out.println("任务执行完毕");    }  }

    最后的运行结果:

    id:1501,流程实例ID:1501,流程定义ID:leave:2:1404taskID:1504,name:班主任任务执行完毕

    我们可以再数据库中查看:

    我们 再 部署一个 流程文件 , 并且在提交 任务的时候 设置流程变量 请假天数为 10天

    最后的运行结果

    id:1701,流程实例ID:1701,流程定义ID:leave:3:1604taskID:1704,name:班主任taskID:1707,name:年级主任

    现在 流程就到了另外 一条线

    年纪主任审批通过:

    /**   * 提交任务   */  @Test  public void completeTask(){    TaskService taskService = processEngine.getTaskService();    taskService.complete("1707");  }

    流程执行结束

    排他网关:

    排他网关描述

    排他网关(也叫 异或(XOR)网关 ,或更技术性的叫法  基于数据的排他网关 ), 用来在流程中实现 决策 。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个'true' ) 会被选中,让流程继续运行。

    注意这里的外出顺序流 与BPMN 2.0通常的概念是不同的。通常情况下,所有条件结果为true的顺序流 都会被选中,以并行方式执行,但排他网关只会选择一条顺序流执行。 就是说,虽然多个顺序流的条件结果为true, 那么XML中的第一个顺序流(也只有这一条)会被选中,并用来继续运行流程。 如果没有选中任何顺序流,会抛出一个异常。

    排他网关图形

    排他网关显示成一个普通网关(比如,菱形图形), 内部是一个“X”图标,表示 异或(XOR) 语义。 注意,没有内部图标的网关,默认为排他网关。 BPMN 2.0规范不允许在同一个流程定义中同时使用没有X和有X的菱形图形。

    流程文件:

    排他网关有个默认的选项  default flow ,  当 default flow 设定后  就不用设置表达式了,  如果所有的条件都不通过 就会执行默认的流程

    年级主任审批和校长审批

    首先 还是 先把文件部署

    //获取流程引擎  ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();    @Test  public void deployFlow2(){        //获取仓库服务对象    RepositoryService repositoryService = processEngine.getRepositoryService();        InputStream in = this.getClass().getResourceAsStream("/exclusiveGateway.zip");    ZipInputStream zipInputStream = new ZipInputStream(in);        Deployment dm = repositoryService.createDeployment()                      .name("学生请假")                      .addZipInputStream(zipInputStream)                      .deploy();        System.out.println("id:"+dm.getId()+",name:"+dm.getName());  }

    启动流程, 并提交 设置 请假天数 为 10天   结果

    id:2001,流程实例ID:2001,流程定义ID:exclusiveGateWay:1:1904taskID:2004,name:学生请假taskID:2008,name:年级主任审批

    再 重新部署一个流程文件 然后启动 提交  设置请假天数为 30天 执行结果

    id:2201,name:学生请假
    id:2301,流程实例ID:2301,流程定义ID:exclusiveGateWay:2:2204taskID:2304,name:学生请假taskID:2308,name:校长审批

    最后在 部署一遍, 这次设置请假天数为 3天  结果

    id:2501,name:学生请假
    id:2601,流程实例ID:2601,流程定义ID:exclusiveGateWay:3:2504taskID:2604,name:学生请假taskID:2608,name:班主任审批

    这里 流程走到了 当初 默认的设置  班主任审批

    当我们设置了 默认 的 配置  ,即使没有 设置表达式  流程 条件都 不满足的时候  都会执行默认的

    并行网关

    并行网关描述

    网关也可以表示流程中的并行情况。最简单的并行网关是 并行网关 ,它允许将流程  分 成多条分支,也可以把多条分支  汇 聚 到一起。 of execution.

    并行网关的功能是基于进入和外出的顺序流的:

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

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

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

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

    并行网关图形

    并行网关显示成一个普通网关(菱形)内部是一个“加号”图标, 表示“与(AND)”语义。

    首先 画一个简单的并行流程

    注意  并行 网关 要有2个  一个是用于 分支 一个用于  聚合

    部署启动

    @Test  public void deployFlow3() {    // 获取仓库服务对象    RepositoryService repositoryService = processEngine        .getRepositoryService();    InputStream in = this.getClass().getResourceAsStream("/Parallel.zip");    ZipInputStream zipInputStream = new ZipInputStream(in);    Deployment dm = repositoryService.createDeployment().name("并行网关")        .addZipInputStream(zipInputStream).deploy();    System.out.println("id:" + dm.getId() + ",name:" + dm.getName());    RuntimeService runtimeService = processEngine.getRuntimeService();    ProcessInstance pi = runtimeService        .startProcessInstanceByKey("parallel");    System.out.println("id:" + pi.getId() + ",流程实例ID:"        + pi.getProcessInstanceId() + ",流程定义ID:"        + pi.getProcessDefinitionId());  }
    id:2801,name:并行网关
    id:2901,流程实例ID:2901,流程定义ID:parallel:1:2804

    此时流程进入  启动项目环节   通过流程实例ID 查看当前流程 进度

    /**   * 启动流程 并完成 提交   */  @Test  public void startProcessAndComp3() {    TaskService taskService = processEngine.getTaskService();    // 查询任务    Task task = taskService.createTaskQuery().processInstanceId("2901").singleResult();    // 如果任务对象为空,则流程执行结束    if (task != null) {      System.out.println("taskID:" + task.getId() + ",name:"          + task.getName());    } else {      System.out.println("任务执行完毕");    }    // 通过流程实例ID获取任务对象    task = taskService.createTaskQuery().processInstanceId("2901").singleResult();    System.out.println("taskID:" + task.getId() + ",name:" + task.getName());    // 提交任务    taskService.complete(task.getId());  }
    taskID:2904,name:项目启动taskID:2904,name:项目启动

    提交任务后,流程进入并行环节,同时执行 功能模块1 和 功能模块2

    这是我们可以看到  流程实例ID 和 执行对象ID 已经是不同了

    这个是 act_ru_execution 表的数据

    我们先 提交一个  功能模块1的任务

    在看 任务表  act_ru_task

    此时 任务表 只有 功能模块2 

    我们在看  act_ru_execution  这个表  依旧是3条数据  功能模块1 的执行流程 被阻塞在   并行网关这里  没有进入 测试发布这个 环节

    在提交功能模块2  任务

    查看 这  2个表

    流程 已经 进入 下一个环节

    提交最后一个人  整个流程结束,  我们在查看  历史活动表  act_hi_actinst

    整个流程 分成了 2 块

    包含网关

    包含网关描述

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

    包含网关的功能是基于进入和外出顺序流的:

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

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

    注意,如果同一个包含节点拥有多个进入和外出顺序流, 它就会同时 含有分支和汇聚功能 。 这时,网关会先汇聚所有拥有流程token的进入顺序流, 再根据条件判断结果为true的外出顺序流,为它们生成多条并行分支。

    包含网关图形

    并行网关显示为一个普通网关(菱形),内部包含一个圆圈图标。

    当 main config 中的 表达式 条件返回的结果为真时  执行 并行网关

    结果为假时 执行 排他任务

    具体的 流程 这里就不介绍了

    事件网关

    事件网关描述

    基于事件网关允许根据事件判断流向。网关的每个外出顺序流都要连接到一个中间捕获事件。 当流程到达一个基于事件网关,网关会进入等待状态:会暂停执行。 与此同时,会为每个外出顺序流创建相对的事件订阅。

    注意基于事件网关的外出顺序流和普通顺序流不同。这些顺序流不会真的"执行"。 相反,它们让流程引擎去决定执行到基于事件网关的流程需要订阅哪些事件。 要考虑以下条件:

    • 基于事件网关必须有两条或以上外出顺序流。

    • 基于事件网关后,只能使用 intermediateCatchEvent 类型。 (activiti不支持基于事件网关后连接ReceiveTask。)

    • 连接到基于事件网关的 intermediateCatchEvent 只能有一条进入顺序流。

    事件网关图形

    事件网关和其他BPMN网关一样显示成一个菱形, 内部包含指定图标。

    这里 事件 太多了  就 先到这里  0.0

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • activiti包含网关

    千次阅读 2019-01-12 09:19:22
    import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.TaskService; import org.activiti.engine.... * 测试包含网关 * 特点:具有排他网关和并行网...
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.task.Task;
    
    /**
     *  测试包含网关
     *     特点:具有排他网关和并行网并的一些共同点
     *           可以设置流程变量,当流程变量取值都成立时,此时若干个分支都可以执行
     *
     */
    public class InclusiveGateWayTest {
    
        //3.任务执行完成
        public static void main(String[] args) {
            //1.得到ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到TaskService对象
            TaskService taskService = processEngine.getTaskService();
    
            //3.查询当前用户的任务
            Task task = taskService.createTaskQuery()
                    .processDefinitionKey("examine")
                    .taskAssignee("xiaowang")
                    .singleResult();
    
            //4.处理任务,结合当前用户任务列表的查询操作的话,任务ID:task.getId()
            if(task!=null){
                taskService.complete(task.getId());
                System.out.println("用户任务执行完毕...");
            }
    
    
            //5.输出任务的id
            System.out.println(task.getId());
        }
    
        //2.启动流程实例
    /*   public static void main(String[] args) {
                //1.得到ProcessEngine对象
                ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
                //2.得到RunService对象
                RuntimeService runtimeService = processEngine.getRuntimeService();
    
            Integer userType = 2;//代表管理者
            Map<String,Object> map = new HashMap<>();
            map.put("userType",userType);//流程变量赋值
    
                //3.创建流程实例  流程定义的key需要知道 holiday
                ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("examine",map);
    
    
                //4.输出实例的相关信息
                System.out.println("流程定义ID"+processInstance.getProcessDefinitionId());//holiday:1:4
                System.out.println("流程实例ID"+processInstance.getId());//2501
        }*/
    
    
        //1.部署流程定义  带排他网关,同时还带并行网关
    /*    public static void main(String[] args) {
            //1.创建ProcessEngine对象
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    
            //2.得到RepositoryService实例
            RepositoryService repositoryService = processEngine.getRepositoryService();
    
            //3.进行部署
            Deployment deployment = repositoryService.createDeployment()
                    .addClasspathResource("diagram/day05/examine.bpmn")  //添加bpmn资源
                    //.addClasspathResource("diagram/day05/examine.png")
                    .name("体检流程")
                    .deploy();
    
            //4.输出部署的一些信息
            System.out.println(deployment.getName());
            System.out.println(deployment.getId());
        }*/
    }
    

     

    展开全文
  • activiti入门3排他网关,并行网管,包含网关,事件网关

    万次阅读 多人点赞 2014-10-24 15:53:07
    网关用来控制流程的流向 网关可以消费也可以生成token。 网关显示成菱形图形,内部有有一个小图标。 图标表示网关的类型。 这里主要 介绍下 排他网关, 并行网关 , 和包含网关

    网关用来控制流程的流向 网关可以消费也可以生成token。

    网关显示成菱形图形,内部有有一个小图标。 图标表示网关的类型。

    基本分支

    首先 利用 流程变量  写个带有分支的一个基本流程

    流程图:




    部署流程文件:

    //获取流程引擎
    	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    	
    	@Test
    	public void deployFlow(){
    		
    		//获取仓库服务对象
    		RepositoryService repositoryService = processEngine.getRepositoryService();
    		
    		InputStream in = this.getClass().getResourceAsStream("/MyProcess11.zip");
    		ZipInputStream zipInputStream = new ZipInputStream(in);
    		
    		Deployment dm = repositoryService.createDeployment()
    											.name("学生请假")
    											.addZipInputStream(zipInputStream)
    											.deploy();
    		
    		System.out.println("id:"+dm.getId()+",name:"+dm.getName());
    	}
    启动流程 并 设置请假天数为 3天的 流程变量 提交 

    /**
    	 * 启动流程 并完成 提交
    	 */
    	@Test
    	public void startProcessAndComp(){
    		
    		RuntimeService runtimeService = processEngine.getRuntimeService();
    		ProcessInstance pi = runtimeService.startProcessInstanceByKey("leave");
    		
    		System.out.println("id:"+pi.getId()+",流程实例ID:"+pi.getProcessInstanceId()+",流程定义ID:"+pi.getProcessDefinitionId());
    		
    		TaskService taskService = processEngine.getTaskService();
    		
    		//通过流程实例ID获取任务对象
    		Task task = taskService.createTaskQuery()
    							.processInstanceId(pi.getProcessInstanceId())
    							.singleResult();
    		System.out.println("taskID:"+task.getId()+",name:"+task.getName());
    		
    		Map<String, Object> paramMap = new HashMap<String, Object>();
    		//设置流程变量day=3
    		paramMap.put("day", 3);
    		//提交任务的时候传入流程变量
    		taskService.complete(task.getId(), paramMap);
    		
    		//查询任务
    		task = taskService.createTaskQuery()
    				.processInstanceId(pi.getProcessInstanceId())
    				.singleResult();
    		
    		//如果任务对象为空,则流程执行结束
    		if (task != null) {
    			System.out.println("taskID:"+task.getId()+",name:"+task.getName());
    		} else {
    			System.out.println("任务执行完毕");
    		}
    	}

    最后的运行结果:

    id:1501,流程实例ID:1501,流程定义ID:leave:2:1404
    taskID:1504,name:班主任
    任务执行完毕

    我们可以再数据库中查看:





    我们部署一个 流程文件 , 并且在提交 任务的时候 设置流程变量 请假天数为 10天


    最后的运行结果

    id:1701,流程实例ID:1701,流程定义ID:leave:3:1604
    taskID:1704,name:班主任
    taskID:1707,name:年级主任

    现在 流程就到了另外 一条线


    年纪主任审批通过:

    	/**
    	 * 提交任务
    	 */
    	@Test
    	public void completeTask(){
    		TaskService taskService = processEngine.getTaskService();
    		taskService.complete("1707");
    	}

    流程执行结束

                                                                                                                                                                                                                                                                        

    排他网关:

    排他网关描述

    排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个'true') 会被选中,让流程继续运行。

    注意这里的外出顺序流 与BPMN 2.0通常的概念是不同的。通常情况下,所有条件结果为true的顺序流 都会被选中,以并行方式执行,但排他网关只会选择一条顺序流执行。 就是说,虽然多个顺序流的条件结果为true, 那么XML中的第一个顺序流(也只有这一条)会被选中,并用来继续运行流程。 如果没有选中任何顺序流,会抛出一个异常。

    排他网关图形

    排他网关显示成一个普通网关(比如,菱形图形), 内部是一个“X”图标,表示异或(XOR)语义。 注意,没有内部图标的网关,默认为排他网关。 BPMN 2.0规范不允许在同一个流程定义中同时使用没有X和有X的菱形图形。

    流程文件:



    排他网关有个默认的选项  default flow ,  当 default flow 设定后  就不用设置表达式了,  如果所有的条件都不通过 就会执行默认的流程


    年级主任审批和校长审批



    首先 还是 先把文件部署 

    //获取流程引擎
    	ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    	
    	@Test
    	public void deployFlow2(){
    		
    		//获取仓库服务对象
    		RepositoryService repositoryService = processEngine.getRepositoryService();
    		
    		InputStream in = this.getClass().getResourceAsStream("/exclusiveGateway.zip");
    		ZipInputStream zipInputStream = new ZipInputStream(in);
    		
    		Deployment dm = repositoryService.createDeployment()
    											.name("学生请假")
    											.addZipInputStream(zipInputStream)
    											.deploy();
    		
    		System.out.println("id:"+dm.getId()+",name:"+dm.getName());
    	}


    启动流程, 并提交 设置 请假天数 为 10天   结果

    id:2001,流程实例ID:2001,流程定义ID:exclusiveGateWay:1:1904
    taskID:2004,name:学生请假
    taskID:2008,name:年级主任审批

    再 重新部署一个流程文件 然后启动 提交  设置请假天数为 30天 执行结果

    id:2201,name:学生请假
    id:2301,流程实例ID:2301,流程定义ID:exclusiveGateWay:2:2204
    taskID:2304,name:学生请假
    taskID:2308,name:校长审批
    最后在 部署一遍, 这次设置请假天数为 3天  结果

    id:2501,name:学生请假
    id:2601,流程实例ID:2601,流程定义ID:exclusiveGateWay:3:2504
    taskID:2604,name:学生请假
    taskID:2608,name:班主任审批

    这里 流程走到了 当初 默认的设置  班主任审批



    当我们设置了 默认 的 配置  ,即使没有 设置表达式  流程 条件都 不满足的时候  都会执行默认的

    并行网关

    并行网关描述

    网关也可以表示流程中的并行情况。最简单的并行网关是 并行网关,它允许将流程 成多条分支,也可以把多条分支 到一起。 of execution.

    并行网关的功能是基于进入和外出的顺序流的:

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

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

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

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

    并行网关图形

    并行网关显示成一个普通网关(菱形)内部是一个“加号”图标, 表示“与(AND)”语义。

    首先 画一个简单的并行流程



    注意  并行 网关 要有2个  一个是用于 分支  一个用于 聚合

    部署启动

    @Test
    	public void deployFlow3() {
    
    		// 获取仓库服务对象
    		RepositoryService repositoryService = processEngine
    				.getRepositoryService();
    
    		InputStream in = this.getClass().getResourceAsStream("/Parallel.zip");
    		ZipInputStream zipInputStream = new ZipInputStream(in);
    
    		Deployment dm = repositoryService.createDeployment().name("并行网关")
    				.addZipInputStream(zipInputStream).deploy();
    
    		System.out.println("id:" + dm.getId() + ",name:" + dm.getName());
    
    		RuntimeService runtimeService = processEngine.getRuntimeService();
    		ProcessInstance pi = runtimeService
    				.startProcessInstanceByKey("parallel");
    
    		System.out.println("id:" + pi.getId() + ",流程实例ID:"
    				+ pi.getProcessInstanceId() + ",流程定义ID:"
    				+ pi.getProcessDefinitionId());
    
    	}


    id:2801,name:并行网关
    id:2901,流程实例ID:2901,流程定义ID:parallel:1:2804
    此时流程进入  启动项目环节   通过流程实例ID 查看当前流程 进度

    /**
    	 * 启动流程 并完成 提交
    	 */
    	@Test
    	public void startProcessAndComp3() {
    
    		TaskService taskService = processEngine.getTaskService();
    
    		// 查询任务
    		Task task = taskService.createTaskQuery().processInstanceId("2901").singleResult();
    
    		// 如果任务对象为空,则流程执行结束
    		if (task != null) {
    			System.out.println("taskID:" + task.getId() + ",name:"
    					+ task.getName());
    		} else {
    			System.out.println("任务执行完毕");
    		}
    
    		// 通过流程实例ID获取任务对象
    		task = taskService.createTaskQuery().processInstanceId("2901").singleResult();
    		System.out.println("taskID:" + task.getId() + ",name:" + task.getName());
    
    		// 提交任务
    		taskService.complete(task.getId());
    
    	}
    taskID:2904,name:项目启动
    taskID:2904,name:项目启动
    提交任务后,流程进入并行环节,同时执行 功能模块1 和 功能模块2


    这是我们可以看到  流程实例ID 和 执行对象ID 已经是不同了

    这个是 act_ru_execution 表的数据 


    我们先 提交一个  功能模块1的任务 

    在看 任务表  act_ru_task 


    此时 任务表 只有 功能模块2 

    我们在看  act_ru_execution  这个表  依旧是3条数据  功能模块1 的执行流程 被阻塞在   并行网关这里  没有进入 测试发布这个 环节


    在提交功能模块2  任务

    查看 这  2个表



    流程 已经 进入 下一个环节 

    提交最后一个人  整个流程结束,  我们在查看  历史活动表  act_hi_actinst


    整个流程 分成了 2 块



    包含网关

    包含网关描述

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

    包含网关的功能是基于进入和外出顺序流的:

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

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

    注意,如果同一个包含节点拥有多个进入和外出顺序流, 它就会同时含有分支和汇聚功能。 这时,网关会先汇聚所有拥有流程token的进入顺序流, 再根据条件判断结果为true的外出顺序流,为它们生成多条并行分支。

    包含网关图形

    并行网关显示为一个普通网关(菱形),内部包含一个圆圈图标。


    当 main config 中的 表达式 条件返回的结果为真时  执行 并行网关 

    结果为假时 执行 排他任务

    具体的 流程 这里就不介绍了


    事件网关

    事件网关描述

    基于事件网关允许根据事件判断流向。网关的每个外出顺序流都要连接到一个中间捕获事件。 当流程到达一个基于事件网关,网关会进入等待状态:会暂停执行。 与此同时,会为每个外出顺序流创建相对的事件订阅。

    注意基于事件网关的外出顺序流和普通顺序流不同。这些顺序流不会真的"执行"。 相反,它们让流程引擎去决定执行到基于事件网关的流程需要订阅哪些事件。 要考虑以下条件:

    • 基于事件网关必须有两条或以上外出顺序流。

    • 基于事件网关后,只能使用intermediateCatchEvent类型。 (activiti不支持基于事件网关后连接ReceiveTask。)

    • 连接到基于事件网关的intermediateCatchEvent只能有一条进入顺序流。

    事件网关图形

    事件网关和其他BPMN网关一样显示成一个菱形, 内部包含指定图标。


    这里 事件 太多了  就 先到这里  0.0  














    展开全文
  • 网关(Gateway)又称网间连接器、协议转换器。 举例:什么是网关 假设你的名字叫小不点(很小),你住在一个大院子里,你的邻居有很多小伙伴,父母是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声 ...

    网关(Gateway)又称网间连接器、协议转换器。

    举例:什么是网关

    假设你的名字叫小不点(很小),你住在一个大院子里,你的邻居有很多小伙伴,父母是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声
    他的名字,他听到了就会回应你,并且跑出来跟你玩。
    但是你家长不允许你走出大门,你想与外界发生的一切联系,都必须由父母(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家里也有父母(小明的网关)。但是你不知道小明家的电话号码,不过你的班主任老师有一份你们班全体同学的名单和电话号码对照表,你的老师就是你的DNS服务器。于是你在家里和父母有了下面的对话:
    小不点:妈妈(或爸爸),我想找班主任查一下小明的电话号码行吗?家长:好,你等着。(接着你家长给你的班主任挂了一个电话,问清楚了小明的电话)问到了,他家的号码是211.99.99.99
    小不点:太好了!妈(或爸),我想找小明,你再帮我联系一下小明吧。
    家长:没问题。(接着家长向电话局发出了请求接通小明家电话的请求,最后一关当然是被转接到了小明家家长那里,然后他家长把电话给转到小明).
    就这样你和小明取得了联系。
    如果搞清了什么是网关,默认网关也就好理解了。就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。默认网关。默认网关一般填写192.168.x.1
     

    排他网关、事件网关、并行网关、包含网关

    https://blog.csdn.net/a67474506/article/details/40428709

    展开全文
  • 网关用来控制流程的流向网关可以消费也可以生成token。 网关显示成菱形图形,内部有有一个小图标。 图标表示网关的类型。 基本分支 首先 利用 流程变量 写个带有分支的一个基本流程 流程图: 部署流程...
  • 网关和分支是流程图中相当重要的一环。毕竟一个流程不可能是一条直线走到底的,可能需要并行处理,也可能需要根据条件的不同选择对应的路由,网关和分支的作用正是在此。本文主要探索一下这几种网关的常用方法,以及...
  • 网关用来控制流程的流向网关可以消费也可以生成token。网关显示成菱形图形,内部有有一个小图标。 图标表示网关的类型。 1、基本分支: 首先 利用 流程变量 写个带有分支的一个基本流程 流程图: 部署...
  • Activiti7工作流程引擎之网关
  • * 获取并行网关内的任务节点 */ private void getParallelGatewayInsideNode() { List<FlowElement> flowElements = (List<FlowElement>)bpmnModel.getMainProcess().getFlowElements(); FlowNode ...
  • 网关用来控制流程的流向网关可以消费也可以生成token。 网关显示成菱形图形,内部有有一个小图标。 图标表示网关的类型。 基本分支 首先 利用 流程变量 写个带有分支的一个基本流程 流程图: 部署流程...
  • #文档地址
  • USB 安全性(即时 FlexSPI 解密) 丰富的音频功能 SDK 包含 FreeRTOS 提供多种 IDE 的 SDK 包,包括 MCUXpresso / Keil / IAR 低成本且易于开发 1.1.2 供电 & 下载电路 ① USB 5V 供电,DCDC & LDO 降压后给外设供电。...
  • 基本网关架构 这包含基本网关体系结构的服务

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,512
精华内容 1,004
关键字:

包含网关