Activiti6 您所在的位置:网站首页 activiti工作流退回 Activiti6

Activiti6

2023-07-26 00:07| 来源: 网络整理| 查看: 265

文章目录 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 实验室设备网 版权所有