使用activiti总结--发布,办理,查询

2023-05-16

接上一篇文章,使用创建好的流程图,总结一下activiti发布到查询使用的方法和测试代码

流程图

1. 引用配置文件 activiti.cfg.xml ,不引用或者引用失败的话在创建流引擎的时候会报空指针异常,解决方法:

idea中右键文件夹,选Mark Directory As里的ReSources Root ,将resources设置成Resources Root类型文件夹,将activiti.cfg.xml直接放在resources下

2.引用activiti所需要的jar 我使用的是5.18

    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-engine</artifactId>
      <version>5.18.0</version>
    </dependency>
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-spring</artifactId>
      <version>5.18.0</version>
    </dependency>

3.创建一个测试类,开始测试

首先要创建流程引擎,如果配置文件引用出错,这个地方就会报错

/*创建流程引擎*/
    private ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

 布署流程

/*部署流程定义*/
    @Test
    public void test1() {
        Deployment deployment = processEngine.getRepositoryService()// 获取部署相关Service
                .createDeployment()//创建部署
                .name("产品审核流程")//声明流程的名称
                .addClasspathResource("process/testGroup.bpmn")//加载资源文件
                .deploy();
        System.out.println("流程部署ID:" + deployment.getId());
        System.out.println("流程部署Name:" + deployment.getName());
    }

 执行后可以查询下面表

流程定义:act_re_procdef 

所有流程:act_re_deployment

文件保存表:act_ge_bytearray

启动流程

先把流程逻辑粘出来

<process id="termTest" isClosed="false" isExecutable="true" name="termTest" processType="None">
    <startEvent id="start_1" name="StartEvent"/>
    <endEvent id="_8" name="EndEvent"/>
    <userTask activiti:candidateUsers="${productUsers}" activiti:exclusive="true" id="_9" name="产品审核"/>
    <userTask activiti:candidateGroups="${requireGroup}" activiti:exclusive="true" id="_10" name="需求审核"/>
    <userTask activiti:assignee="张三" activiti:exclusive="true" id="_11" name="财务审核"/>
    <userTask activiti:assignee="${user}" activiti:exclusive="true" id="_12" name="发起人测试"/>
    <sequenceFlow id="_13" sourceRef="start_1" targetRef="_9"/>
    <sequenceFlow id="_14" sourceRef="_9" targetRef="_10"/>
    <sequenceFlow id="_15" sourceRef="_10" targetRef="_11"/>
    <sequenceFlow id="_16" sourceRef="_11" targetRef="_12"/>
    <sequenceFlow id="_17" sourceRef="_12" targetRef="_8"/>
  </process>

第一个节点是产品审核,需要指定参数productUsers,所以启动的时候我们就需要设置上

/*
    * 启动流程
    * 两种启动方式1 通过key  2 通过id
    * 我们通过key的方式启动 key为act_re_procdef表中的key字段值
    * */
    @Test
    public void startTask() {
        try {
            /*定义参数*/
            Map<String, Object> variables = new HashMap<String, Object>();
            variables.put("productUsers", "zhangsan,lisi");//为candidateUsers的参数productUsers 指定值,用英文逗号分隔
            ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("termTest",variables);
            System.out.println("流程实例ID:" + pi.getId());
            System.out.println("流程定义ID:" + pi.getProcessDefinitionId());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

节点待办任务表 :act_ru_task 会增加一条待办任务

现在待办任务已经形成,此条待办任务属于组任务的一种,通过组任务方法查询该任务

根据用户查询组待办任务

@Test
    public void test3() {
        String candidateUser = "zhangsan";
        List<Task> list = processEngine.getTaskService()// 与正在执行的任务管理相关的Service
                .createTaskQuery()// 创建任务查询对象
                /** 查询条件(where部分) */
                .taskCandidateUser(candidateUser)// 组任务的办理人查询,不是组成员,查询不到
                /** 排序 */
                .orderByTaskCreateTime().asc()// 使用创建时间的升序排列
                /** 返回结果集 */
                .list();
        if (list != null && list.size() > 0) {
            for (Task task : list) {
                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("执行对象ID:" + task.getExecutionId());
                System.out.println("流程定义ID:" + task.getProcessDefinitionId());
                System.out.println("########################################################");
            }
        }
    }

结果:

        任务ID:37505
        任务名称:产品审核
        任务的创建时间:Mon Oct 08 18:52:33 CST 2018
        任务的办理人:null
        流程实例ID:37501
        执行对象ID:37501
        流程定义ID:termTest:1:35004
        ########################################################

我们可以看到任务办理人是为null,那么我们就可以在介绍一下组待办任务的认领,我现在指定了zhangsan,lisi两个审核人,但是此节点只需要一个人审批就可以了,组任务需要先认领,在办理

组待办任务认领,和解除认领

/** 组代办任务认领*/
    @Test
    public void claim() {
        //任务ID
        String taskId = "37505";
        //认领人
        String userId = "zhangsan";
        processEngine.getTaskService()
                .claim(taskId, userId);
    }

/** 解除任务认领*/
    @Test
    public void setAssignee() {
        //任务ID
        String taskId = "37505";
        processEngine.getTaskService()//
                .setAssignee(taskId, null);

    }

组代办任务被认领,变成个人任务,在根据用户查询组待办任务将将查询不到,使用个人待办任务查询方法可以查询到

查询个人待办任务

/** 查询当前人的个人任务 */
    @Test
    public void test4() {
        String assignee = "zhangsan";
        List<Task> list = processEngine.getTaskService()// 与正在执行的任务管理相关的Service
                .createTaskQuery()//创建任务查询对象
                /** 查询条件(where部分) */
                .taskAssignee(assignee)// 指定个人任务查询,指定办理人
                /** 排序 */
                .orderByTaskCreateTime().asc()// 使用创建时间的升序排列
                /** 返回结果集 */
                .list();// 返回列表
        if (list != null && list.size() > 0) {
            for (Task task : list) {
                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("执行对象ID:" + task.getExecutionId());
                System.out.println("流程定义ID:" + task.getProcessDefinitionId());
                System.out.println("########################################################");
            }
        }
    }

结果:

         任务ID:37505
         任务名称:产品审核
         任务的创建时间:Mon Oct 08 18:52:33 CST 2018
         任务的办理人:zhangsan
         流程实例ID:37501
         执行对象ID:37501
         流程定义ID:termTest:1:35004
         ########################################################

可以发现,任务办理人已经变成zhangsan了

完成待办任务

完成任务时我们需要考虑下一个节点任务信息,根据流程图,产品审核的下一节点是需求审核,需求审核指定的是组审核

candidateGroups="${requireGroup},需要指定组去办理,candidateUsers和candidateGroups区别已经说过,前者是人,后者是组。

/**
     * 完成任务
     */
    @Test
    public void test5() {
        TaskService taskService = processEngine.getTaskService();
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("requireGroup", "requireGroup");//用户组,requireGroup
        //添加完成任务信息,可以不要
        //taskId,processInstance,message
        taskService.addComment("37505", "37501", "产品审核同意--zhangsan");
        //完成任务方法
        taskService.complete("37505", variables);
    }

 现在act_ru_task表中产品审核节点已经不存在,新增需求审核节点数据

因为我们有了组,所以需要把用户和组的信息添加进去

用户信息表:act_id_user

用户组信息表:act_id_group

用户与用户组对应信息表:act_id_membership

我只把zhangsan,wangwu添加到requireGroup组中,所以可以根据用户查询组待办任务,但是需要先认领呦

也可以根据用户组名查询待办任务

根据用户组查询待办任务

/*
    * 根据用户组名查询
    * */
    @Test
    public void test6() {
        //组代办
        List<Task> list = processEngine.getTaskService().createTaskQuery().taskCandidateGroup("requireGroup").list();
        for (Task task : list) {
            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("########################################################");
        }
    }

结果:

        任务ID:40004
        任务名称:需求审核
        任务创建时间:Mon Oct 08 19:41:21 CST 2018
        任务委派人:null
        流程实例ID:37501
        ########################################################

 

先把文件上传了

https://download.csdn.net/download/qq_35463719/10706949

今天就到这了,有时间在总结下面的

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用activiti总结--发布,办理,查询 的相关文章

  • Activiti之一:部署activiti-admin、activiti-app、activiti-rest

    文章目录 各组件版本下载部署将war包放入tomcat 访问 在网上查找activiti相关资料 xff0c 发现对于activiti rest的使用很少 xff0c 而官网对于api的支持还是比较多的 xff0c 如果考虑的是一个纯粹的工
  • IDEA教程之Activiti插件

    本文作者 Spring ZYL 文章来源 人生就是一个不断学习的过程 码农StayUp CSDN博客 SpringBoot全家桶 Java数据结构与算法分析 设计模式领域博主 版权声明 本文版权归作者所有 转载请注明出处 一 安装Activ
  • Activiti6.0学习实践(4)-流程引擎配置一

    在上一节 我们进行了一个hello world 的简单应用搭建 本节继续对activiti的一些重要组件进行更进一步的分析 目录 1 activiti工程骨架 1 2 添加demo类到骨架工程 1 3 创建基于骨架的maven工程 2 流程
  • ACTIVITI 5.22.0 流程退回上一节点,实现多实例串行与并行退回

    import java util ArrayList import java util Date import java util HashSet import java util List import java util Map imp
  • activiti-Cancel activity属性(cancelActivity)作用

    流程设计工具 activiti explorer activiti版本 5 22 在使用边界计时器事件时 事件有一个参数 Cancel activity 作用上图 如下 Cancel activity选中 在事件中设置5秒计时 当开始流程后
  • Activiti和tk.mybatis的坑

    近期开发关于工作流的项目 遇到一个很坑的问题 activiti和tk mybatis居然会有冲突 先看异常 报错的原因大概就算这句话 Parameter 1 of method springProcessEngineConfiguratio
  • activiti7-4-流程激活和挂起

    我是一个目录 1 分析 2 全部流程实例的挂起和激活 3 单个流程实例挂起 1 分析 如果公司制度发生变化 1 原本没有批完的流程怎么办 例如 30人没有处理完 怎么办 看公司制度了 有可能 按原来的走 也有可能全部打回 重新发起 全部按照
  • 【activiti】网关

    activiti网关 网关是用来控制流程的走向的 1 排他网关 ExclusiveGateway 1 1 什么是排他网关 排他网关 用来在流程中实现决策 当执行到这个网关时 会根据判断条件去选择执行某一条分支 注意 排他网关只会选择一个为t
  • 工作流Activiti7整合SpringBoot使用

    前言 一个软件系统中具有工作流的功能 我们把它称为工作流系统 一个系统中工作流的功能是什么 就是对系统的业务流程进行自动化管理 所以工作流是建立在业务流程的基础上 所以一个软件的系统核心根本上还是系统的业务流程 工作流只是协助进行业务流程管
  • activiti学习--06流程变量:流程变量+变量的类型+流程变量api+设置流程变量1或2+查询流程变量的历史表

    流程变量 1流程变量的作用域范围是只对应一个流程实例 所以只要设置就行了 不用管在哪个阶段设置 2各个流程实例的流程变量是不相互影响的 3流程实例结束完成以后流程变量还保存在数据库中 存放到流程变量的历史表中 4基本类型设置流程变量 在ta
  • 【activiti 入门】springboot 集成activiti6.0的demo

    环境 jdk 1 8 maven 3 0 IDEA插件之actiBPM springboot2 0 activiti6 0 mysql数据库 具体demo地址 https download csdn net download qq 3333
  • Activiti 架构分析

    Activiti是业界很流行的java工作流引擎 关于Activiti与JBPM5的关系和如何选择不是本文要讨论的话题 相关内容可以baidu一下 Activiti从架构角度看是比较优秀的 是很面向对象的 是我所阅读过的代码结构很棒的开源软
  • activiti学习之服务任务

    写在前面 对于工作流 我们使用最多的是用户任务节点 用户任务节点就是给用户来生成任务的 需要人来手动的处理 而与之对应的还有服务任务节点 这种类型的节点需要人手动的参与而是程序来执行 即执行某个类的某个方法 这个类一般是org activi
  • SpringBoot 整合Activiti(二)——流程审批完整示例

    前两天做了一个SpringBoot整合Activiti的完整示例 功能包括 退回 通过 节点条件 指定办理人 生成流程图 高亮显示已办节点 查询任务列表 办理人 等 下面先简单记录 含完整代码 十六上班后再详细补充 1 画流程图 高亮生成的
  • Activiti-设置全局变量的四种方法

    1 在流程启动的时候设置全局变量 在流程启动时设置全局变量 Test public void startProcessInstance 得到runtimeService RuntimeService runtimeService proce
  • Activiti6.0学习实践(5)-activiti流程引擎配置二

    本节继续对activiti流程引擎的配置进行学习 1 EventLog配置 1 1 配置EventLog 首先在activiti eventlog cfg xml中配置eventlog属性为true 1 1 1测试代码 编写一个eventl
  • Activiti / Camunda 用变量改变边界计时器

    我有一个关于 Activiti Camunda 中用户任务的计时器边界事件的特殊问题 启动流程时 我使用流程变量设置计时器持续时间 并使用边界定义中的表达式来解析该变量 边界事件是在用户任务上定义的
  • 逐步寻找 Activiti Alfresco Workflow 教程 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我在哪里可以找到 Activiti Alfresco 工作流程 尤其是自定义工作流程 的简单教程 我是 Alfresco Activiti Worf
  • 【工作流Activiti】了解工作流

    1 什么是工作流 工作流 Workflow 就是通过计算机对业务流程自动化执行管理 它主要解决的是 使在多个参与者之间按照某种预定义的规则自动进行传递文档 信息或任务的过程 从而实现某个预期的业务目标 或者促使此目标的实现 通俗来讲 就是业
  • 将 Activiti 任务从旧流程迁移到新流程

    我有一个用于某些业务流程的 Activiti 项目 问题在于移民 现有流程有一些未完成的任务 我想通过添加新步骤来修改现有流程 现在 当我创建一个新任务时 这个新任务将根据更新的流程进行处理 而未完成的任务将按照旧流程进行处理 让我们看下面

随机推荐

  • 服务器总线协议_第二章----I2C总线协议进阶

    敬请期待 xff0c 预计8月1日发布 xff0c 需要请加个关注
  • 服务器总线协议_第三章----SVID电源管理协议

    目录 一 概述 二 SVID协议组成方式 三 SVID协议拓扑要求 四 SVID如何判别读写 Master读操作 Master写操作 五 问与答 1 xff09 SVID有没有特殊的要求 xff1f 一 概述 首先先了解一下SVID的全称
  • PM_Sync的作用

    目录 一 先来了解一下PM Sync的全称 xff1a 一 PM Sync简介 PM Sync xff1a Power Management synchronization 同步电源管理 在知道这个信号的作用之前需要先来了解一下 ADR 二
  • si4438使用stm32f103配置调试成功!

    刚拿到si4438时候在网上找了一大波资源 xff0c 发现能使用的并没有多少 xff0c 于是自己配置一发 经过不懈努力配置成功 xff0c 现在将一些配置过程分享给大家 xff01 源码已上传 尽情下载 xff01 1 首先打开工程文件
  • 教你如何使用stm32发送一帧数据(结构体中的数据)

    在这篇文章中我介绍一下如何通过串口发送一帧存在结构体中的数据 通过串口接受一帧数据请参考的我博客中的文章 教你如何使用stm32接收一帧数据 xff01 一 xff1a 在 h首先定义一个结构体 typedef struct uint8 t
  • 浅谈线性稳压电源和开关稳压电源(开关电源)

    目前现有电源主要分为两大类 xff1a 线性稳压电源和开关稳压电源 xff08 开关电源 xff09 线性稳压电源 线性稳压电源经过变压 整流 滤波 稳压实现电源稳压 优点 xff1a 稳定性好 xff0c 瞬态响应速度快 xff0c 可靠
  • c++ #define 用法

    1 用于表示将两个参数连在一起 xff0c 其中宏的 前后空格会被省略 define CONNA a b a b define CONNB a b a b int main string a 61 CONNA 34 one 34 34 tw
  • MySQL第五课 Table has no partition for value

    场景 MySQL由于安全性要求 xff0c 版本升级之后 xff0c 执行插入数据出现Table has no partition for value 错误 已有版本5 7 20 log升级到5 7 26 log 说明 建表过程中 xff0
  • DSP数据安全平台

    数据安全平台 xff08 DSP xff0c Data Security Platforms xff09 的概念来源于Gartner的 2021数据安全技术成熟度曲线 xff0c DSP定义为以数据安全为中心的产品和服务 xff0c 旨在跨
  • c++ 数学库

    链接 link
  • vscode使用restClient实现各种http请求

    vscode使用restClient实现各种http请求 一 xff0c 安装插件 首先 xff0c 我们要在vscode的扩展中 xff0c 搜索rest Client xff0c 然后安装它 xff0c 这里我已经安装过了 安装后 xf
  • K210和STM32串口通信(亲测有效)

    声明 最近想做一个K210数字识别和寻迹 xff0c 方便完成2021年电赛F题 xff0c 完成了数字训练和脱机运行就想赶紧进行一次通信 xff0c 调了好几天 郁闷 xff0b 自闭几天 按照官方的历程看 xff0c 配置的没问题但是会
  • 简单Rabbitmq 发送消息和接收消息

    简单Rabbitmq 发送消息和接收消息 1 先在Rabbitmq配置文件中预先创建好交换器 xff0c 队列 xff0c 路由等信息 2 创建生产者发送消息 64 Autowired private RabbitTemplate rabb
  • Elasticsearch(ES6)------(4) ES设置用户名密码访问

    Elasticsearch ES xff08 1 xff09 下载 安装 43 kibana 下载 xff08 2 xff09 本机多节点启动 43 ElasticSearch head插件使用 xff08 3 xff09 索引 文档概念和
  • Elasticsearch(ES6) --根据条件修改字段值

    POST index name doc update by query 34 query 34 34 match 34 34 version 34 34 12 22 34 34 script 34 34 inline 34 34 ctx s
  • redis限流使用lua脚本

    lua脚本 xff0c 计数器限流 5秒内限流10次 64 param key 64 return public boolean acquire String key long now 61 System currentTimeMillis
  • ES6分页from+size、search_after两种查询

    1 from 43 size 分页查询 64 RequestMapping value 61 34 get 34 method 61 RequestMethod GET public BaseResponse lt List lt Obje
  • 使用activiti总结--bpmn画流程图

    假期结束 xff0c 赶紧总结一下前几天使用的Activiti工作流的一些方法 简单介绍一下Activiti Activiti一套完整的方便的业务流程管理 xff08 BPM xff09 框架 xff0c 它是覆盖了业务流程管理 工作流 服
  • clock函数 使用以及问题

    使用 clock 函数是一个计算程序运行时间 xff08 其实简略的理解为占用CPU的使用时间 xff09 其实如果使用sleep函数 xff0c 程序是放弃CPU的使用权 xff0c 直到某个时间的到来 xff0c 当然就不会存在占用CP
  • 使用activiti总结--发布,办理,查询

    接上一篇文章 xff0c 使用创建好的流程图 xff0c 总结一下activiti发布到查询使用的方法和测试代码 流程图 1 引用配置文件 activiti cfg xml xff0c 不引用或者引用失败的话在创建流引擎的时候会报空指针异常