包含部署流程,获取流程实例,查看私有任务和公有任务的抽取出来的工具类
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); } }
相关推荐
9. **流程调试**:Activiti 提供了调试工具,使得开发者可以在运行时检查流程状态,这对于测试和调试流程逻辑非常有用。 10. **扩展性**:Activiti 的强大之处在于其高度可扩展性,可以通过插件系统和自定义行为...
在实际应用中,查询结果通常会用到后续的操作,比如启动流程实例、查询运行中的任务、办理任务等。理解并熟练掌握流程图的部署和查询是使用Activiti进行业务流程自动化开发的基础。 总之,Activiti流程图的部署和...
Activiti工作流测试是针对Activiti这一开源工作流引擎进行的一种实践操作,旨在帮助开发者理解和掌握如何在实际项目中运用Activiti。Activiti是一个轻量级、高效且灵活的业务流程管理(BPM)系统,它能够处理业务...
Activiti(测试的代码以及写过的案例)Activiti(测试的代码以及写过的案例)Activiti(测试的代码以及写过的案例)Activiti(测试的代码以及写过的案例)Activiti(测试的代码以及写过的案例)Activiti(测试的代码以及写过的...
这个"activiti流程图查看demo"是一个示例项目,旨在帮助用户理解如何在Activiti中查看和操作流程图。在本篇文章中,我们将深入探讨Activiti的核心概念、流程图的查看方法以及如何利用diagram-viewer工具来实现这一...
- Activiti 提供了一个图形化的流程设计工具(Activiti Modeler),使得非程序员也能设计和部署流程。 2. **Maven**: - Maven 是 Apache 维护的一个项目管理工具,它通过使用一个项目对象模型(Project Object ...
Activiti流程部署是Activiti工作流管理系统的核心功能之一,它允许用户将设计好的业务流程定义文件部署到Activiti引擎中,从而使得流程可以被启动和执行。在进行流程部署之前,需要了解与Activiti流程部署相关的知识...
总结来说,本篇主要介绍了如何在Activiti 7和SpringBoot 2的环境中,通过源码部署流程定义、启动流程实例、查询任务以及完成任务。理解并熟练掌握这些基本操作,是构建高效流程管理系统的基石。在实践中,不断探索和...
接着,配置Activiti的相关bean,如`ProcessEngine`和`RepositoryService`等,以便在Spring Boot环境中启动和管理Activiti。 2. **Activiti模型管理**:描述中提到的"xx/models/newModel"可能是用于创建新工作流模型...
7. Activiti API:在代码中,开发者可以使用Activiti的API来查询、启动和处理多实例任务,如`runtimeService.createProcessInstanceQuery()`、`taskService.complete(taskId)`等。 8. 监控与跟踪:Activiti提供的...
总结起来,"activiti6.0 自定义流程路径颜色和任务颜色"是通过扩展 Activiti 的流程图生成类,重写绘图逻辑,以支持根据业务状态显示不同颜色的任务和流程路径。这样的定制化可以显著提升流程图的可读性和业务分析的...
### Activiti 部署和开发 #### 一、概览 Activiti是一个开源的工作流引擎,用于构建业务流程管理(BPM)应用。它提供了一种简单而强大的方式来定义和执行业务流程,并且可以很容易地与Java应用程序集成。本文档将详细...
将流程定义文件部署到Activiti引擎,以便可以启动和执行。在Java代码中,你可以通过`RepositoryService`的`deploy()`方法实现部署。 6. **启动流程实例** 部署流程定义后,可以通过调用`RuntimeService`的`...
2. **流程实例和任务管理**:在 Activiti 中,每个流程定义创建一个流程实例,而实例中的每个步骤则表示一个任务。源码中可以研究流程实例的启动、暂停、恢复和结束,以及任务的创建、分配、完成和删除等操作的实现...
在“Activiti学习文档(二)之画流程图并部署流程”中,我们将深入探讨如何设计和部署工作流程。 首先,流程图是Activiti中至关重要的部分,它使用Business Process Model and Notation (BPMN) 2.0标准来表示业务...
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-...
6. 配置Tomcat:将Activiti的war文件部署到Tomcat的webapps目录下,然后启动Tomcat服务器。如果一切配置正确,Activiti Server应该可以正常运行,并提供RESTful接口供外部应用程序使用。 7. 测试服务器:通过发送...
它提供了丰富的API,用于流程定义、启动、查询、干预等,同时具备强大的任务管理和监控功能。 **单元测试** 单元测试是软件开发中的一个重要环节,它针对代码的最小可测试单元进行验证,确保每个组件都按预期工作。...
此外,为了调试和测试,你可以利用Activiti的工作流设计器(Activiti Modeler)进行流程模型的可视化编辑,然后导出XML文件用于部署。同时,Activiti的监控和历史查询功能可以帮助你追踪流程执行情况,进行问题排查...