Activiti6 | 您所在的位置:网站首页 › activiti工作流退回 › Activiti6 |
文章目录
1. 子流程1.1 简介
2. 调用式子流程2.1 简介2.2 流程设计2.3 测试类2.4 运行2.4.1 启动流程
1. 子流程
版权声明:本文部分为CSDN博主「司马缸砸缸了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接 1.1 简介子流程是一种特殊的流程,它包含在大流程中的一部分。 分为嵌入式子流程,调用式子流程,事件子流程,事务子流程,特别子流程(Activiti6新添加的)。 2. 调用式子流程 2.1 简介当流程执行到调用节点,会创建一个新分支,它是到达调用节点的流程的分支。 这个分支会用来执行子流程,默认创建并行子流程,就像一个普通的流程。 上级流程会等待子流程完成,然后才会继续向下执行。 适用于多个流程共用一个子流程的情况。 主流程和子流程间的参数传递通过In parameters和Out parameters来实现。 2.2 流程设计说明: Called element :子流程keyIn parameters: 入参Out parameters: 出参流程文件bpmn 子流程 主流程 2.3 测试类 package com.yb.activiti6; import org.activiti.engine.*; import org.activiti.engine.repository.Deployment; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @version 1.0 * @date 2020/7/23 */ @RunWith(SpringRunner.class) @SpringBootTest public class ActivitiDemoTest20 { @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Autowired private IdentityService identityService; @Autowired private RepositoryService repositoryService; @Autowired private ProcessEngine processEngine; @Autowired private HistoryService historyService; /** * 发布流程,测试调用式子流程 * @throws IOException */ @Test public void deploymentProcesses_zip(){ Deployment deploy = repositoryService.createDeployment() .name("测试-调用式子流程-1")//创建流程名称 .addClasspathResource("processes/activiti_s.bpmn")//主流程 .addClasspathResource("processes/activiti_s.png")//主流程 .addClasspathResource("processes/activiti_Subprocess2.bpmn")//子流程 .addClasspathResource("processes/activiti_Subprocess2.png")//子流程 .deploy(); System.out.println("部署id:"+deploy.getId()); System.out.println("部署名称:"+deploy.getName()); } /** * 启动流程,测试调用式子流程 */ @Test public void startProcess() { //可根据id,key,message启动流程 ProcessInstance pi = runtimeService.startProcessInstanceByKey("s"); System.out.println("流程实例id:" + pi.getId()); System.out.println("流程定义id:" + pi.getProcessDefinitionId()); System.out.println("========================================================="); //查询任务 List taskList = taskService.createTaskQuery() // 创建任务查询 .taskAssignee("user1") // 指定某个人 .list(); for (Task task : taskList) { System.out.println("--------------------------------------------"); 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()); // 参数 Map vars = new HashMap(); vars.put("days", 10); // 完成任务 taskService.complete(task.getId(), vars); } // 主流程中查询参数 Integer days = (Integer) runtimeService.getVariable(pi.getId(), "days"); System.out.println("主流程中参数days:" + days); // 调用式子流程中查询参数 ProcessInstance subPi = runtimeService.createProcessInstanceQuery() .processDefinitionKey("subprocess2") .singleResult(); Integer subDays = (Integer) runtimeService.getVariable(subPi.getId(), "subDays"); System.out.println("子流程中参数subDays:" + subDays); // 设置子流程参数 runtimeService.setVariable(subPi.getId(), "subDays", subDays -1); try { Thread.sleep(1000 * 3); } catch (InterruptedException e) { e.printStackTrace(); } // 查询任务 taskList = taskService.createTaskQuery() // 创建任务查询 .taskAssignee("user3") // 指定某个人 .list(); for (Task task : taskList) { System.out.println("--------------------------------------------"); 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()); // 完成任务 taskService.complete(task.getId()); } //查询任务 taskList = taskService.createTaskQuery() // 创建任务查询 .taskAssignee("user2") // 指定某个人 .list(); for (Task task : taskList) { System.out.println("--------------------------------------------"); 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()); } System.out.println("--------------------------------------------"); // 主流程中查询参数 Integer mainDays = (Integer) runtimeService.getVariable(pi.getId(), "mainDays"); System.out.println("主流程中参数mainDays:" + mainDays); } } 2.4 运行运行deploymentProcesses_zip() 2.4.1 启动流程运行startProcess() 效果 总结: 在测试过程中遇到一个错: org.activiti.engine.ActivitiObjectNotFoundException: no processes deployed with key ‘null’ 原因是:Called element 属性没有设置。 到此调用式子流程测试学习结束。 |
CopyRight 2018-2019 实验室设备网 版权所有 |