Activiti7工作流引擎:基础篇(一) 简介与IDEA插件安装



知识传送门 》》》》》》》》


你不要一直不满他人,你应该一直检讨自己才对。

零:审批场景

对于请假流程我们有以下两种做法:

  • 传统方式:写一个请假条,拿着请假条跑到项目经理那里签字,然后再拿着请假条去部门经理那里签字,然后再拿着请假条到人事那里签字。
  • 无纸化办公:开发一套请假流程程序,所有审批都在线上完成。通过状态字段来控制审批的进度,这种方式有个很大的弊端一旦审批流程发生了变化,代码几乎不能用,需要大量的修改。
  • 工作流引擎框架:工作流引擎框架对于无纸化办公做了大量的抽出和封装,使得当审批流程变化了(只需要更新流程定义文件.bpmn)而不需要修改源代码就能使用。

一:工作流WorkFlow

1.1 框架的特性

  • 框架一般是针对于某一类功能的一种高度抽象封装的实现,例如SpringSecurity专门用于处理权限相关的功能的。
  • 框架完全实现了核心逻辑,开发者只需要提供框架所需的数据然后再做一些自定义配置即可接入,例如SpringSecurity权限框架已经实现权限控制,开发者只需要提供用户以及用户对应的权限相关信息即可。
  • 框架一般功能强大,扩展性强,代码规范,流程与业务解耦性强👍。

1.2 工作流框架

Activiti7(https://www.activiti.org)就是一种工作流引擎框架,它的使用场景是用于处理一些流程申请审批工作(如员工发起一个请假申请,需要由项目经理审批,项目经理审批完还需要部门经理审批,部门经理审批完还需要人事审批,最终才可以请假),也就是业务流程管理(Business Process Management)简称BPM

工作流引擎其实就是使用代码实现UML流程图中的各个步骤而已。

1.3 工作流使用场景

凡是需要多个人(或者多个部门)按照先后顺序去一级一级审批的业务都可以使用工作流来完成。像OA、银行项目都在大量使用。

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

1.4.1 理由一

工作流就是多个人按照先后步骤去分别审批的业务,没有工作流,我们自己写逻辑通过给每个申请记录增加一个状态字段status(0:未提交, 1:已提交,2:部门经理同意,3:部门经理不同意,4: 总经理同意,5:总经理不同意,6:人事同意,7人事不同意)等类似逻辑照样能完全实现业务,我们需要想好一整套完整的思路,并不断的修复Bug,这种设计被称为状态驱动。如果这个业务让不同的人写可能他们的思路都不一样,虽然他们都能实现业务需求,这样等新同事入职的时候又感觉写的不好又会换另一种思路,自己写逻辑的缺点就是整个代码辨识度不高。就像权限管理框架Shiro或者SpringSecurity,只要学过这个框架大家都知道是怎么玩的,都知道应该有哪些类和哪些方法,大家能很快就完全熟悉了,这就是一个开源框架的优势。

1.4.2 理由二

自己实现业务一般抽象度不高,如果当需求发生变化了(如审批步骤增加或者提高效率精简审核步骤,或者允许多个人同时审核等)改动可能会非常大,而框架一般抽象度都非常高,扩展性、健壮性都非常强,能够有效的降低维护成本。例如,之前的请假流程不完善,现在增加当请假时间超过10天就必须有交接人,即审批流程中增加交接人节点。

1.4.3 理由三

框架快,不需要自己思考整体思路,不需要自己写一些基础的代码做一些体力劳动,比如设计表结构、创建entity、dao、service等体力劳动,这些框架统统都为你准备好了。

工作流框架是一种用于专门处理分步审批业务的框架,是一种纯业务型框架,说到底就是提供了几个Service类来完成几张表的数据库的CRUD操作,并不涉及其它技术型内容。

在这里插入图片描述

1.4.4 最大的优点

当流程发生变化,只需要更新流程定义文件.bpmn,不需要修改源代码即可完成。

====== Activiti工作流框架的缺点 ======

Activit作为工作流框架也有缺点,有些操作不太符合操作,例如:

  • 发起人发起后还需要发起人审批通过才能走到下一个节点,而不是直接跳转到第二个节点。
  • 有完成任务的功能,却没有驳回任务、跳转任务等功能。
  • 没有在流程实例表中记录当前流程的最新状态,还需要自己写逻辑去实现或者在业务表中维护一个状态字段。

1.5 Activiti作者

  • JBPM 作者:Tom Baeyens,后来跳槽开发了Activiti。
  • Activiti 5.x, 6.x 作者:Tom Baeyens后来跳槽开发了flowable。
  • Activiti 7.x 作者:公司其他同事开发的。
  • flowable:Tom Baeyens。

1.6 学习资料

1.7 bpmn

流程图是一种UML建模语言,使用各种符号来绘制流程图。工作流和流程图一样,也需要一套符号语言来表示整个流程这就是BPMN(Business Process Model And Notation)业务流程模型和符号或者称为流程元素FlowElement,Activiti就是根据BPMN来定义业务流程文件的。
Tom Baeyens在这里插入图片描述

  • StartEvent相当于UML流程图中的开始,必须有的。
  • UserTask相当于UML流程图中的流程,常用。
  • Gateway相当于UML流程图中的条件判定,常用。
  • EndEvent相当于UML流程图中的结束,必须有的。
    在这里插入图片描述

二:IDEA安装actiBPM插件

绘制流程图我们可以通过一些软件如亿图或者一些在线绘图ProceeOn等,同样绘制工作流也需要工具Actiiviti为IDE提供了一个插件actiBPM用于绘制工作流。

2.1 方式一:直接在IDEA搜索

如果你能在IDEA插件仓库中能搜索到那恭喜你直接Install --> Resart IDE即可,如果搜索不到也属于正常需要采用手动安装。
在这里插入图片描述

2.2 方式二:手动安装

下载插件 https://plugins.jetbrains.com/plugin/7429-actibpm/versions 选择自己的IDE工具下载最新版本即可(最新版本也更新也是2014年的,远远没有跟着IDEA的更新速度来更新,so这个插件问题非常多),插件就是一个 actibpm.jar
在这里插入图片描述
选择actibpm.jar然后Restart IDE即可安装完成。
在这里插入图片描述
注意:该插件不是很好用:

  1. 符号之间很难对齐。
  2. 属性值展示不出来,经常遇到Name、Assignee、Condition等属性值显示不出来,有时候经常显示\n,这时候就需要使用文本编辑器打开.bpmn文件确认一下值是否正常,如果正常就不必纠结插件的展示的问题。
  3. 如果选中某个符号,在IDEA中最左边没有显式属性面板(BPMN Editor),需要将IDEA的主题切换成白色,关闭.bpmn文件,重新打开,然后再选中某个节点就出来了,然后你在切回黑色。
  4. 有时候顺序流线的一端突然会变成菱形◇,此时不需要管它,不影响功能。
  5. 最好不要复制.bpmn文件。
  6. 该插件不支持高版本的IDEA。
  7. 连线不支持修改id值。

为什么这个插件这么久不更新呢?为什么activiti的作者跳槽到其它公司又另起炉灶开发另一个工作流框架flowable,可以预感到activiti在走下坡路,以后工作流的框架可能是flowable了。

2.3 中文乱码

  1. 打开Settings,找到File Encodings,把encoding的选项都选择UTF-8

  2. 打开IDEA安装路径,找到如下的安装目录,根据自己所安装的版本来决定,我使用的是64位的idea,所以在idea64.exe.vmoptions文件的最后一行追加一条命令: -Dfile.encoding=UTF-8 ,一定注意,不要有空格,否则重启IDEA时会打不开,然后 重启IDEA。

  3. 如果以上方法已经做完,还出现乱码,就再修改一个文件,并在文件的末尾添加: -Dfile.encoding=UTF-8,然后重启idea。


请添加图片描述

三:绘制流程

可以通过 New -> BpmnFile来创建.bpmn文件。绘制流程直接拖拽符号即可,中间是画布区,右边是符号区,左边是属性区(针对于每个流程节点或者连线进行属性参数设置)。其中IdName是最基础的属性,对于工作流中的Id(KEY_)最好和.bpmn文件名保持一致,这样会更加直观。

将鼠标放在每个符号的中间就会有一个黑点此时就可以拖出一条顺序流Sequence Flow来连接下一个节点。在这里插入图片描述

.bpmn文件使用文本编辑器打开就是一个xml文件,我们需要能够看懂<process>节点内的元素。
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions id="m1638888506117" name="" targetNamespace="http://www.activiti.org/test">
  <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>
  • definitions:流程定义根节点:包含流程元素和流程元素的大小位置等信息。targetNamespace 表示目标命名空间。
  • process:用于定义流程图,id属性表示流程的唯一标识,name属性表示流程的名字。
  • startEvent:表示流程的开始。
  • userTask:表示流程中的每个用户任务,name表示每个任务的名字,一般都需要重新定义Id值。
  • endEvent:表示流程的结束。
  • sequenceFlow:顺序流,表示符号之间的连线。sourceRef:表示连线开始节点的Id,targetRef:表示连线结束的节点的Id。

注意:startEvent、userTask、endEvent、sequenceFlow都有一个id属性默认值绘制流程时拖入的先后顺序。

四:其它插件

activiti-bpmn-visualizer(不推荐)

actiBPM在IDEA 2020版本就不支持了,这里推荐一个插件 activiti-bpmn-visualizer,个人使用下来也不好使用,不推荐。

在这里插入图片描述

创建文件:New - Activiti 6.x BPMN 2.0 file - 输入文件名 - 生成.bpmn20.xml文件
绘制流程:右键 -> View BPMN (Activiti) Diagram -> 右键(添加组件)

在这里插入图片描述

// 发布流程文件
public void deployProcess() {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    RepositoryService repositoryService = processEngine.getRepositoryService();
    Deployment deploy = repositoryService.createDeployment().addClasspathResource("helloworld.bpmn20.xml").deploy();
    System.out.println(deploy.getId());
}

bpmn-js(半推荐)

https://demo.bpmn.io/s/start 是一个在线绘制流程图的工具,可以集成到自己的项目中,也提供了很多自定义扩展功能,可以集成一些工具按钮如导入、导出、下载、保存图片、部署等功能。https://github.com/bpmn-io/bpmn-js,这个在线流程设计没有把属性面板给放出来,没法设置属性,可以自己搞个前端去集成把属性面板给放出来。
在这里插入图片描述

eclipse actiBPM(推荐)

在这里插入图片描述



知识传送门 》》》》》》》》


Activiti 是一个轻量级、灵活的开源工作流引擎,用于在应用程序中实现业务流程的自动化。它是一个基于Java的工作流和业务流程管理(BPM)平台,可以帮助开发人员设计、执行和管理各种业务流程。 Activiti 提供了许多功能,包括: 1. 流程定义:您可以使用 Activiti 的图形化设计器来定义和建模业务流程。这些流程可以由各种任务、条件和网关组成,以满足您的业务需求。 2. 流程执行:一旦定义了流程,您可以使用 Activiti 引擎来执行和管理流程实例。引擎会按照定义的流程规则自动处理任务、路由流程和记录执行历史。 3. 任务管理:Activiti 允许您分配和管理任务,以便团队成员可以完成特定的工作。您可以指定任务的优先级、截止日期和参与者,以确保任务按时完成。 4. 事件监听:Activiti 支持监听各种事件,例如流程启动、任务分配、任务完成等。这使得您可以根据不同的事件触发自定义逻辑来处理业务需求。 5. 历史数据记录:Activiti 可以记录所有流程实例和任务的历史数据,包括执行时间、参与者、结果等。这些数据有助于您分析和优化业务流程。 总的来说,Activiti 提供了一个强大且可扩展的平台,使您能够轻松地管理和优化业务流程。无论是简单的审批流程还是复杂的工作流,Activiti 都可以满足您的需求,并帮助您提高工作效率和业务质量。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风流 少年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值