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 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 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");
}
然后部署流程实例,启动,查看任务,就能够在查看任务方法中看到结果