第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用

大家好,又见面了,我是你们的朋友全栈君。

代码语言:javascript复制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);

}

}运行代码:

删除用户:

代码语言:javascript复制//删除用户

@Test

public void deleteUser(){

IdentityService identityService=processEngine.getIdentityService();

identityService.deleteUser("lisi");

}代码语言:javascript复制//添加组

@Test

public void saveGroupTest(){

IdentityService identityService=processEngine.getIdentityService();

Group group=new GroupEntity();

group.setId("testGroup");

identityService.saveGroup(group);

}运行结果:

代码语言:javascript复制//删除组

@Test

public void deleteGroupTest(){

IdentityService identityService=processEngine.getIdentityService();

identityService.deleteGroup("testGroup");

}代码语言:javascript复制//添加用户和组的关联关系

@Test

public void membershipTest(){

IdentityService identityService =processEngine.getIdentityService();

identityService.createMembership("zhangsan", "testGroup" );

}添加用户和组的关联关系方法的运行结果:

这里我们为了后面集成测试,这里多加几条数据,就算是把“zhangshan 和lisi都加到testGroup测试组这样一个业务”加后的数据库如下:

下面测删除关系:

//删除用户和组的关联关系

代码语言:javascript复制//删除用户和组的关联关系

@Test

public void membershipDelete(){

IdentityService identityService=processEngine.getIdentityService();

identityService.deleteMembership("zhangsan", "testGroup");

}写了一大坨,那么什么用处呢?现在开发的人都用过svn代码管理工具,对某一个项目的代码的读写人的设置,管理员可以一个一个的添加,也可以一组一组的添加,对于这个组的人都可以使用这个代码。这个组对应的就是我们上面的testGroup。

下面我们使用实例,把某一人物的可执行人,以组的形式进行添加。

首先画流程图

代码:

代码语言:javascript复制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的一条数据:

然后启动并查看任务候选者和参与者:

代码语言:javascript复制/*

* 启动流程实例

*/

@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 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());

}

}结果:

代码语言:javascript复制任务ID:232504

任务名称:leave001

任务创建时间:Wed Apr 25 12:56:20 CST 2018

任务委派人:null

任务流程实例Id:232501下面我们用变量设置组。

这里直接在上面建的流程图上做如下修改:

代码语言:javascript复制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 varibales=new HashMap();

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 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