Activiti工作流进阶笔记(一)_activitiutils.approve_back-程序员宅基地

技术标签: junit  java  开发语言  

package com.greenery.activity_demo;

import org.activiti.engine.*;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.jupiter.api.Test;

/**
 * @author xxx
 * @date 2022/9/3 15:24
 */
public class ActivitiBusinessDemo {
    

    /**
     * 添加业务key到Activiti表
     */
    @Test
    public void addBusinessKey(){
    
        //    1.获取流程引擎
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        //    2.获取RuntimeService
        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
        //    3.启动流程的过程中添加businesskey
        // 第一个参数流程定义的key
        // 第二个参数为businessKey 存出差申请单的id
        // 该businessKey 添加到了 ACT_RU_EXECUTION表
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myEvection", "1001");
        //    4.输出
        System.out.println("businessKey="+processInstance.getBusinessKey());
      }

    /**
     * 全部流程的挂起与激活
     */
    @Test
    public void suspendAllProcessInstance(){
    
    //    1.获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //    2.获取RespositoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //    3.查询流程定义,获取流程定义查询对象
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("myEvection")
                .singleResult();

        //    4.获取当前流程定义的实例是否都是挂起状态
        boolean suspended = processDefinition.isSuspended();
        //    5.获取流程定义的id
        String definitionId = processDefinition.getId();
        //    6.如果是挂起状态,改为激活状态
        if(suspended){
    
            //如果是挂起,可以执行激活的操作,参数1:流程定义id,参数2:是否激活;参数3:激活时间
            repositoryService.activateProcessDefinitionById(definitionId,true,null);
            System.out.println("流程定义id="+definitionId+"已激活");
        }else{
    
            //    7.如果是激活状态,改为挂起状态 参数1:流程定义id,参数2:是否挂起,参数3:挂起时间
            repositoryService.suspendProcessDefinitionById(definitionId,true,null);
            System.out.println("流程定义id="+definitionId+"已挂起");
        }

    }

    /**
     * 挂起或激活单个实例
     */
    @Test
    public void suspendSingleProcessInstance(){
    
    //    1.获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //    2.获取RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
        //    3.通过RuntimeService获取流程实例对象
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId("20001")
                .singleResult();
        //    4.获取当前流程实例的状态
        boolean suspended = processInstance.isSuspended();
        //    5.获取流程实例id
        String instanceId = processInstance.getId();
        //    6.判断是否已经暂停,如果已经暂停,执行激活操作
        if(suspended){
    
            runtimeService.activateProcessInstanceById(instanceId);
            System.out.println("流程实例id="+instanceId+"已激活");
        }else{
    
            //    7.如果是激活状态,执行挂起操作
            runtimeService.suspendProcessInstanceById(instanceId);
            System.out.println("流程实例id="+instanceId+"已挂起");
        }

    }

    /**
     * 完成个人任务
     */
    @Test
    public void completeTask(){
    
    //    1.获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        //    2.获取TaskServie
        TaskService taskService = processEngine.getTaskService();
        //    3.使用TaskService获取任务
        Task task = taskService.createTaskQuery()
                .processInstanceId("20001")
                .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());
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43956692/article/details/126679550

智能推荐

HTML上传文件_文件上传html-程序员宅基地

文章浏览阅读1.7w次,点赞6次,收藏33次。文件上传表单:<form action="/" method="post" enctype="multipart/form-data"> <div><input type="file" multiple="multiple" accept="image/*" name="image"></div> <div><input type="submit" value="上传"></div></form&g_文件上传html

如何在 Linux 上安装设备驱动程序_name-of-desired-driver-程序员宅基地

文章浏览阅读2.7k次。学习 Linux 设备驱动如何工作,并知道如何使用它们。对于一个熟悉 Windows 或者 MacOS 的人,想要切换到 Linux,它们都会面临一个艰巨的问题就是怎么安装和配置设备驱动。这是可以理解的,因为 Windows 和 MacOS 都有一套机制把这个过程做得非常的友好。比如说,当你插入一个新的硬件设备, Windows 能够自动检测并会弹出一个窗口询问你是否要继续驱动程序的安装。你也可以从网络上下载驱动程序,仅仅需要双击解压或者是通过设备管理器导入驱动程序即可。而这在 Linux 操作系.._name-of-desired-driver

安装ArcGIS10.2-详细图文安装教程_arcgis安装教程10.2-程序员宅基地

文章浏览阅读2.6w次,点赞42次,收藏120次。说明:ArcGIS Decktop安装结束后,如果需要操作上面的第10和第11步来设置License的读取,可点击“开始”-“程序”-“ArcGIS”-“ArcGIS Administrator”弹出的界面中操作。说明:ArcGIS Server安装完后,只需首次进行新站点的创建,以后只需点击“开始”-“程序”-“ArcGIS”-“ArcGIS 10.2 for Server”-“Manager”进入管理界面。5.如上信息设置完成后,点击“ok”。若界面中出现“success”的字样,表示创建成功。_arcgis安装教程10.2

synchronize锁升级-程序员宅基地

文章浏览阅读625次,点赞13次,收藏11次。Java中的synchronized关键字用于实现线程同步,保证多个线程对共享资源的操作具有原子性和可见性。在不同的JDK版本中,对synchronized的优化过程可能有所不同。在旧版本的JDK中,synchronized关键字的底层实现是依赖于操作系统的底层互斥量(mutex)来实现的。每次进入synchronized块时,会使用操作系统提供的互斥量进行加锁和解锁。这种方式在竞争不激烈的情况下效率较高,但在高并发场景下可能存在性能问题。从JDK 1.6开始,Java引入了和来优化。

日常软件集合-程序员宅基地

文章浏览阅读90次。2019独角兽企业重金招聘Python工程师标准>>> ..._mac astah community

服务器能ping通外界,但是外界无法ping通服务器_linux服务器能ping外面但是不能被ping-程序员宅基地

文章浏览阅读4.5k次。服务器直接接入路由器来获取ip(192.168.1.101)等等,所以可以直接ping通外界ip,但是不能被外界直接访问。先是关闭了防火墙,发现无济于事serivce iptables stop后来发现新服务器是通过路由器在连接到公网,所以外界根本不可能直接ping通这个192.168.2.101于是需要进入到路由器的设置界面进行修改,直接打开浏览器,输入路由器地址192.168.1.1,输入管理员密码进行设置。需要设置两处:1.设置DMZ,需要将DMZ打开2.设置虚拟路由器,让路由器能够转_linux服务器能ping外面但是不能被ping

随便推点

2023年MathorCup数学建模C题思路 - 电商物流网络包裹应急调运与结构优化问题_数学建模物流配网络问题-程序员宅基地

文章浏览阅读720次。1 赛题C 题 电商物流网络包裹应急调运与结构优化问题电商物流网络由物流场地(接货仓、分拣中心、营业部等)和物流场地之间的运输线路组成,如图 1 所示。受节假日和“双十一”、“618”等促销活动的影响,电商用户的下单量会发生显著波动,而疫情、地震等突发事件导致物流场地临时或永久停用时,其处理的包裹将会紧急分流到其他物流场地,这些因素均会影响到各条线路运输的包裹数量,以及各个物流场地处理的包裹数量。_数学建模物流配网络问题

图解机器学习算法(1) | 机器学习基础知识(机器学习通关指南·完结)_机器自学习算法示意框图-程序员宅基地

文章浏览阅读1.5w次,点赞23次,收藏260次。本文覆盖机器学习常见知识要点,包括机器学习流程、算法分类(监督学习、无监督学习、强化学习)、依托的问题场景(分类、回归、聚类、降维)、机器学习模型评估与选择等。_机器自学习算法示意框图

厦门大学数据结构MOOC 5-2 Knowledge (20 point(s))-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏3次。每个人的学识水平化为09,用09表示其学识高低程度。众所周知,与新生婴儿讨论微积分是一个非常扯淡的事情,所以,学识不为0的人群才可以参与讨论, 现在给定一个m*n的人群,给定每个人的文化程度,每个人仅可和上下左右进行讨论,所以请你求出学术讨论组的个数。输入格式:用空格隔开的整数m,n(m行,n列)矩阵(1≤m,n≤100)。输出格式:学识组的个数。输入样例:4 10067480001..._厦门大学数据结构mooc 5-2 knowledge (20 point(s))

国内免费可用的stun服务器(2020.7.14)_国内stun-程序员宅基地

文章浏览阅读5.2w次,点赞3次,收藏18次。端口号都是3478stun.xten.com stun.voipbuster.com stun.sipgate.net stun.ekiga.netstun.ideasip.comstun.schlund.destun.voiparound.comstun.voipbuster.comstun.voipstunt.comstun.counterpath.comstun.1und1.destun.gmx.netstun.callwithus.comstun.cou..._国内stun

FIFO溢出-FIFO上溢和FIFO下溢区别_fifo上溢和下溢-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏7次。By: Ailson JackDate: 2021.11.28个人博客:http://www.only2fire.com/本文在我博客的地址是:http://www.only2fire.com/archives/141.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。在调试芯片的某个外设的时候,如果该外设带有FIFO,那么一般情况下都有FIFO上溢和FIFO下溢的错误标志位,用于表示驱动对外设的FIFO操作是否正确,下面就是FIFO上溢和FIFO下溢对应的概念:FIFO上_fifo上溢和下溢

win10系统玩部分老游戏时提示0xc0000022的解决方法._游戏0xc0000032-程序员宅基地

文章浏览阅读2.6k次。在win10系统中玩一些游戏时会碰到以下提示,"应用程序无法正常启动(0xc0000022)",这是因为win10缺少了系统的某种组件引起的,因为win10相对之前的版本会有一些旧的组件被淘汰,而那些远古游戏需要依赖那些组件才能运行,于是出现以上报错.当开启游戏时系统会主动出现以下提示,只需要点击"安装此功能"将该组件下载即可.点击搜索栏,输入"控制面板" ,然后打开控制面板.之后点击程序, 进入程序界面后点击启用或关闭windows功能. 然后下拉找到旧版组件,点击左侧+号. 将组件勾选然后单击下方确_游戏0xc0000032

推荐文章

热门文章

相关标签