万字解析Activiti7流程框架(三)

简介: 万字解析Activiti7流程框架(三)

5.Task-任务处理操作:


在继续任务处理的相关操作之前,我们先来简单认识一下BPMN文件的相关属性信息


20201215141520330.png


首先我们先看整体的BPMN文件,红色框框选中的就是整个流程的ID,但是在数据库中显示的话会是以Key的形式展示


接着我们再来看看任务处理节点


20201215141534217.png


主要有两个是我们需要注意的,一个就是Name就是直接定义任务节点处理的业务,另外一个就是Assignee就是直接定义任务节点的处理人.


了解完这些最基本的BPMN文件的概念之后,我们再来了解一下Task在数据库中主要操作的两个表分别是act_ru_task和act_ru_identitylink这两张表.


act_ru_task主要是存放我们的任务节点的信息


act_ru_identitylink主要就是存放我们关于任务节点中执行人的相关信息


了解完上面这些概念之后,我们就能继续我们关于Task的操作了.


任务节点其实是和流程实例相关的!!!


想想我们创建完流程实例之后,流程实例最开始的那个任务节点是不是就按理就已经创建完毕了,相应的如果我们将某个流程实例中的所有任务节点都已经执行完毕的话,那么这个流程实例是不是就相应的执行完毕了呢?


这些问题我们在下面的操作过程中都会以实例来验证!!!


那么我们先来验证第一点,创建完相应的流程实例之后,相应的最开始的任务节点是否会自动产生呢?


首先先看一下我们本次使用的BPMN文件


2020121514194190.gif


5.1-Task-任务节点查询操作:


20201215142016733.gif


我们可以看到我们创建完流程实例时候,流程实例中最开始的任务节点就已经生成了,那么显然我们关于第一点的证明就已经完毕了.


此时我们已经有任务节点了,那么这时候我们在去数据库里面看看我们之前将的那两张表的数据发生看什么样的变化吧


我们先来看看act_ru_task表:


20201215141621662.png


我们可以看到该任务节点的相关信息都已经记录到该表了


我们再来看看act_ru_identitylink表:


20201215141636643.png


可以看执行者的信息也已经添加进来了.


接下来我们在仔细讲一下任务节点的查询操作


5.1.1-查询所有任务节点的信息 :


我们上面的查询操作是查询的所有任务节点的状态

@Autowired
    private TaskService taskService;
    @Test
    public void getTasks(){
        List<Task>tasks=taskService.createTaskQuery().list();
        for(Task task:tasks){
            System.out.println("ID:"+task.getId());
            System.out.println("Assignee:"+task.getAssignee());
        }
    }

显然这种操作只能是管理员才能拥有的操作,所以我们应该为一般的人员设置只能查询自己当前任务节点的方法,那么 就到下面的方法了


5.1.2-查询该用户下的任务节点:

@Test
    public void getTaskByAssignee(){
        List<Task>tasks=taskService.createTaskQuery().taskAssignee("wukong").list();
        for(Task task:tasks){
            System.out.println("ID:"+task.getId());
            System.out.println("Assignee:"+task.getAssignee());
        }
    }

这样我们就能查找特定执行下的任务了


那么我们分别查询一下bajie和wukong两者的下的任务节点:


20201215141650155.png


可以看到bajie的任务节点已经存在了


当我们去在查询一下wukong的任务节点的时候,其实大家也能够猜到了,很明显wukong的任务节点是还没有生成的:


20201215141703122.png


可以看到wukong下面的确什么任务节点都没有,其实我们想一下,wukong所属的任务节点是在bajie的任务节点之下的,那么显然是不是bajie的任务节点执行完毕之后,wukong的任务节点就能够看到了呢?说干就干.那么我们接下来就来看看执行任务节点


5.2-Task-任务节点完成操作:

    //执行任务
    @Test
    public void completeTask(){
        taskService.complete("13909b7d-3e72-11eb-beee-3c58c24c1a1b");
        System.out.println("该任务节点已经处理完毕");
    }


这里我们 是通过TaskId来执行任务的


我们运行一下代码


20201215141715209.png


可以看到已经成功运行了,这时候我们再来重新看一下两张数据表里面的是数据发生了什么样的变化吧


act_ru_task:


20201215141727371.png


可以看到任务已经流转到下面一个流程了,并且之前一个bajie的任务节点已经消失了,只剩下了wukong的审批请假的任务节点了


那么显然我们现在再去查找bajie和wuykong所属的任务节点的时候,大家应该也能够有猜到相应的结果了:


20201215142043356.gif


act_ru_identitylink:


20201215141740999.png


可以看到执行人这张表里面则不是像act_ru_task表一样直接删除之前的在执行人信息,还是不断添加整个流程里面的执行人信息的


看完上面两个表的数据之后,我们尝试将整个流程的任务节点都执行完,看看最后任务节点以及流程实例最后会是什么样的?


20201215142107132.gif


可以看到当我们将所有的任务节点全部执行完毕之后,相应的流程实例也会自动的消失掉,这样的确是符合正常的流程的,完成之后自动消失.


接着我们再来看看我们两张表中的数据发生了怎么样的变化:


act_ru_task:


20201215141755962.png


act_ru_identitylink:


20201215141806914.png


可以看到这两张表中关于该流程实例的所有任务节点以及执行人的信息全部都已经删除了.


虽然这两张表里面的数据都已经删除了,但是Activiti7为我们提供了另外一张表来帮我们存储我们的历史数据,这张表我们之后也会提到,这里先不讲.这样假如我们有溯源的功能的话,我们也是可以实现的,这样看来,这种流程执行完毕就把相应的任务节点删除掉,只保留当前存在且待执行的任务节点的确是合理的,毕竟任务节点到后面只会越来越多,如果不进行这种类似的操作的话,那么后续查询的速度就会越来越满,严重影响用户体验.


5.3-Task-任务节点拾取,退还,交办操作:


上面我们的任务都是单线的,意思就是一条线走到底的,但是我们有时候的任务可能是这样的:


20201215141820707.png


那么显然我们的任务节点就会出现我在标题中写的那三种操作方式,拾取,退还,交办操作.


我们还是先来看看我们这次定义的BPMN文件是什么样的:


20201215142127658.gif


还是老样子,先部署流程–>创建流程实例–>执行候选任务的各项操作


我们创建完了,接下来我们分别查询一下wukong,bajie,shaseng下面是否有任务节点:


20201215142146193.gif


可以看到我们分别查询了wukong,bajie,shaseng下面的任务节点,发现都是没有相应的任务的.显然这也刚好符合候选任务的定义的,的确是需要我们主动分配.


那么接下来我们就开始候选任务中的第一项操作




相关文章
|
11天前
|
缓存 安全 PHP
【PHP开发专栏】Symfony框架核心组件解析
【4月更文挑战第30天】本文介绍了Symfony框架,一个模块化且高性能的PHP框架,以其可扩展性和灵活性备受开发者青睐。文章分为三部分,首先概述了Symfony的历史、特点和版本。接着,详细解析了HttpFoundation(处理HTTP请求和响应)、Routing(映射HTTP请求到控制器)、DependencyInjection(管理依赖关系)、EventDispatcher(实现事件驱动编程)以及Security(处理安全和认证)等核心组件。
|
1天前
|
算法 Linux 调度
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
6 1
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
|
1天前
|
Linux 调度 数据库
|
1天前
|
Linux API 调度
xenomai内核解析-xenomai实时线程创建流程
本文介绍了linux硬实时操作系统xenomai pthread_creta()接口的底层实现原理,解释了如何在双内核间创建和调度一个xenomai任务。本文是基于源代码的分析,提供了详细的流程和注释,同时给出了结论部分,方便读者快速了解核心内容。
5 0
xenomai内核解析-xenomai实时线程创建流程
|
3天前
|
供应链 监控 安全
全面剖析:新页ERP系统不为人知的一面,以及系统的工作流程解析!
全面剖析:新页ERP系统不为人知的一面,以及系统的工作流程解析!
|
11天前
|
NoSQL 大数据 数据处理
MongoDB聚合框架与复杂查询优化:技术深度解析
【4月更文挑战第30天】本文深入探讨了MongoDB的聚合框架和复杂查询优化技术。聚合框架包含$match、$group、$sort和$project阶段,用于数据处理和分析,提供灵活性和高性能。优化查询涉及创建合适索引、使用聚合框架、简化查询语句、限制返回结果数、避免跨分片查询、只查询所需字段及使用$inc操作符。理解这些技术有助于提升MongoDB在大数据和复杂查询场景下的性能。
|
11天前
|
缓存 Java 开发者
10个点介绍SpringBoot3工作流程与核心组件源码解析
Spring Boot 是Java开发中100%会使用到的框架,开发者不仅要熟练使用,对其中的核心源码也要了解,正所谓知其然知其所以然,V 哥建议小伙伴们在学习的过程中,一定要去研读一下源码,这有助于你在开发中游刃有余。欢迎一起交流学习心得,一起成长。
|
14天前
|
敏捷开发 开发框架 持续交付
【软件工程】航行敏捷之路:深度解析Scrum框架的精髓
【软件工程】航行敏捷之路:深度解析Scrum框架的精髓
|
16天前
|
SQL 安全 前端开发
Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案
Go语言Gin框架安全加固:全面解析SQL注入、XSS与CSRF的解决方案
|
17天前
|
人工智能 决策智能 C++
【AI Agent教程】【MetaGPT】案例拆解:使用MetaGPT实现“狼人杀“游戏(1)- 整体框架解析
【AI Agent教程】【MetaGPT】案例拆解:使用MetaGPT实现“狼人杀“游戏(1)- 整体框架解析
136 1

推荐镜像

更多