第六章: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • HTML网页设计大一期末考试_酒店网页设计特色

    HTML网页设计大一期末考试_酒店网页设计特色旅游住宿酒店的HTML网页设计14页~学生网页设计与制作期末作业下载~大学生网页设计与制作成品下载~DW旅游网页作业代码下载临近期末,你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业无从下手?网页要求的总数量太多?没有合适的模板?等等一系列问题。你想要解决的问题,在这篇博文中基本都能满足你的需求~原始HTML+CSS+JS页面设计,web大学生网页设计作业源码,这是一个不错的网页制作,画面精明,非常适合初学者学习使用。作品介绍1.网页作品简介方面:HTML期末

    2025年10月1日
    3
  • 手机页面的前端开发工具_手机web页面

    手机页面的前端开发工具_手机web页面1.元素使用rem单位(相对于html的font-size,单位px)2.元素使用em单位(相对于自身的font-size,单位px)媒体查询样式的条件可以使用and满足想要的范围注意:手

    2022年8月3日
    8
  • linux 安装 配置tomcat8,linux安装配置多个tomcat,linux安装部署2个以上tomcat[通俗易懂]

    linux 安装 配置tomcat8,linux安装配置多个tomcat,linux安装部署2个以上tomcat[通俗易懂]一、Tomcat下载点击此处进入官网下载tomcat二、Tomcat安装部署1.创建路径并上传tomcat–创建文件夹mkdir/tomcat–进入文件夹cd/tomcat–解压文件tar-xzvfapache-tomcat-8.5.47.tar.gz–重命名mvapache-tomcat-8.5.47tomcat8.5-8080…

    2022年5月5日
    49
  • 基于MVP架构设计ASP.Net的应用研究

    基于MVP架构设计ASP.Net的应用研究

    2021年7月26日
    57
  • android默认打开方式修改_setcontenttype方法

    android默认打开方式修改_setcontenttype方法android打开文件,intent的使用

    2022年10月14日
    6
  • C51单片机LCD1602驱动程序

    C51单片机LCD1602驱动程序C51单片机LCD1602驱动程序LCD1602简介1602的引脚操作时序写操作时序时序参数LCD1602关键性操作一、初始化二、清屏指令二、进入模式设置指令三、显示开关控制指令四、功能设定指令RAM地址映射图LCD1602简介LCD1602字符型液晶(每行显示16个字符,一共可以显示两行)——一种专门用来显示字母、数字、符号的点阵型液晶模块。它由若干个57或者510的点阵字符组成,每个点阵字符位都可以用来显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此

    2022年7月16日
    18

发表回复

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

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