当前位置:网站首页>第九章: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
边栏推荐
- 无题十三
- How can project cost control help project success?
- leetcode: 529. 扫雷游戏
- Pytorch Deep Learning Quick Start Tutorial -- Mound Tutorial Notes (3)
- After Keil upgrades to AC6, what changes?
- egg框架使用(一)
- hcip BGP 增强实验
- 【zeno】为zeno增加子模块/新节点的最小化的例子
- matcher中find,matches,lookingAt匹配字符串的不同之处说明
- 入门 Polkadot 平行链开发,看这一篇就够了
猜你喜欢
Seata source code analysis: initialization process of TM RM client
【zeno】为zeno增加子模块/新节点的最小化的例子
微服务 技术栈
【AGC】增长服务1-远程配置示例
项目成本控制如何帮助项目成功?
还在找网盘资源吗?快点收藏如下几个值得收藏的网盘资源搜索神器吧!
【温度预警程序de开发】事件驱动模型实例运用
阿里顶级架构师多年总结的JVM宝典,哪里不会查哪里!
【 temperature warning program DE development 】 event driven model instance
DFINITY 基金会创始人谈熊市沉浮,DeFi 项目该何去何从
随机推荐
IDEA performs the Test operation, resulting in duplicate data when data is inserted
The founder of the DFINITY Foundation talks about the ups and downs of the bear market, and where should DeFi projects go?
【zeno】为zeno增加子模块/新节点的最小化的例子
【Unity】【UGUI】【在屏幕上显示文本】
创建一个 Dapp,为什么要选择波卡?
Seata source code analysis: initialization process of TM RM client
three objects are arranged in a spherical shape around the circumference
ffmpeg drawtext 添加文本水印
IO流篇 -- 基于io流实现文件夹拷贝(拷贝子文件夹及子文件夹内文件)满满的干货
使用工具类把对象中的null值转换为空字符串(集合也可以使用)
首次去中心化抢劫?近2亿美元损失:跨链桥Nomad 被攻击事件分析
mysql索引
static linking and dynamic linking
2022 Huashu Cup Mathematical Modeling Question A Optimization Design Ideas for Ring Oscillators Code Sharing
MySQL advanced (twenty-seven) database index principle
技术干货 | 基于 MindSpore 实现图像分割之豪斯多夫距离
JS逆向入门学习之回收商网,手机号码简易加密解析
IO stream articles -- based on io stream to realize folder copy (copy subfolders and files in subfolders) full of dry goods
SD NAND Flash简介!
Brief Analysis of WSGI Protocol