1、么是并行网关

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

  fork 分支:

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

  join 汇聚:

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

  注意:

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

  与其他网关的主要区别:

    并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

2、流程定义

  

  

3、部署流程

package com.zn;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway {
/**
* 流程部署
*/
@Test
public void deployment() {
//获取ProcessEngine对象 默认配置文件名称:activiti.cfg.xml 并且configuration的Bean实例ID为processEngineConfiguration
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RepositoryService对象进行流程部署
RepositoryService repositoryService = processEngine.getRepositoryService();
//进行部署,将对应的流程定义文件生成到数据库当中,作为记录进行保存
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("bmpnfiles/holidayParallelGateway .bpmn") //加载流程文件
.name("请假流程-并行网关") //设置流程名称
.key("holiday")
.deploy(); //部署 //输出部署信息
System.out.println("流程名称:" + deployment.getName());
System.out.println("流程ID:" + deployment.getId());
System.out.println("流程Key:" + deployment.getKey());
}
}

控制台:

  

数据库:

  

4、启动流程实例

package com.zn;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /**
* 启动流程实例
*/
@Test
public void startInstance() {
//获取ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//设置流程变量
Map<String, Object> assMap = new HashMap<>();
assMap.put("num", 3);
//启动流程实例
ProcessInstance holidayGroup = runtimeService.startProcessInstanceByKey("holidayPar", assMap);
System.out.println("流程实例:" + holidayGroup.getId());
}
}

数据库:

  

5、任务处理

package com.zn;

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.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /*
*任务处理
*/
@Test
public void completeTask(){
//获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhangsan").singleResult();
//任务处理
taskService.complete(task.getId());
}
}

数据库:

  

6、任务处理

package com.zn;

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.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /*
*任务处理
*/
@Test
public void completeTask(){
//获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("lisi").singleResult();
//任务处理
taskService.complete(task.getId());
}
}

数据库:

  

7、任务处理

package com.zn;

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.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /*
*任务处理
*/
@Test
public void completeTask(){
//获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhaoliu").singleResult();
//任务处理
taskService.complete(task.getId());
}
}

数据库:

  

  当执行到并行网关时,说明当前流程实例有多个分支在运行;

  并行任务不执行不分前后,有任务的负责人去执行即可;

  当所有分支达到汇聚结点,并行网关就执行完成了;

8、任务处理

package com.zn;

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.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /*
*任务处理
*/
@Test
public void completeTask(){
//获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("sunqi").singleResult();
//任务处理
taskService.complete(task.getId());
}
}

数据库:

  

9、任务处理

package com.zn;

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.Test; import java.util.HashMap;
import java.util.Map; public class ActivitiParallelGateway { /*
*任务处理
*/
@Test
public void completeTask(){
//获取ProcessEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取TaskService对象
TaskService taskService = processEngine.getTaskService();
//查询到自己的任务,然后通过任务ID进行提交
Task task = taskService.createTaskQuery().processDefinitionKey("holidayPar").taskAssignee("zhouba").singleResult();
//任务处理
taskService.complete(task.getId());
}
}

数据库:

  

执行完成后,整个流程就结束:

  

Activiti网关--并行网关的更多相关文章

  1. Activiti7 网关(并行网关)

    什么是并行网关? 并行网关允许将流程分成多条分支,也可以将多条分支合并到一起,并行网关是基于进入和外出顺序流的 fork分支: 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支 jion汇聚: ...

  2. activiti入门3排他网关,并行网管,包含网关,事件网关(转)

    网关用来控制流程的流向 网关可以消费也可以生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量  写个带有分支的一个基本流程 流程图: 部署 ...

  3. activiti入门3排他网关,并行网管,包括网关,事件网关

    网关用来控制流程的流向 网关能够消费也能够生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量  写个带有分支的一个基本流程 流程图: wa ...

  4. Activity并行网关和排他网关

    说一说activiti中的排他网关和并行网关 activiti工作流中我们经常用到的网关有两种: 1. Exclusive Gateway 排他网关 排他网关.png 排他网关(也叫异或(XOR)网关 ...

  5. activiti实战系列 并行网关(parallelGateWay)

    流程图 13.2:部署流程定义+启动流程实例 13.3:查询我的个人任务 13.4:完成我的个人任务 说明: 1) 一个流程中流程实例只有1个,执行对象有多个 2)  并行网关的功能是基于进入和外出的 ...

  6. 并行网关 Parallel Gateway

    并行网关 Parallel Gateway 作者:Jesai 2018年3月25日 00:26:21 前言: 做工作流时间长后,慢慢的就会发现,很多客户会需要会签的功能,会签的情况也有很多种,实现的方 ...

  7. Activiti网关--包含网关

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

  8. Activiti7 网关(包含网关)

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

  9. Activiti7 网关(排他网关)

    什么是排他网关? 排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用于在流程中实现决策,当流程执行到这个网关,所有分支都会判断条件是否为true,如果为true则执行该分支 注意:排他网关 ...

随机推荐

  1. 【原创】为什么我的 Kafka 总是连接失败呢?

    提出问题 近日助友 Docker 部署 Kafka 服务,服务日志启动正常,但客户端却无法连接 往日曾踩过此坑,然方法均源于博客,其语焉不详,不知为何不行,亦不知为何行,印象不甚深刻,耗费大量时间 为 ...

  2. 2018-05-04 圣杯布局 and 双飞翼布局,display:flex

    看到一个神奇的布局,啥都不说了 直接贴代码 要让main在中间,left在左边,可以通过Flex容器下的项目的属性“order”属性来设置:对于order属性:定义项目的排列顺序,越小越靠前,默认为0 ...

  3. 数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例)

    数据挖掘入门系列教程(三)之scikit-learn框架基本使用(以K近邻算法为例) 简介 scikit-learn 估计器 加载数据集 进行fit训练 设置参数 预处理 流水线 结尾 数据挖掘入门系 ...

  4. python自动化第一课 - python安装以及pycharm配置

    1.安装python 1.1打开python官网https://www.python.org/downloads/windows/进行下载Python 3.8.0 1.2下载完毕后进行安装,1勾选 A ...

  5. django 从零开始 11 根据时间戳加密数据

    django自带一个加密的方法signer,对数据进行一个加密 一般这种方式用于账号密码邮箱找回,或者token设置 class TimestampSigner(Signer): def timest ...

  6. Django _web框架本质

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. socket服务端 import  ...

  7. [日志分析]Graylog2采集Nginx日志 被动方式

    graylog可以通过两种方式采集nginx日志,一种是通过Graylog Collector Sidecar进行采集(主动方式),另外是通过修改nginx配置文件的方式进行收集(被动方式). 这次说 ...

  8. EPX-Studio脚本调用

    procedure TF408017792.Button1Click(Sender: TObject); var NEPX: IExcelPanelXDisp; begin NEPX := this. ...

  9. [Dynamic Programming]动态规划之背包问题

    动态规划之背包问题 例题 现有4样物品n = ['a', 'b', 'c', 'd'],重量分别为w = [2, 4, 5, 3],价值分别为v = [5, 4, 6, 2].背包最大承重c = 9. ...

  10. 各种WAF绕过手法学习

    原文:https://mp.weixin.qq.com/s/aeRi1lRnKcs_N2JLcZZ0Gg 0X00    Fuzz/爆破 fuzz字典 1.Seclists/Fuzzing https ...