Activiti工作流引擎

工作流引擎如Activiti7用于自动化业务流程,遵循BPMN规范来绘制和部署流程图。它减少了因流程变化而需修改代码的情况,通过BusinessKey关联业务数据,提高系统健壮性和效率。Activiti7内部涉及XML解析,将流程图转化为数据库记录,并提供API进行查询和操作。使用包括流程定义、实例创建、任务处理等步骤。
摘要由CSDN通过智能技术生成

是什么?

        工作流(WorkFlow),就是通过计算机对业务流程自动化执行管理,它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或者任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。

        工作流引擎是一种按照预定义规则【需要符合BPMN规范】进行部署,将业务和节点的流程进行分离【特定形式进行关联】,实现节点的自动流程的工作流框架,BPMN规范可以理解为就是一个画流程图的规范。

        Activiti7是一个工作流引擎,activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言(BPMN2.0)进行定义,业务系统按照预先定义的流程进行执行,实现了业务系统的业务流程由activiti进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本

为什么?

        没有工作流引擎之前如果要控制业务流程我们可能通过改变某个字段的状态来实现,这会带来一旦我们流程发生变化的时候我们就需要去同步修改代码。而流程引擎呢它里面内嵌了25张表,我们只要读取它里面的表就可以了,与表对应的它还提供可一系列操作表的接口。核心一个类是ProcessEngine,通过它能获取一系列的service接口;

怎么做?

        Activiti工作流引擎开发流程:

                1.画图

                2.部署

                3.调接口

          需要将预定于的流程文件BPMN部署到工作流引擎中,会把节点、路径信息存储到数据库中

          工作流引擎提供了大量的API对流程进行查询处理,细节都是对应用程序屏蔽的,大大提高了开发效率

           业务逻辑的处理和流程的流转是分离的,是通过BusinessKey进行关联的;

Activiti7的内部核心机制

1.业务流程图要规范化,需要遵守一套标准;

2.业务流程图本质上就是一个XML文件,而XML可以存放所要的数据;

3.读取流程图的过程其实就是解析XML文件的过程;

4.读取一个业务流程图的节点就相当于解析一个XML的节点,进一步将数据插入到MySQL表中,形成一条记录;

5.将一个业务流程图的所有节点都读取并存入到MySQL表中;

6.后面只要读取MySQL表中的记录就相当于读取业务流程图的一个节点;

7.业务流程的推进,后面就转换为读取表中的数据,并且处理数据,结束的时候这一行的数据就可以删除了;

Acitiviti7的使用流程

1.整合Activiti7---->依赖和配置文件;

2.业务流程建模---->图片以及文件;

3.部署业务流程---->RepostoryService;

4.启动流程实例---->RuntimeService;

5.查询待办对象---->taskService

6.处理待办任务---->taskService

        先将下一个节点的数据加入到历史任务以及运行时任务

        更新旧任务在历史表中的结束时间,再删除运行时的旧任务;

7.结束流程

注意:方法中只要带有native的都是自己写sql语句

流程定义查询,资源下载,删除

1.也是一样的需要获取流程引擎对象;

2.通过引擎对象获取对象的实例对象;

3.通过实例对象的相关条件相关的方法获取流程定义集合;

注意:因为涉及到下载、删除,因此需要指定是什么资源,所以需要通过部署ID来进行操作

因此在集合里面找到我们指定的流程资源,再获取到部署ID来进行操作;
 

流程定义与流程实例

可以把流程定义看做是一个类,而流程实例就是这个类的实例对象

1.流程定义:是一个符合BPMN2.0规范的一个流程图文件

2.流程实例:基于流程定义所创建的正在进行中的审核流程

流程变量的使用方法

        什么是流程变量?

                - 流程变量在Activiti7中是一个非常重要的角色,流程运转时需要靠流程变量,业务系统和Activiti7结合时少不了流程变量,流程变量就是Activiti在管理工作流时根据管理需要而设置的变量;

                - 比如在请假流程时,如果请假天数>3天则需要总经理审批,否则由人事直接审批,那么请假天数就可以设置流程变量,在流程流转的时候使用;

        在变量上面使用UEL表达式,类似于EL表达式(也就是在任务节点上)

        在连线上面使用UEL表达式,也就是一个任务节点之后可能根据不同的条件会有不同的分支节点可以走,这里也就是在连线上面进行判断,这个时候UEL表达式结果必须是布尔类型,例如:${day>3};

        流程变量的作用域:

                - global变量:流程变量的作用域范围默认值是流程实例,作用域范围最大;

                - local变量:流程变量的作用域范围如果仅仅针对一个任务或一个任务实例,那么作用域范围没有流程实例大;

候选人

如果一个流程每个节点只有一个审核人,那么效率就会变得非常缓慢,因此需要候选人;

怎么做?

1.在流程图中可以设置多个候选人;

2.启动实例的时候将候选人设置进去;

3.根据候选人的名字去处理任务(问题:如果有多个候选人那么就可能会造成并发的问题,也就是多个候选人同时来处理同一个任务);

4.因此应该让候选人去领取指定任务(claim方法),领取之后其他候选人就不能再处理该任务;

网关

是什么?

一个流程进来之后可能有很多分支,可能去到A分支也可能去到B分支,这个时候加上网关,由网关来决定它究竟去到哪一个分支;

为什么?

例如我们之前在连线使用流程变量时,根据不同的条件进入到不同的节点,但是如果条件都满足的情况下就都会进入,这样显然是不符合我们的需求的,因此我们使用网关可以解决这个问题

使用网关就是当条件都满足的时候只会走其中一个,而走的这一个是按照任务被创建的需要的顺序来访问;

分类

排他网关

        排他网关(异或网关或基于数据的排他网关),用来在流程中实现决策,当流程执行到这个网关的时候,所有分支都会判断条件是否为true,如果为true则执行该分支

并行网关

        并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进入和外出的顺序流的,这些分支结果必须都为true才会通过,在分支的外面会聚合起来到另外一个并行网关,这个出口处的并行网关就会判断所有的分支结果是否为true,如果都为true才会给到下个节点;

包含网关

        包含网关可以看做是排他网关和并行网关的结合体

        例如需求:出差申请大于3天需要由项目经理审批,小于等于三天右技术经理审批,出差申请必须经过人事助理审批;

业务标识

是什么?

        BusinessKey业务标识,通常为业务表的主键,业务标识和流程实例一一对应,业务标识来源于业务系统,存储业务标识就是根据业务标识来关联业务系统的数据;

        简单来说就是在数据库中流程实例都会绑定一个BusinessKey

        而这个BusinessKey是另外一张表的主键,在这张表中就存储了该流程实例的相关业务信息;

为什么?

        例如我们在申请请假的时候会填写请假原因和请假时间,而业务标识就是将这些信息绑定到流程中的;

怎么做?

        封装一个类用来创建业务对象,例如:请假时间,请假原因;

        在任务处理中获取流程实例对象的业务标识;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Strine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值