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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 万字解析Activiti7流程框架

3.ProcessDefinition-流程定义操作:


流程定义操作主要针对的就是我们提前画好的BPMN文件的详细信息


这里我们先来看看我们的BPMN文件是什么样的


20201215141030570.png


可以看到我们的流程定义的信息是这样的,那么接下来我们在看看我们的流程定义的读取操作读出来的信息是不是和我们定义的一样呢?


3.1-ProcessDefinition文件读取:


20201215141046668.png


可以看到读取到的信息也的确是一样的,并且因为我们的流程Key没有发生改变,所以我们的版本是不一样的,并且采用+1操作的方式


3.2-ProcessDefinition文件删除:

//删除流程定义
    @Test
    public void delDefinition(){
        String pdID="fadb560c-3b76-11eb-a72f-3c58c24c1a1b";
        repositoryService.deleteDeployment(pdID,true);
        System.out.println(  );
    }

这里我们想要删除我们定义的流程,就需要获得我们的Deployment的ID号,就是我们在上面查询Deployment获得的ID号.并且他会有一个选项即boolen的选项


true代表删除该流程的一切历史信息包括该流程的相关信息以及部署该流程的过程的详细信息,以及该流程文件的详细信息,反正就是所有的信息


false代表只删除该流程的信息,其他的信息是不会删除的.即只删除act_re_procdef表中的记录.


这里我们测试完成之后,可以发现已经测试成功了


20201215141109156.png


那么接下来我们再去看看数据库里的信息发生率什么样的变化.


首先是act_re_procdef表,可以看到只剩下了一条数据了


2020121514112317.png


我们再来看看act_re_deploymemt关于该流程的记录因为已经是删除了


20201215141137285.png


最后我们再来看看act_ge_bytearray,发现该流程部署的两条文件数据也已近删除了,只剩下两条数据了.


20201215141149991.png


这下我们便能更好的理解true和false的区别了


4.ProcessInstance-流程实例操作:


在学习下面的操作之前我们首先需要明白ProcessDefinition和Processinstance的区别.


ProcessDefinition指的是我们定义的流程,这个流程只是一个一般化的流程,就比方说请假,我们只是定义了请假的一般化流程,比如说各个层级请假需要经过哪些层级的审核等等


但是Processinstance指的则是我们已经创建好的一个流程实例,比方说今天小赵想要请假,那么就会根据上面的定义流程创建一个流程是只适用于小赵的请假流程,然后今天小余也像请假,呢么就肯定要在根据上面定义的实例再创建一个实例是只适用于小余的,那么我们就能了解这两者的区别以及联系了


简单来说就可以用下面的图来表示:


一对多的关系.流程只是一个一般化的过程,流程实例是需要与特定的业务数据进行绑定的


20201215141204546.png


了解完两者的区别之后,我们就能继续下面的操作了.


4.1-ProcessInstance-流程实例定义操作:


    @Autowired
    private RuntimeService runtimeService;
    //初始化流程实例
    @Test
    public void initProcessInstance(){
        //获取页面表单填报的内容,比如说请假时间,请假事由等等数据
        //将填好的数据写入我们的业务表里,返回业务表的主键ID=====>BussinessKey
        //之后就需要将我们的业务数据绑定到流程上,这样创建出来的流程实例既能表现流程,同时又能够体现出我们系统的业务数据
        ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("myProcess_Part1","bKey0001");
        System.out.println("ID:"+processInstance.getId());
        System.out.println("ProcessInstanceId:"+processInstance.getProcessInstanceId());
        System.out.println("ProcessDefinitionId:"+processInstance.getProcessDefinitionId());
    }


这里我们定义流程实例是通过Key以及businessKey来进行定义的


20201215141218476.png


这里我们需要重点理解的businessKey,其实这个key就是我们上面讲到的业务数据,一般我们定义流程实例之前都需要将我们本次流程实例需要绑定的业务数据的信息定义出来,定义出来时候,该业务数据本身就会有他自己的ID,那么我们创建流程实例的时候就只需要将该流程实例与该业务数据的ID绑定之后,那么完整的流程实例就已经创建好了,确切的创建流程实例的过程应该是这样的


20201215141233534.png


理解上面的概念之后,我们来执行以下代码,可以发现已经执行成功了.


20201215141247539.png


那么我们再来看看数据库中的信息会发生怎么样的变化.


首先我们先看到的就是act_ru_execution表里面增加了两条信息,为什么增加的是两条信息,大家可能要问了,这主要是因为我们的BPMN文件里面都是定义了一个起始结点以及一个结束结点的,所以会增加两条记录.


接着我们再看,就是能够发现我们的数据已经和我们定义的业务数据绑定了,这样后续我们查找该流程实例的业务数据后悔方便很多,直接关联我们的业务数据表进行关联查询即可.


20201215141259486.png


还有一个表的数据是发生了变化的,就是act_ru_identitylink,这张表主要就是记录我们流程过程中参与流程的人员身份,这其中的人员身份只包括我们在BPMN文件里面定义的用户信息,并且这个信息应该只是代表一种身份,并不具体到确切的个人,只是我们这里定义的时候为了方便大家理解,选择使用bajie来替换,确切的人员信息应该是在业务数据里面定义的


2020121514131176.png


这样我们的流式实例定义操作就已经结束了.


4.2-ProcessInstance-流程实例查询操作:

 //获取流程实例列表
    @Test
    public void getProcessInstances(){
        List<ProcessInstance>processInstances=runtimeService.createNativeProcessInstanceQuery().list();
        for(ProcessInstance processInstance:processInstances){
            //流程实例ID
            System.out.println("ProcessInstanceId:"+processInstance.getProcessInstanceId());
            //流程定义ID
            System.out.println("ProcessDefinitionId:"+processInstance.getProcessDefinitionId());
            //流程实例是否已经执行结束
            System.out.println("isEnded:"+processInstance.isEnded());
            //流程实例是否已经挂起
            System.out.println("isSuspended:"+processInstance.isSuspended());
        }
    }

执行完代码之后我们就能够发现是的确已经执行成功了


2020121514132537.png


4.3-ProcessInstance-流程实例挂起激活操作:

    //暂停与激活流程实例
    @Test
    public void activitieProcessInstances(){
        runtimeService.suspendProcessInstanceById("bcad5409-3db6-11eb-87c1-3c58c24c1a1b");
        System.out.println("流程实例挂起成功");
//        runtimeService.activateProcessInstanceById("bcad5409-3db6-11eb-87c1-3c58c24c1a1b");
//        System.out.println("流程实例激活成功");
    }


我们首先先测试流程实例的挂起操作


20201215141338520.png


嘴上说挂起成功没用,这时候我们重新去查询一下所有的流程实例,并且看看他们的状态


20201215141350953.png


可以看到该流程实例奇缺已经挂起了


这时候我们重新将该流程实例重新激活


20201215141405508.png


我们在重新去查看一下所有的流程实例


20201215141421877.png


可以看到该流程实例的确已经激活了


4.4-ProcessInstance-流程实例删除操作:


    //删除流程实例
    @Test
    public void delProcessInstances(){
        runtimeService.deleteProcessInstance("bcad5409-3db6-11eb-87c1-3c58c24c1a1b","拜拜了您嘞");
        System.out.println("流程实例删除成功");
    }


这里我们选择删除我们上面定义的流程实例,我们主要看第二个属性


20201215141438389.png


可以看到Activiti7要求删除流程实例的时候必须要提供一个删除的原因,这个主要就是为了迎合我们的业务数据,我们停掉某个流程,很明显都是有原因的,那么我们就肯定是要记录这个原因的,所以Activiti7要求我们记录该原因.


接着我们测试一下删除流程实例的代码


20201215141452863.png


可以看到该流程实例已经被成功删除掉了,我们这时候再去查看流程实例


20201215141505225.png


可以看到已经没有流程实例,说明我们已经成功将该流程实例删除掉了.


相关文章
|
6天前
|
监控 安全 开发工具
鸿蒙HarmonyOS应用开发 | HarmonyOS Next-从应用开发到上架全流程解析
HarmonyOS Next是华为推出的最新版本鸿蒙操作系统,强调多设备协同和分布式技术,提供丰富的开发工具和API接口。本文详细解析了从应用开发到上架的全流程,包括环境搭建、应用设计与开发、多设备适配、测试调试、应用上架及推广等环节,并介绍了鸿蒙原生应用开发者激励计划,帮助开发者更好地融入鸿蒙生态。通过DevEco Studio集成开发环境和华为提供的多种支持工具,开发者可以轻松创建并发布高质量的鸿蒙应用,享受技术和市场推广的双重支持。
140 11
|
2月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
48 3
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
168 3
|
3天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
9天前
|
域名解析 弹性计算 安全
阿里云服务器租用、注册域名、备案及域名解析完整流程参考(图文教程)
对于很多初次建站的用户来说,选购云服务器和注册应及备案和域名解析步骤必须了解的,目前轻量云服务器2核2G68元一年,2核4G4M服务器298元一年,域名注册方面,阿里云推出域名1元购买活动,新用户注册com和cn域名2年首年仅需0元,xyz和top等域名首年仅需1元。对于建站的用户来说,购买完云服务器并注册好域名之后,下一步还需要操作备案和域名绑定。本文为大家展示阿里云服务器的购买流程,域名注册、绑定以及备案的完整流程,全文以图文教程形式为大家展示具体细节及注意事项,以供新手用户参考。
|
27天前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
54 12
|
1月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
1月前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
34 0
|
2月前
|
JavaScript 前端开发 UED
Vue执行流程及渲染解析
【10月更文挑战第5天】
|
2月前
|
存储 搜索推荐 数据库
运用LangChain赋能企业规章制度制定:深入解析Retrieval-Augmented Generation(RAG)技术如何革新内部管理文件起草流程,实现高效合规与个性化定制的完美结合——实战指南与代码示例全面呈现
【10月更文挑战第3天】构建公司规章制度时,需融合业务实际与管理理论,制定合规且促发展的规则体系。尤其在数字化转型背景下,利用LangChain框架中的RAG技术,可提升规章制定效率与质量。通过Chroma向量数据库存储规章制度文本,并使用OpenAI Embeddings处理文本向量化,将现有文档转换后插入数据库。基于此,构建RAG生成器,根据输入问题检索信息并生成规章制度草案,加快更新速度并确保内容准确,灵活应对法律与业务变化,提高管理效率。此方法结合了先进的人工智能技术,展现了未来规章制度制定的新方向。
50 3

热门文章

最新文章

推荐镜像

更多