挂起和激活流程实例

简介: 挂起和激活流程实例

挂起就是流程虽然已经发起了,但是无法进行下面的审批

激活就是流程被激活了,才能继续往下进行,和挂起是反义词

1代表激活 2代表挂起

网络异常,图片无法展示
|

代码实现流程定义的挂起和激活

上面已经介绍了挂起和激活,下面我们就用代码实现

注意:挂起和激活往往是大部分情况下针对全部的实例,总不能同一个流程把你的挂起,他的不挂起,多个人的流程都要被挂起

其实就是修改状态 1代表激活 2代表挂起

全部流程实例的挂起和激活

也就是根据id去批量处理,修改多个数据的挂起状态,代码如下

// 全部流程实例的挂起和激活
@Test
public void suspendAllProcessInstance(){
    // 获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 获取service RepositoryService
    RepositoryService repositoryService = processEngine.getRepositoryService();
    // 查询流程定义信息 获取流程定义查询对象
    ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
            .processDefinitionKey("myEvection")
            .singleResult();
    // 获取当前流程定义的实例是否都是挂起的状态
    boolean suspended = processDefinition.isSuspended();
    // 获取流程定义的id
    String processDefinitionId = processDefinition.getId();
    // 如果是挂起状态,那么改为激活状态
    if(suspended){
        //如果挂起,执行激活操作,参数1:流程定义ID,参数2:流程是否激活,参数3:激活时间(暂时不传)
        repositoryService.activateProcessDefinitionById(processDefinitionId,true,null);
        System.out.println("流程定义ID:"+processDefinitionId+"已激活");
    }else{
        // 如果是激活状态,那么改为挂起状态 参数1:流程定义ID,参数2:流程是否挂起,参数3:挂起时间(暂时不传)
        repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);
        System.out.println("流程定义ID:"+processDefinitionId+"已挂起");
    }
}

首先第一次执行,一开始是激活的,所以会执行挂起操作

网络异常,图片无法展示
|

数据库act_ru_task表的挂起状态为2,也就是挂起了

网络异常,图片无法展示
|

然后第二次执行,刚才已经被挂起了,所以会执行激活操作

网络异常,图片无法展示
|

再次观察数据库act_ru_task表的挂起状态为1,也就是激活了

网络异常,图片无法展示
|

单个流程实例的挂起和激活

这个业务就好比张三的出差流程需要被挂起,但是李四的不需要,这个时候就需要进行单个的处理了

这个时候就不能使用流程定义的id操作了,要用流程实例的id去操作,根据一个流程对应一个实例,单个流程共享一个流程定义的id

// 挂起或者挂起单个流程实例
@Test
public void suspendSingleProcessInstance(){
    // 获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 获取service RuntimeService
    RuntimeService runtimeService = processEngine.getRuntimeService();
    // 通过RuntimeService获取流程实例对象
    ProcessInstance instance = runtimeService.createProcessInstanceQuery()
            .processInstanceId("17501")
            .singleResult();
    // 得到当前流程实例的状态 true=挂起 false=激活
    boolean suspended = instance.isSuspended();
    // 获取流程实例的id
    String instanceId= instance.getId();
    // 判断是否挂起,如果挂起就执行激活
    // 判断是否激活,如果挂起就执行挂起
    if(suspended){
        //如果挂起,执行激活操作
        runtimeService.activateProcessInstanceById(instanceId);
        System.out.println("流程定义ID:"+instanceId+"已激活");
    }else{
        // 如果是激活状态,那么改为挂起状态
        runtimeService.suspendProcessInstanceById(instanceId);
        System.out.println("流程定义ID:"+instanceId+"已挂起");
    }
}

开始执行  当前是激活的,所以会做挂起操作 当前数据库的挂起状态为1,也就是挂起

网络异常,图片无法展示
|

再次执行 因为是当前是挂起状态 所以执行激活操作 当前数据库的挂起状态为2,也就是激活

网络异常,图片无法展示
|

流程实例挂起后的流程执行测试

测试目前挂起的流程是否能够被审批,目前轮到zhangsan了

网络异常,图片无法展示
|

审批代码如下

// 根据任务id完成个人任务
@Test
public void completTask() {
    // 1 获取流程引擎
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    // 2 获取service
    TaskService taskService = processEngine.getTaskService();
    // 3 获取zhangsan在myEvection中对应的任务 我们已知只有一个任务 可使用singleResult获取一个结果集
    Task task = taskService.createTaskQuery()
            .processInstanceId("17501") // 流程的key
            .taskAssignee("zhangsan")   // 要查询的负责人
            .singleResult();// 因为可能有多个待办  所以是一个集合
    System.out.println("流程实例ID:"+task.getProcessInstanceId());
    System.out.println("任务ID:"+task.getId());
    System.out.println("任务负责人:"+task.getAssignee());
    System.out.println("任务名称:"+task.getName());
    // 4 根据任务的id完成任务
    taskService.complete(task.getId());
}

执行代码测试报错 提示,不能完成被挂起的任务,很明显被挂起的任务是不能被执行的

网络异常,图片无法展示
|

然后我们执行方法,让这个流程实例变成激活状态

网络异常,图片无法展示
|

再次执行审批代码 没有问题执行成功了

网络异常,图片无法展示
|

数据库里面下一个审批人和挂起状态都改变了

网络异常,图片无法展示
|

相关文章
|
传感器
基于stm32的智能婴儿床(毕业设计)
基于stm32的智能婴儿床(毕业设计)
|
Java API 数据库
Spring Boot(16)——使用DataSource
使用DataSource 需要使用DataSource可以在pom.xml中添加spring-boot-starter-jdbc依赖,这会自动加入Spring Jdbc的依赖。还需要加入相应的JDBC驱动包的依赖,笔者这里使用的是MySQL的驱动。
9328 0
|
2月前
|
JavaScript 前端开发 安全
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
每日激励:“如果没有天赋,那就一直重复”。我是蒋星熠Jaxonic,一名执着于代码宇宙的星际旅人。用Vue 3与TypeScript构建高效、可维护的前端系统,分享Composition API、状态管理、性能优化等实战经验,助力技术进阶。
Vue 3 + TypeScript 现代前端开发最佳实践(2025版指南)
|
7月前
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
324 22
|
JSON 数据可视化 API
玩转数据科学:Python实战分析天气预报变动趋势
【10月更文挑战第1天】随着气候变化对日常生活的影响日益显著,理解和预测天气模式变得越来越重要。本文将引导您如何使用Python来抓取和分析天气预报数据,从而揭示天气变化的趋势。我们将介绍从获取公开气象API的数据到清洗、处理以及可视化整个过程的技术方法。
860 2
|
自然语言处理 算法 JavaScript
怎么转化成 AST
【10月更文挑战第25天】将代码转化为 AST 是编译器和代码分析工具中的重要环节,通过对 AST 的操作,可以实现对代码的深入理解和各种自动化处理。不同的编程语言和工具都有各自的 AST 表示和相关的处理方法,但基本的原理和步骤是相似的。
Flowable流程的挂起与激活详解
Flowable流程的挂起与激活详解
907 1
|
测试技术 开发工具 git
后端测试,好的建议,后端测试----Postman如何创建项目,导入测试用例和测试集,注意对测试用例进行保存,格式用测试用例---xxx测试用例
后端测试,好的建议,后端测试----Postman如何创建项目,导入测试用例和测试集,注意对测试用例进行保存,格式用测试用例---xxx测试用例
|
前端开发 芯片 索引
技术好文共享:色彩之RGB和灰阶
技术好文共享:色彩之RGB和灰阶
1447 0
|
前端开发 C# 图形学
unity按钮绑定与场景切换
unity按钮绑定与场景切换
293 0