`
Algernoon
  • 浏览: 22747 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

activiti测试(部署,启动,查看状态,查看私有和公有任务)

阅读更多

包含部署流程,获取流程实例,查看私有任务和公有任务的抽取出来的工具类

package com.liuzm.activiti.day2;

import java.io.InputStream;
import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;


public class BPMNTestUtils {
	//获取核心对象
	private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
	//获取服务
	protected RepositoryService repositoryService = processEngine.getRepositoryService();
	protected RuntimeService runtimeService = processEngine.getRuntimeService();
	protected TaskService taskService = processEngine.getTaskService();
	
	//部署流程
	public void deployProcess(String resourceName){
		//创建部署配置对象
		DeploymentBuilder builder = repositoryService.createDeployment();
		//获取某文件夹下指定名称对应的流
		InputStream inputStream = this.getClass().getResourceAsStream(resourceName);
		//做配置
		builder.addInputStream(resourceName, inputStream );
		//部署
		builder.deploy();
	}
	
	//获取流程实例
	public ProcessInstance getProcessInstance(String processDefinitionId){
		return runtimeService.createProcessInstanceQuery().processDefinitionId(processDefinitionId).singleResult();
	}
	
	//获取私有任务列表
	public List<Task> getPersonalTask(String assignee){
		return taskService.createTaskQuery().taskAssignee(assignee).list();
	}
	
	//获取共有任务列表
	public List<Task> getCommonTask(String candidateUser){
		return taskService.createTaskQuery().taskCandidateUser(candidateUser).list();
	}
}

 简单的 部署流程,启动流程,查看状态的测试

 

package com.liuzm.activiti.day2.start;

import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test;
import org.springframework.util.Assert;

import com.liuzm.activiti.day2.BPMNTestUtils;

/**
 *	测试步骤
 *	1.部署规则
 *	2.启动流程
 *	3.查看流程状态
 */
public class StartTest extends BPMNTestUtils{
	@Test
	public void test1() throws Exception {
		//部署规则
		deployProcess("start.bpmn");
		//启动流程
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("start");
		String pid = processInstance.getId();
		System.out.println("启动时的     processInstance : "+processInstance);
		//查看流程状态
		ProcessInstance processInstance2 = getProcessInstance(pid);
		System.out.println("流程结束时     processInstance : "+processInstance2);
		if (processInstance.isEnded()) {
			System.out.println("流程成功执行完毕!!!");
		}
	}
	
	@Test
	public void test2() throws Exception {
		//部署流程规则
		deployProcess("start2.bpmn");
		//启动流程
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("start2");
		String pid = processInstance.getId();
		//检查流程状态
		Assert.isTrue(processInstance.isEnded());
		System.out.println("流程成功执行完毕!!!");
	}
	

}

 查看私有任务,公有任务的测试用例(包括动态分配任务)

 

package com.liuzm.activiti.day2.usertask;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Assert;
import org.junit.Test;

import com.liuzm.activiti.day2.BPMNTestUtils;

/**
 * 私有任务和公有任务的测试
 */
public class UserTaskTest extends BPMNTestUtils {

	// 私有任务测试
	@Test
	public void personalTaskTest() throws Exception {
		// 部署流程规则
		deployProcess("task1.bpmn");
		// 启动流程
		ProcessInstance processInstance = runtimeService
				.startProcessInstanceByKey("task1");
		String pid = processInstance.getId();

		String assignee = "小明";
		List<Task> tasks = getPersonalTask(assignee);
		Assert.assertEquals(1, tasks.size());

		Task task = tasks.get(0);
		Assert.assertEquals("上交作业", task.getName());

		taskService.complete(task.getId());

		// 第二个任务
		assignee = "张老师";
		List<Task> tasks2 = getPersonalTask(assignee);
		Assert.assertEquals(1, tasks2.size());

		Task task2 = tasks2.get(0);
		Assert.assertEquals("批改作业", task2.getName());
		taskService.complete(task2.getId());

		// 检查流程状态
		Assert.assertNull(getProcessInstance(pid));
		System.out.println("私有任务成功执行!!");
	}

	@Test
	public void commonTaskTest() throws Exception {
		// 部署流程规则
		// deployProcess("task2.bpmn");
		// 启动服务
		// ProcessInstance processInstance =
		// runtimeService.startProcessInstanceByKey("task2");
		// String pid = processInstance.getId();
		String pid = "1505";
		System.out.println(pid);

		// 检查私有任务
		String assignee = "张三";
		List<Task> tasks1 = getPersonalTask(assignee);
		Assert.assertEquals(1, tasks1.size());
		System.out.println("张三的私有任务列表: " + tasks1);

		assignee = "李四";
		List<Task> tasks2 = getPersonalTask(assignee);
		Assert.assertEquals(0, tasks2.size());
		System.out.println("李四的私有任务列表: " + tasks2);

		// 检查共有任务列表
		String candidateUser = "张三";
		List<Task> tasks3 = getCommonTask(candidateUser);
		// Assert.assertEquals(1, tasks3.size());// 张三认领任务前
		Assert.assertEquals(0, tasks3.size()); // 张三认领任务后
		System.out.println("张三的公有任务列表: " + tasks3);

		candidateUser = "李四";
		List<Task> tasks4 = getCommonTask(candidateUser);
		// Assert.assertEqual(1, tasks4.size()); //张三认领任务前
		Assert.assertEquals(0, tasks4.size()); // 张三认领任务后
		System.out.println("李四的公有任务列表: " + tasks4);

		// 公有任务的认领
		System.out.println("=============张三领取任务============");
		// String taskId = tasks3.get(0).getId();
		// taskService.claim(taskId , "张三");

		// 再检查公有任务列表
		List<Task> tasks5 = getCommonTask("张三");
		Assert.assertEquals(0, tasks5.size());
		System.out.println("张三的公有任务列表: " + tasks5);

		List<Task> tasks6 = getCommonTask("李四");
		Assert.assertEquals(0, tasks6.size());
		System.out.println("李四的公有任务列表: " + tasks6);

		// 私有任务列表
		List<Task> tasks7 = getPersonalTask("张三");
		Assert.assertEquals(1, tasks7.size());
		System.out.println("张三的私有任务列表: " + tasks7);

		List<Task> tasks8 = getPersonalTask("李四");
		Assert.assertEquals(0, tasks8.size());
		System.out.println("李四的私有任务列表: " + tasks8);

		// 张三完成任务
		taskService.complete(tasks7.get(0).getId());

		// 检查流程状态
		Assert.assertNull(getProcessInstance(pid));
		System.out.println("张三领取任务<-->流程成功执行");

		// 运行结果:
		// 1505
		// 张三的私有任务列表: [Task[id=1508, name=打扫教室]]
		// 李四的私有任务列表: []
		// 张三的公有任务列表: []
		// 李四的公有任务列表: []
		// =============张三领取任务============
		// 张三的公有任务列表: []
		// 李四的公有任务列表: []
		// 张三的私有任务列表: [Task[id=1508, name=打扫教室]]
		// 李四的私有任务列表: []
		// 张三领取任务<-->流程成功执行
	}

	// 动态办理任务
	@Test
	public void completeTaskAuto() throws Exception {
		// 部署流程规则
		deployProcess("task3.bpmn");
		// 放入流程变量
		Map<String,Object> variables = new HashMap<String, Object>();
		variables.put("user", "小明");
		// 启动流程
		ProcessInstance processInstance = runtimeService
				.startProcessInstanceByKey("task3",variables);
		String pid = processInstance.getId();
		
		String assignee = "小明";
		List<Task> tasks = getPersonalTask(assignee);
		Assert.assertEquals(1, tasks.size());
	
		Task task = tasks.get(0);
		Assert.assertEquals("提交任务", task.getName());
		
		//完成任务
		taskService.complete(task.getId());
		
		//检查流程状态
		Assert.assertNull(getProcessInstance(pid));
		System.out.println("动态办理任务流程成功执行!!!");
	}

	// 动态办理任务 -->动态任务分配处理器
	@Test
	public void completeTaskAuto2() throws Exception {
		// 部署流程规则
		deployProcess("task4.bpmn");
		// 启动流程 
		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("task4");
		String pid = processInstance.getId();
		
		String assignee = "小青";
		List<Task> tasks = getPersonalTask(assignee);
		Assert.assertEquals(1, tasks.size());
		
		Task task = tasks.get(0);
		Assert.assertEquals("经理审批", task.getName());
	
		// 完成任务
		taskService.complete(task.getId());
		
		// 检查流程状态
		Assert.assertNull(getProcessInstance(pid));
		System.out.println("动态分配任务处理器分配任务完成!!!");
	}
	
}

 上述的动态分配任务处理器需要下边的类来为其设置完成任务的对象,并且相应的节点的Listener需要监听下边的类

 

package com.liuzm.activiti.day2.usertask;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class ManagerTaskHandler implements TaskListener{

	@Override
	public void notify(DelegateTask delegateTask) {
		// 设置任务办理者
		delegateTask.setAssignee("小青");
		// 设置任务候选者
		//delegateTask.addCandidateUser(userId);
	}

}

 

 

分享到:
评论

相关推荐

    Activiti(测试的代码)

    Activiti(测试的代码以及写过的案例)Activiti(测试的代码以及写过的案例)Activiti(测试的代码以及写过的案例)Activiti(测试的代码以及写过的案例)Activiti(测试的代码以及写过的案例)Activiti(测试的代码以及写过的...

    Activiti的流程部署

    Activiti的流程部署Activiti的流程部署Activiti的流程部署Activiti的流程部署

    activiti 7 + springboot2(五) 部署测试一个流程 源码

    1.部署流程定义 ,执行此操作后 activiti 会将上边代码中指定的 bpm 文件和图片文件保存在 activiti 数据库。 2.启动一个流程实例 3.任务查询 4.完成任务

    Activiti流程图部署及流程图部分操作.pdf

    Activiti流程图部署及流程图部分操作 流程图部署及流程图部分操作 流程图部署有两种⽅式,⼀种是通过classpath,另⼀种是通过zip⽂件 通过classpath⽅式如下 public void deploymentProcessDefinition_classpath() {...

    activiti流程图查看demo

    activiti流程图查看demo

    activiti工作流测试

    自己总结的activiti测试实例,博客发表了详细流程,供新手入门 https://blog.csdn.net/qq_35463719/article/details/82970172

    activiti部署中文乱码解决,亲测有效,替换三个文件

    activiti部署中文乱码解决,亲测有效, 1.activiti-webapp-explorer2\src\main\webapp\editor-app\i18n下en.json 2.activiti-webapp-explorer2\src\main\resources下 activiti-custom-context.xml 3.activiti-webapp-...

    activiti测试demo

    此文件为本人对activit测试的各种demo,符合工作流开发的各种场景,工作中的测试部分尽在这里,包括对在线编辑器的整合

    activiti测试maven项目源代码

    activiti框架的极简单的测试项目源代码,基于maven依赖自动下载相关包,可以用来学习,测试activiti的各种api

    Activiti 部署和开发

    ssh上的Activiti 环境搭建和开发,从下载,搭建开发环境,到怎么画流程图,怎么部署;最后怎么进行业务开发,都有比较详细的介绍。

    Activiti多实例任务实现会签

    Activiti多实例任务实现会签.

    Activiti工作流笔记.chm

    Activiti工作流的课件整体、讲师: 刘洋 内容如下: 1:工作流的概念 1 2:工作流的执行过程 1 3:Activiti介绍 1 3.1:工作流引擎 2 3.2:BPMN 2 3.3:数据库(先学后看) 2 3.4:activiti.cfg.xml(activiti的配置...

    activiti6.0 自定义流程路径颜色和任务颜色

    重写流程图生产代码,需要枪原来的图片生产代码复写,原版的颜色生产不支付传入颜色参数,重写之后支持自定义颜色参数!用于区分流程状态

    springboot+activiti部署插件集成

    springboot+activiti部署插件集成,直接运行。访问xx/models/newModel 返回数据中有个id, 然后访问/modeler.html?modelId=id 即可编辑

    Activiti12流程跟踪任务节点和线高亮显示

    Activiti12流程跟踪任务节点和线高亮显示,能标记流程所走过节点和线为红色,未走过的节点和线不标记,支持驳回和子流程。

    Activiti基础视频教程下载

    Activiti5企业开发实例讲解,Activiti5是一款...Activiti操作流程的步奏、常见API使用、流程部署管理(发布流程、查看流程定义、删除流程、查看流程附件)、流程实例管理(启动流程、查看任务、认领任务、办理任务、查看流

    Activiti 学习笔记13:分配组任务

    Activiti 学习笔记13:分配组任务

    Activiti6.0教程例子下载

    并结合Activiti Api这一章节来看,你就会对部署流程、启动流程、执行任务等操作有一个基本的概念。之后编写一个简单的单元测试,主要为了测试activiti.cfg.xml配置的是否正确,流程是否可以被部署即可。 至于与...

    最新Activiti视频教程,包含视频、源码、IDE集成Activiti插件、Activiti-5.22.0的pdm数据库表结构文件、教程菜单

    在原有Activiti的教程资源上对零散的源码进行了集中整理,并增加了pdm、IDE集成Activiti插件等文件...06 - Activiti任务分配 1.个人任务分配 2.多用户任务分配 3.内置用户组设计表以及IdentityService 4.组任务分配

Global site tag (gtag.js) - Google Analytics