第九章: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");
	}
	

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 宝塔安装mysql失败_手机如何卸载宝塔防火墙

    宝塔安装mysql失败_手机如何卸载宝塔防火墙先用宝塔自带卸载宝塔软件环境默认是不卸载得mysql先停止服务,再删除服务apache先停止服务,再删除服务然后安装新的宝塔即可

  • MySQL中聚集索引、非聚集索引、联合索引、覆盖索引[通俗易懂]

    MySQL中聚集索引、非聚集索引、联合索引、覆盖索引[通俗易懂]在《面试官:为啥加了索引查询会变快?》一文中,我们介绍了索引的数据结构,正是因为索引使用了B+树,才使得查询变快。说白了,索引的原理就是减少查询的次数、减少磁盘IO,达到快速查找所需数据的目的我们一起来看一下InnoDB存储引擎中的索引聚集索引聚集索引(clusteredindex)就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的即为整张表的行记录数据,也将聚集索引的叶子节点称为数据页。聚集索引的这个特性决定了索引组织表中数据也是索引的一部分(备注:真实的B+树叶子节点是通过链表相连的,

  • .Net多线程总结

    .Net多线程总结

  • 硬盘显示文件系统RAW要如何办啊

    硬盘显示文件系统RAW要如何办啊F盘打不开文件系统RAW,是因为这个I盘的文件系统内部结构损坏导致的。要恢复里面的数据就必须要注意,这个盘不能格式化,否则数据会进一步损坏。具体的恢复方法看正文

  • Java并发的CAS原理详解[通俗易懂]

    Java并发的CAS原理详解[通俗易懂]Java并发编程中的CAS原理是很重要的概念。CAS加volatile关键字是实现并发包的基石。没有CAS就不会有并发包,synchronized是一种独占锁、悲观锁,java.util.concurrent中借助了CAS指令实现了一种区别于synchronized的一种乐观锁。乐观锁和悲观锁的概念请参考Java中的21种锁。在Java中java.util.concurrent.atomic包下面的原子变量就是使用了乐观锁的一种实现方式CAS实现。在JDK5之前Java语言是靠synchroniz

    2022年10月10日
  • ubuntu安装deb文件_ubuntu安装完deb后找不到

    ubuntu安装deb文件_ubuntu安装完deb后找不到下载deb包到找到下载目录sudodpkg-iXXX.deb如果提示没有依赖sudoapt-getinstall-f如果提示依赖下载源没有找到(404),请到systemsettings—software&updates—-ubuntusoftware的sourcecode勾选并设置downloadfromchina某源网站,再运行sudoapt-getinsta

发表回复

您的电子邮箱地址不会被公开。

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