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


相关推荐

  • Blazor入门_blazor视频教程

    Blazor入门_blazor视频教程NOW现在行动!Blazor是一个基于C#,Razor和HTML的新的WebUI框架。它通过WebAssembly运行在浏览器中。有利于使用C#而…

  • 2021年SpringBoot面试题30道「建议收藏」

    2021年SpringBoot面试题30道「建议收藏」文章目录前言SpringBoot面试题内容1.谈谈你对SpringBoot的理解?2.为什么需要SpringBoot?3.说出SpringBoot的优点4.SpringBoot的核心配置文件有哪几个?它们的区别是什么?5.SpringBoot的配置文件有哪几种格式?它们有什么区别?6.开启SpringBoot特性有哪几种方式?7.什么是SpringBootStarter?8.SpringBoot有哪几种读取配置的方式?9.SpringBoot支持哪些日志框架?推荐

  • C语言详细学生成绩管理系统

    C语言详细学生成绩管理系统C语言学生成绩管理系统简述:该学生管理系统数据结构采用结构体1、系统需求分析1.1系统介绍本学生管理系统是为教师人员提供管理班级成绩的工具,该系统可以实现的对学生的成绩进行增、删、改、查、信息保存和信息导入等基本功能,以及对学生成绩排序和分段的扩展功能,有利于对学生成绩管理。1.2功能性需求(1) 成绩录入(2) 成绩输出、成绩排序(按平均成绩)(3) 成绩查找(4) 成绩…

  • MinGW 安装教程

    前言本文主要讲述如何安装C语言编译器——MinGW,特点是文章附有完整详细的实际安装过程截图,文字反而起说明提示作用。编写本文的原因始于我的一个观点:图片可以比文字传达更多的信息,也能让其他人更容易理解作者的意图及思想。因此,我将安装MinGW的过程和步骤,编写成了这篇以图片为主的教程,为了让看到这篇文章的任何人,都可以很容易按照图片所示正确安装MinGW。一、什么是…

  • Layui分页_pagehelper分页使用

    Layui分页_pagehelper分页使用本文介绍了LayUI分页,LayUI动态分页,LayUIlaypage分页,LayUIlaypage刷新当前页,分享给大家,具体如下:效果图:一、引用js依赖主要是jquery-1.11.3.min.js和layui.all.js,json2.js用来做json对象转换的二、js分页方法封装(分页使用模板laytpl)1、模板渲染/***分页模板的渲染方法*@paramtemp…

    2022年10月28日
  • 信息学奥赛一本通(C++版) 网站补充题目

    信息学奥赛一本通(C++版) 网站补充题目总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716信息学奥赛一本通(C++版)网站补充题目http://ybt.ssoier.cn:8088//1414【2017NOIP普及组】成绩//样例通过,提交AC2017-12-3121:45#include&lt;stdio.h&gt;intmain(){…

    2022年10月27日

发表回复

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

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