Activiti7工作流引擎:简介

Posted vbirdbest

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activiti7工作流引擎:简介相关的知识,希望对你有一定的参考价值。

一:工作流WorkFlow

1.1 框架的特性

  • 框架一般是针对于特定功能的一种高度抽象封装的实现,例如SpringSecurity专门用于处理权限的。
  • 框架完全实现了核心逻辑,开发者只需要提供框架所需的数据即可,例如SpringSecurity权限框架已经实现,开发者只需要提供用户以及用户对应的权限相关信息即可。
  • 框架一般功能强大,扩展性强,代码规范。

1.2 工作流框架

Activiti7(https://www.activiti.org)就是一种框架,它有个高大上的名字叫工作流引擎,它的使用场景是用于处理一些流程申请审批工作(如员工张三发起一个请假申请,需要由项目经理李四审批,李四审批完还需要部门经理审批,部门经理审批完还需要人事审批,最终才可以请假),也就是业务流程管理(Business Process Management)简称BPM。工作流引擎其实就是使用代码实现UML流程图中的各个步骤而已。

Activiti版本有5,6,7三个版本,目前企业中可能6使用的比较多。Activiti7目前是最新版本,能够与SpringBoot2.x兼容,不过Activiti7版的SpringBoot必须与SpringSecurity配合使用,新项目建议使用版本7。

凡是一个功能需要多个人按照先后顺序去分步处理的业务都可以使用工作流来完成。

1.3 工作流为什么要做成框架

1.3.1 理由一

工作流就是多个人按照先后步骤去分别处理的业务,没有工作流,我们自己写逻辑通过给每个步骤增加一个状态字段status(0:未完成, 1:已完成)等也能完全实现业务。但是如果这个业务让不同的人写,可能他们的思路都不一样,虽然他们都能实现业务需求,这样等新同事入职的时候又感觉写的不好又会换另一种思路,自己写逻辑的缺点就是整个代码辨识度不高。就像权限管理框架Shiro或者SpringSecurity,只要学过这个框架大家都知道是怎么玩的,都知道应该有哪些类和哪些方法,大家能很快就完全熟悉了,这就是一个公共的框架的其中一个优势。

1.3.1 理由二

自己实现业务一般抽象度不高,如果当需求发生变化了改动可能会非常大,而框架一般抽象度都非常高,扩展性、健壮性非常强。

1.3.3 理由三

框架快,自己写业务每个字母都要自己写,比如设计表结构,创建entity、dao、service等都需要自己亲力亲为,甚至还要想思路,而框架这些东西都替你写好了而且没有bug,你只需要去使用它们即可。

工作流框架是一种用于专门处理分步审批的业务,是一种纯业务型框架,说到底就是提供了几个Service类来完成几张表的数据库的CRUD操作,完全是一种增删改查型业务方法并不涉及其它技术型内容。Activiti已经预定义好25张表结构,并提供了entity、dao、service对应的实现类,开发者只需要调用Service中方法来完成增删改查操作即可。

1.4 bpmn

流程图是一种UML建模语言,使用各种符号来绘制流程图。工作流和流程图一样,也需要一套符号语言来表示整个流程,这就是BPMN(Business Process Model And Notation)业务流程模型和符号,Activiti就是根据BPMN来绘制流程的。

  • StartEvent相当于UML流程图中的开始。
  • UserTask相当于UML流程图中的流程。
  • Gateway相当于UML流程图中的条件判定。
  • EndEvent相当于UML流程图中的结束。

二:IDEA安装actiBPM插件

2.1 方式一:直接在IDEA搜索

如果你能在IDEA插件仓库中能搜索到直接Install即可,如果搜索不到可能被和谐了需要采用手动安装。

2.2 方式二:手动安装

https://plugins.jetbrains.com/plugin/7429-actibpm/versions 选择自己的IDE工具下载最新版本即可,下载的是一个 actibpm.jar

选择actibpm.jar然后Restart IDE即可安装完成,可以通过 New -> BpmnFile来创建.bpmn文件。

三:绘制流程

绘制流程直接拖拽符号即可,中间是绘图区,右边是符号区,左边是属性区(针对于每个流程节点或者连线进行属性设置)。


如果将offwork.bpmn文件使用文本编辑器打开其实就是一个xml文件。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1638888506117" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
  <process id="offwork" isClosed="false" isExecutable="true" name="请假流程" processType="None">
    <startEvent id="_2" name="StartEvent"/>
    <userTask activiti:exclusive="true" id="_3" name="请假申请"/>
    <userTask activiti:exclusive="true" id="_4" name="项目经理"/>
    <userTask activiti:exclusive="true" id="_5" name="人事"/>
    <endEvent id="_6" name="EndEvent"/>
    <sequenceFlow id="_7" sourceRef="_2" targetRef="_3"/>
    <sequenceFlow id="_8" sourceRef="_3" targetRef="_4"/>
    <sequenceFlow id="_9" sourceRef="_4" targetRef="_5"/>
    <sequenceFlow id="_10" sourceRef="_5" targetRef="_6"/>
  </process>
  ...
</definitions>
  • process:用于定义流程图,id属性表示流程的唯一标识,name属性表示流程的名字。
  • startEvent:表示流程的开始。
  • userTask:表示流程中的每个任务(步骤),name表示每个任务的名字。
  • endEvent:表示流程的结束。
  • sequenceFlow:表示符号之间的连线。

注意:startEvent、userTask、endEvent、sequenceFlow都有一个id属性,id属性是一个数字,表示在绘制流程时拖入的顺序。

以上是关于Activiti7工作流引擎:简介的主要内容,如果未能解决你的问题,请参考以下文章

Activiti7工作流引擎:基础篇 流程变量

Activiti7工作流引擎:高阶篇 ManualTask

Activiti7工作流引擎:高阶篇 ScriptTask

Activiti7工作流引擎:进阶篇 ScriptTask

Activiti7工作流引擎:进阶篇 Activiti7与Spring整合

Activiti7工作流引擎:Activiti7自动生成表结构