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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 万字解析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下面的任务节点,发现都是没有相应的任务的.显然这也刚好符合候选任务的定义的,的确是需要我们主动分配.


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




相关文章
|
8天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
46 3
|
15天前
|
JavaScript 前端开发 开发者
Vue执行流程及渲染解析
【10月更文挑战第2天】
|
1天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
9 3
|
15天前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
12天前
|
JavaScript 前端开发 UED
Vue执行流程及渲染解析
【10月更文挑战第5天】
|
14天前
|
存储 搜索推荐 数据库
运用LangChain赋能企业规章制度制定:深入解析Retrieval-Augmented Generation(RAG)技术如何革新内部管理文件起草流程,实现高效合规与个性化定制的完美结合——实战指南与代码示例全面呈现
【10月更文挑战第3天】构建公司规章制度时,需融合业务实际与管理理论,制定合规且促发展的规则体系。尤其在数字化转型背景下,利用LangChain框架中的RAG技术,可提升规章制定效率与质量。通过Chroma向量数据库存储规章制度文本,并使用OpenAI Embeddings处理文本向量化,将现有文档转换后插入数据库。基于此,构建RAG生成器,根据输入问题检索信息并生成规章制度草案,加快更新速度并确保内容准确,灵活应对法律与业务变化,提高管理效率。此方法结合了先进的人工智能技术,展现了未来规章制度制定的新方向。
17 3
|
14天前
|
人工智能 缓存 Java
深入解析Spring AI框架:在Java应用中实现智能化交互的关键
【10月更文挑战第12天】Spring AI 是 Spring 框架家族的新成员,旨在满足 Java 应用程序对人工智能集成的需求。它支持自然语言处理、图像识别等多种 AI 技术,并提供与云服务(如 OpenAI、Azure Cognitive Services)及本地模型的无缝集成。通过简单的配置和编码,开发者可轻松实现 AI 功能,同时应对模型切换、数据安全及性能优化等挑战。
|
15天前
|
存储 缓存 边缘计算
揭秘直播带货背后的黑科技:播放流程全解析!
大家好,我是小米,今天聊聊社区直播带货的技术细节。我们将探讨直播播放流程中的关键技术,包括 HTTP DASH 协议、POP(Point of Presence)缓存和一致性哈希算法等。通过这些技术,直播流能根据网络状况动态调整清晰度,保证流畅体验。POP 和 DC 的多层次缓存设计减少了延迟,提升了观看效果。无论是技术人员还是直播运营者,都能从中受益。希望通过本文,你能更好地理解直播背后的技术原理。
29 3
|
5天前
|
分布式计算 Java 应用服务中间件
NettyIO框架的深度技术解析与实战
【10月更文挑战第13天】Netty是一个异步事件驱动的网络应用程序框架,由JBOSS提供,现已成为Github上的独立项目。
16 0
|
5天前
|
敏捷开发 数据可视化 测试技术
解析软件项目管理:以板栗看板为例,其如何有效影响并优化软件开发流程
软件项目管理是一个复杂而重要的过程,涵盖了软件产品的创建、维护和优化。其核心目标是确保软件项目能够顺利完成,同时满足预定的质量、时间和预算目标。本文将深入探讨软件项目管理的内涵及其对软件开发过程的影响,并介绍一些有效的管理工具。

推荐镜像

更多