第六章:activiti流程分流判断之排它网关和并行网关

第六章:activiti流程分流判断之排它网关和并行网关第六章:activiti流程分流判断之排它网关和并行网关

大家好,又见面了,我是你们的朋友全栈君。

专栏上一章简单介绍了通过判断分流走不同的任务节点。下面我们介绍一下比较复杂的一点的判断。

排它网关:具有排它性,根据条件只能走一天线路,比如请假有班主任审批,班长审批,年级主任审批,这三个只能走一个,这就是排它性。

下面我们复制一个请假流程图:

第六章:activiti流程分流判断之排它网关和并行网关

首先介绍怎么中间的叉号图,叉号即网关,所以找到右侧工具栏的gateway,

第六章:activiti流程分流判断之排它网关和并行网关

改好后我们看三条判断的先,leave days<3表示请假小于3天的走的流程,对应下图:

第六章:activiti流程分流判断之排它网关和并行网关

第六章:activiti流程分流判断之排它网关和并行网关

leave days<7表示小于请假小于7天,大于三天,对应下图:

第六章:activiti流程分流判断之排它网关和并行网关

第六章:activiti流程分流判断之排它网关和并行网关

剩余的一天,对应下图,

第六章:activiti流程分流判断之排它网关和并行网关

第六章:activiti流程分流判断之排它网关和并行网关

注意上图的condition的判断条件为空,这就是排它性,其他的两个条件不满足,自然就走这个条件了,不过这里我们还要设置一下,叉号默认走的流程:

第六章:activiti流程分流判断之排它网关和并行网关

flow9就是leave days>7的id.

最后我们点击流程图空白处设置流程id,为:studentLeaveProcess03:

第六章:activiti流程分流判断之排它网关和并行网关

保存,这样就好了。

下面测试:

复制一个流程类:

第六章:activiti流程分流判断之排它网关和并行网关

复制之前的代码,稍作修改如下:

package com.xiaoyexinxixn.ActivityLesson.flow;


import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

import com.xiaoyexinxixn.ActivityLesson.model.Student;

public class StudentLeaveProcess3 {
	//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
	private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
		Deployment deployment=processEngine.getRepositoryService()
		//创建部署
		.createDeployment()
		//加载流程图资源文件
		.addClasspathResource("diagrams/StudentLeave3.bpmn")
		//加载流程图片
		.addClasspathResource("diagrams/StudentLeave3.png")
		//流程名称
		.name("leave02")
		//部署流程
		.deploy();
		System.out.println("流程部署的ID: "+deployment.getId());
		System.out.println("流程部署的Name: "+deployment.getName());
	}
	
	/*
	 * 启动流程实例
	 */
	@Test
	public void start(){
		//运行启动流程的servicee
		ProcessInstance pi=processEngine.getRuntimeService()
		//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
		.startProcessInstanceByKey("studentLeaveProcess03");
		System.out.println(pi.getId());
		System.out.println(pi.getProcessDefinitionId());
	}
}

运行程序,部署流程,启动流程,

下面让流程走到leave002节点,下面做判断:

/**
	 * 完成任务时设置流程变量
	 */
	@Test
	public void completeTaskVariablesTest(){
		Map<String, Object> variables=new HashMap<String,Object>();
		variables.put("days", 1);
		processEngine.getTaskService().complete("87504",variables);
	}

这里我们先请假一天,看看走哪个流程:

第六章:activiti流程分流判断之排它网关和并行网关任务表进入了leave002,说明没问题。

然后跑完流程,我们再测试days=4时走哪个;

启动流程一个新的流程:

@Test
	public void completeTaskVariablesTest(){
		Map<String, Object> variables=new HashMap<String,Object>();
		variables.put("days", "4");
		processEngine.getTaskService().complete("100004",variables);
	}

第六章:activiti流程分流判断之排它网关和并行网关

说明是没有问题。

下面我们介绍并行网关:

第六章:activiti流程分流判断之排它网关和并行网关

上图就存在leave002和leave003同时进行的审批流程,并行审批不常用,但是淘宝上,我们购买一件商品,确认付款后,的付款流程和发货流程是同时进行的。

这里我们先画个上面的图,这里中间的两个加号是在工具栏中的geteway的:

第六章:activiti流程分流判断之排它网关和并行网关

然后把流程的id改为4:

第六章:activiti流程分流判断之排它网关和并行网关

 这样就画好了:

测试代码:

package com.xiaoyexinxixn.ActivityLesson.flow;


import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

import com.xiaoyexinxixn.ActivityLesson.model.Student;

public class StudentLeaveProcess4 {
	//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
	private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
		Deployment deployment=processEngine.getRepositoryService()
		//创建部署
		.createDeployment()
		//加载流程图资源文件
		.addClasspathResource("diagrams/StudentLeave6.bpmn")
		//加载流程图片
		.addClasspathResource("diagrams/StudentLeave6.png")
		//流程名称
		.name("leave06")
		//部署流程
		.deploy();
		System.out.println("流程部署的ID: "+deployment.getId());
		System.out.println("流程部署的Name: "+deployment.getName());
	}
	
	/*
	 * 启动流程实例
	 */
	@Test
	public void start(){
		//运行启动流程的servicee
		ProcessInstance pi=processEngine.getRuntimeService()
		//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
		.startProcessInstanceByKey("studentLeaveProcess06");
		System.out.println(pi.getId());
		System.out.println(pi.getProcessDefinitionId());
	}
	}

部署流程,启动流程实例,

流程到leave001:

第六章:activiti流程分流判断之排它网关和并行网关

执行完成任务:

第六章:activiti流程分流判断之排它网关和并行网关

现在任务表有两个任务了,说明任务同时接受上一节点的任务。

接着先完成leave003的任务:

第六章:activiti流程分流判断之排它网关和并行网关

任务表还有一条数据,

这里要说一下,既然是并行任务就要两个任务都结束才能进入到下一个节点。否则完成了一个。另外一个就一直处于等待状态。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106141.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • python解释器在语法上不支持_语法测试

    python解释器在语法上不支持_语法测试1.安装Flake8必须在console中进行安装,示:pipinstallflake82.配置PycharmProgram:$PyInterpreterDirectory$/pythonarguments:-mflake8–max-line-length=130–excludevenv,migrations$ProjectFileDir$wor…

    2022年9月13日
  • 单面打印机打印双面小册子怎么打印_打印机小册子打印图解

    单面打印机打印双面小册子怎么打印_打印机小册子打印图解总结关键点:1.页数是4的倍数,不是的话在文件的前后同时添加空白页(前后的空白页会组成最外面的纸张);2.装订全部选择左/短边(尽管实际上是中线装订,并非靠边装订);3.进纸盒里要准备至少文档四分之一页数的纸张(例如:80页A5图片双面打印,需要80/2/2=20页,A4纸),提示缺纸的时候把出纸口的纸保持绝对朝向不变再次放入纸盒打印另一面,装好纸盒后按下进纸按钮(不要按电源键);…

    2022年9月6日
  • C语言小游戏之扫雷完整版

    C语言小游戏之扫雷完整版C语言小游戏之扫雷一.游戏介绍二.游戏步骤及实现的功能1.初始化雷盘2.打印雷盘3.随机布置雷4.玩家排雷5.防止玩家第一次被炸死6.统计所选位置周围八个位置中雷的个数7.拓展已选位置周围的区域8.标记雷及取消标记一.游戏介绍看到这张图片,相信很多小伙伴都非常熟悉,很多小伙伴都玩过扫雷这个小游戏,扫雷是一款益智类游戏,在放松娱乐的同时可以锻炼各位小伙伴的智商。游戏规则:如上图,玩家需要在不被炸死的前提下找出图中雷的位置,若能找出所有雷,则游戏胜利,若不幸踩到雷则被炸死。注:先介绍,后文会有完整代码

    2022年5月19日
  • jQuery图片延迟加载

    这里延迟加载的意思是,拖动滚动条时,在图片出现在浏览器显示区域后才加载显示。在这之前全部图片都由一张图片代替。节省流量,减轻服务器负担。效果展示 http://hovertree.com/t

    2021年12月28日
  • MFC 读取EXCEL中数据[通俗易懂]

    MFC 读取EXCEL中数据[通俗易懂]MFC读取Excel例子(2013-01-1200:04:24)转载▼标签:365mfcit分类:MFC-office操作1.       首先要将excel类添加到工程中。在ClassWizard中,【AddClass】,在Excel的安装目录找到Excel.exe(Microsoft2003是Excel

    2022年6月15日
  • webstorm2019.1激活码_通用破解码「建议收藏」

    webstorm2019.1激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号