第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

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

package com.xiaoyexinxixn.ActivityLesson;

import static org.junit.Assert.*;

import javax.sound.midi.VoiceStatus;

import org.activiti.engine.IdentityService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.identity.User;
import org.activiti.engine.impl.persistence.entity.UserEntity;
import org.junit.Test;

public class IdentitiyTest {

	//获取流程引擎
	ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
	
	//添加用户测试
	@Test
	public void testSaveUser(){
		IdentityService identitiyService= processEngine.getIdentityService();
		User user=new UserEntity();
		user.setId("zhangsan");
		user.setPassword("123");
		user.setEmail("1123@qq.com");
		identitiyService.saveUser(user);
	}

}

运行代码:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

删除用户:

//删除用户
	@Test
	public void deleteUser(){
		IdentityService identityService=processEngine.getIdentityService();
		identityService.deleteUser("lisi");
	}

//添加组
	@Test
	public void saveGroupTest(){
		IdentityService identityService=processEngine.getIdentityService();
		Group group=new GroupEntity();
		group.setId("testGroup");
		identityService.saveGroup(group);
	}

运行结果:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

//删除组
	@Test
	public void deleteGroupTest(){
		IdentityService identityService=processEngine.getIdentityService();
		identityService.deleteGroup("testGroup");
	}
//添加用户和组的关联关系
	@Test
	public void membershipTest(){
		IdentityService identityService =processEngine.getIdentityService();
		identityService.createMembership("zhangsan", "testGroup" );
	}

添加用户和组的关联关系方法的运行结果:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

这里我们为了后面集成测试,这里多加几条数据,就算是把“zhangshan 和lisi都加到testGroup测试组这样一个业务”加后的数据库如下:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

 

下面测删除关系:

//删除用户和组的关联关系

//删除用户和组的关联关系
	@Test
	public void membershipDelete(){
		IdentityService identityService=processEngine.getIdentityService();
		identityService.deleteMembership("zhangsan", "testGroup");
	}

写了一大坨,那么什么用处呢?现在开发的人都用过svn代码管理工具,对某一个项目的代码的读写人的设置,管理员可以一个一个的添加,也可以一组一组的添加,对于这个组的人都可以使用这个代码。这个组对应的就是我们上面的testGroup。

下面我们使用实例,把某一人物的可执行人,以组的形式进行添加。

首先画流程图

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

代码:

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 GroupLeaveProcess {
	//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
	private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
		Deployment deployment=processEngine.getRepositoryService()
		//创建部署
		.createDeployment()
		//加载流程图资源文件
		.addClasspathResource("diagrams/GroupLeave.bpmn")
		//加载流程图片
		.addClasspathResource("diagrams/GroupLeave.png")
		//流程名称
		.name("group")
		//部署流程
		.deploy();
		System.out.println("流程部署的ID: "+deployment.getId());
		System.out.println("流程部署的Name: "+deployment.getName());
	}
}

部署上面代码,成功后会在数据库的部署表act_re_deployment 有名为group的一条数据:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

然后启动并查看任务候选者和参与者:

/*
	 * 启动流程实例
	 */
	@Test
	public void start(){
		//运行启动流程的servicee
		ProcessInstance pi=processEngine.getRuntimeService()
		//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
		.startProcessInstanceByKey("GroupLeaveProcess");
		System.out.println(pi.getId());
		System.out.println(pi.getProcessDefinitionId());
	}
	
	/**
	 * 查看任务
	 */
	@Test
	public void findTaskList(){
		//获取任务列表的service
		List<Task> taskList=processEngine.getTaskService()
				//创建任务查询
				.createTaskQuery()
				//指定任务的执行人
//				.taskAssignee("lisi")
				.taskCandidateUser("lisi")
				.list();
		for(Task task:taskList){
			System.out.println("任务ID:"+task.getId());
			System.out.println("任务名称:"+task.getName());
			System.out.println("任务创建时间:"+task.getCreateTime());
			System.out.println("任务委派人:"+task.getAssignee());
			System.out.println("任务流程实例Id:"+task.getProcessInstanceId());
		}
	}
	

结果:

任务ID:232504
任务名称:leave001
任务创建时间:Wed Apr 25 12:56:20 CST 2018
任务委派人:null
任务流程实例Id:232501

下面我们用变量设置组。

    这里直接在上面建的流程图上做如下修改:

第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

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 org.springframework.jca.cci.object.MappingCommAreaOperation;

import com.xiaoyexinxixn.ActivityLesson.model.Student;

public class GroupLeaveProcess {
	//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
	private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
		Deployment deployment=processEngine.getRepositoryService()
		//创建部署
		.createDeployment()
		//加载流程图资源文件
		.addClasspathResource("diagrams/GroupLeave.bpmn")
		//加载流程图片
		.addClasspathResource("diagrams/GroupLeave.png")
		//流程名称
		.name("group")
		//部署流程
		.deploy();
		System.out.println("流程部署的ID: "+deployment.getId());
		System.out.println("流程部署的Name: "+deployment.getName());
	}
	
	/*
	 * 启动流程实例
	 */
	@Test
	public void start(){
		Map<String,Object> varibales=new HashMap<String,Object>();
		varibales.put("groupId", "testGroup");
		//运行启动流程的servicee
		ProcessInstance pi=processEngine.getRuntimeService()
		//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
		.startProcessInstanceByKey("GroupLeaveProcess",varibales);
		System.out.println(pi.getId());
		System.out.println(pi.getProcessDefinitionId());
	}
	
	/**
	 * 查看任务
	 */
	@Test
	public void findTaskList(){
		//获取任务列表的service
		List<Task> taskList=processEngine.getTaskService()
				//创建任务查询
				.createTaskQuery()
				//指定任务的执行人
//				.taskAssignee("lisi")
				.taskCandidateUser("lisi")
				.list();
		for(Task task:taskList){
			System.out.println("任务ID:"+task.getId());
			System.out.println("任务名称:"+task.getName());
			System.out.println("任务创建时间:"+task.getCreateTime());
			System.out.println("任务委派人:"+task.getAssignee());
			System.out.println("任务流程实例Id:"+task.getProcessInstanceId());
		}
	}
	
	/**
	 * 完成任务
	 */
	@Test
	public void completeTask(){
		processEngine.getTaskService().complete("232504");
	}
	

然后部署流程实例,启动,查看任务,就能够在查看任务方法中看到结果

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

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

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


相关推荐

  • java中什么是重载什么是重写_java的重载

    java中什么是重载什么是重写_java的重载我们先从定义上区分重载和重写:1、重载(overload)是发生在同个类中的具有相同的方法名,不同的参数类型(不同的参数类型包括:参数的个数和参数的类型和顺序不同),返回值相同或者不同的一种多态的体现。从返回值类型相同或者不相同可以看出,我们不能根据方法的返回值来判断是否为重载。例如:下类Animal中的getFun方法构成了方法的重载publicclassAnimal{publicvoid…

    2025年10月15日
    4
  • python基础01

    python基础01python简介诞生:创建人:GuidoVanRossum(荷兰人)时间:1989年python的应用领域系统运维网络编程(搜索引擎,爬虫,服务器编程)科学计算人工智能,机器人云计

    2022年7月6日
    26
  • VBS整人代码(一串代码让全班同学说卧槽)

    一、做我女朋友吗,告白(抖音里很火的)无危害msgbox(“做我女朋友可以吗?”)msgbox(“房产证上写你名”)msgbox(“保大”)msgbox(“我妈会游泳”)m=MsgBox(“做我女朋友好吗?”,vbOKCancel)Ifm=vbOKThenMsgbox(“爱你么么哒”)Ifm=vbCancelThenMsgBox”不喜欢你了”,vbCrit…

    2022年4月9日
    4.8K
  • LINUX+APACHE+MYSQL+PHP+SVN+SVNMANAGER编译安装配置

    LINUX+APACHE+MYSQL+PHP+SVN+SVNMANAGER编译安装配置

    2021年8月13日
    59
  • 详解LK光流法(含金字塔多层光流),反向光流法(附代码)「建议收藏」

    详解LK光流法(含金字塔多层光流),反向光流法(附代码)「建议收藏」LK光流法可用来跟踪特征点的位置。比如在img1中的特征点,由于相机或物体的运动,在img2中来到了不同的位置。后面会称img1为Template(T),img2为I。光流法有个假设:灰度不变假设:同一个空间点的像素灰度值,在各图像中是不变的,也就是说T中特征点处的灰度,到了I中仍然是一样的灰度。这就要求光照恒定,物体反射恒定,是个很强的假设。现在要估计的是运动偏移量[dx,dy],也就是光流。仅用一个点无法解,一般会取一个窗口内的像素,考虑它们具有相同的运动。用最小二乘法来解像素的运动如下:

    2022年7月23日
    26
  • 解决Navicat for MySQL 连接 Mysql 8.0.11 出现1251- Client does not support authentication protocol 错误

    解决Navicat for MySQL 连接 Mysql 8.0.11 出现1251- Client does not support authentication protocol 错误今天在电脑上安装了Mysql8.0.11,然后又屁颠屁颠地安装了NavicatforMySQL,打开Navicat准备链接数据库的时候出现了如下提示:上网搜索解决方案,网上说出现这种情况的原因是:mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,解决问题方法有两种:方法…

    2022年5月30日
    42

发表回复

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

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