当前位置:网站首页>第九章: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
边栏推荐
- Imitation SBUS fixed with serial data conversion
- Where is your most secretive personality?
- 21 Days of Deep Learning - Convolutional Neural Networks (CNN): Clothing Image Classification (Day 3)
- Why are RELTABLESPACE values 0 for many tables displayed in sys_class?
- MySQL data view
- What is CRM Decision Analysis Management?
- CPU的亲缘性affinity
- MySQL使用聚合函数可以不搭配GROUP BY分组吗?
- leetcode: 529. Minesweeper Game
- 无题一
猜你喜欢

19. Server-side session technology Session

Which big guy has the 11G GI and ojvm patches in April or January 2020, please help?

微服务 技术栈

5.部署web项目到云服务器

three.js debugging tool dat.gui use

Jenkins manual (2) - software configuration

The century-old Nordic luxury home appliance brand ASKO smart wine cabinet in the three-temperature area presents the Chinese Valentine’s Day, and tastes the love of the delicacy

Keil升级到AC6后,到底有哪些变化?

NowCoderTOP35-40 - continuous update ing

Technical dry goods | Hausdorff distance for image segmentation based on MindSpore
随机推荐
5. Deploy the web project to the cloud server
Tanabata romantic date without overtime, RPA robot helps you get the job done
JS逆向入门学习之回收商网,手机号码简易加密解析
第五章:redis持久化,包括rdb和aof两种方式[通俗易懂]
数据中台建设(十):数据安全管理
MySQL transactions
What is the function of the regular expression replaceFirst() method?
STM32+ULN2003驱动28BYJ4步进电机(根据圈数正转、反转)
静态链接和动态链接
After Keil upgrades to AC6, what changes?
MySQL data view
无题九
Four years of weight loss record
SD NAND Flash简介!
IO流篇 -- 基于io流实现文件夹拷贝(拷贝子文件夹及子文件夹内文件)满满的干货
新白娘子传奇系列
three.js调试工具dat.gui使用
Voice conversion相关语音数据集综合汇总
mysql进阶(二十七)数据库索引原理
[强网杯2022]WP-UM