当前位置:网站首页>第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用
第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用
2022-08-05 10:05:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
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("[email protected]");
identitiyService.saveUser(user);
}
}运行代码:
删除用户:
//删除用户
@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);
}运行结果:
//删除组
@Test
public void deleteGroupTest(){
IdentityService identityService=processEngine.getIdentityService();
identityService.deleteGroup("testGroup");
}//添加用户和组的关联关系
@Test
public void membershipTest(){
IdentityService identityService =processEngine.getIdentityService();
identityService.createMembership("zhangsan", "testGroup" );
}添加用户和组的关联关系方法的运行结果:
这里我们为了后面集成测试,这里多加几条数据,就算是把“zhangshan 和lisi都加到testGroup测试组这样一个业务”加后的数据库如下:
下面测删除关系:
//删除用户和组的关联关系
//删除用户和组的关联关系
@Test
public void membershipDelete(){
IdentityService identityService=processEngine.getIdentityService();
identityService.deleteMembership("zhangsan", "testGroup");
}写了一大坨,那么什么用处呢?现在开发的人都用过svn代码管理工具,对某一个项目的代码的读写人的设置,管理员可以一个一个的添加,也可以一组一组的添加,对于这个组的人都可以使用这个代码。这个组对应的就是我们上面的testGroup。
下面我们使用实例,把某一人物的可执行人,以组的形式进行添加。
首先画流程图
代码:
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的一条数据:
然后启动并查看任务候选者和参与者:
/*
* 启动流程实例
*/
@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下面我们用变量设置组。
这里直接在上面建的流程图上做如下修改:
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.cn/106136.html原文链接:https://javaforall.cn
边栏推荐
猜你喜欢

DFINITY 基金会创始人谈熊市沉浮,DeFi 项目该何去何从

The technological achievements of Shanghai Konan were selected into the "2021 Shanghai Network Security Industry Innovation Research Achievement Catalog" by the Municipal Commission of Economy and Inf

dotnet OpenXML parsing PPT charts Getting started with area charts

自定义过滤器和拦截器实现ThreadLocal线程封闭

What is CRM Decision Analysis Management?

偏向锁/轻量锁/重级锁锁锁更健康,上锁解锁到底是怎么完成实现的

Egg framework usage (1)

mysql进阶(二十七)数据库索引原理

还在找网盘资源吗?快点收藏如下几个值得收藏的网盘资源搜索神器吧!

茄子科技CEO仇俊:以用户为中心,做用户真正需要的产品
随机推荐
MySQL data view
2022华数杯数学建模A题环形振荡器的优化设计思路思路代码分享
哪位大佬有20年4月或者1月的11G GI和ojvm补丁呀,帮忙发下?
创建一个 Dapp,为什么要选择波卡?
leetcode: 529. 扫雷游戏
js劫持数组push方法
一个栈的输入序列为1 2 3 4 5 的出站顺序的理解
Pycharm 常用外部工具
技术干货 | 基于 MindSpore 实现图像分割之豪斯多夫距离
基于MindSpore高效完成图像分割,实现Dice!
Qiu Jun, CEO of Eggplant Technology: Focus on users and make products that users really need
What is the function of the regular expression replaceAll() method?
气象数据数据处理实例——matlab字符串切割匹配与R语言日期匹配(数据拼接)
three objects are arranged in a spherical shape around the circumference
Advanced usage of C language
2022 Huashu Cup Mathematical Modeling Question A Optimization Design Ideas for Ring Oscillators Code Sharing
为什么sys_class 里显示的很多表的 RELTABLESPACE 值为 0 ?
hcip BGP 增强实验
Oracle temporary table space role
IO stream articles -- based on io stream to realize folder copy (copy subfolders and files in subfolders) full of dry goods