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

Posted vbirdbest

tags:

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

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

一:工作流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:人事已审批)等类似逻辑照样能完全实现业务,我们需要想好一整套完整的思路,并不断的修复Bug,这种设计被称为状态驱动。如果这个业务让不同的人写可能他们的思路都不一样,虽然他们都能实现业务需求,这样等新同事入职的时候又感觉写的不好又会换另一种思路,自己写逻辑的缺点就是整个代码辨识度不高。就像权限管理框架Shiro或者SpringSecurity,只要学过这个框架大家都知道是怎么玩的,都知道应该有哪些类和哪些方法,大家能很快就完全熟悉了,这就是一个开源框架的优势。

1.4.2 理由二

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

1.4.3 理由三

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

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

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

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

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

1.5 bpmn

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

  • 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文件。

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属性默认值绘制流程时拖入的先后顺序。

以上是关于Activiti7工作流引擎:基础篇 简介与IDEA插件安装的主要内容,如果未能解决你的问题,请参考以下文章

Activiti7工作流引擎:基础篇 基本查询

Activiti7工作流引擎:基础篇 常用操作

Activiti7工作流引擎:基础篇 Annotation

Activiti7工作流引擎:基础篇 Annotation

Activiti7工作流引擎:基础篇 Hello World

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