官方网站:https://www.activiti.org/
Alfresco软件公司在2010 年 5 月17 日宣布Activiti业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理BPM的专家 Tom Baeyens 担任,Tom Baeyens 就是原来 jbpm的架构师, 而jbpm是一个非常有名的工作流引擎,当然activiti也是一个工作流引擎。
activiti 可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言(BPMN2.0)进行定义,业务系统按照预先定义的流程进行执行,实现了业务系统的业务流程由activiti进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本。
1、与以前开发流程的区别
以前:程序员控制流程单状态,当到达某个状态时,就给谁审批,但是如果中间环节断开,即缺少一级的审批,则需要重新修改审批流程代码。
Activiti7:通过流程图生成代码,在数据库中会保存当前流程节点的数据,每次执行完流程节点,数据库数据会删除,并且进入下一个节点(生成一条数据),如果某个节点不需要了,也不会影响程序的正常运行。
通过流程图生成代码:本质上是一个xml文件,通过解析xml文件就能获取每一个节点的数据,然后保存到数据库。
2、BPM
简介
BPM(Business Process Management),即业务流程管理,是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的系统化方法,常见商业管理教育如EMBA、MBA 等均将 BPM 包含在内。
企业流程管理主要是对企业内部改革,改变企业职能管理机构重叠、中间层次多、流程不闭环 等,做到机构不重叠、业务不重复,达到缩短流程周期、节约运作资本、提高企业效益的作用。
BPM软件
BPM软件就是根据企业中业务环境的变化,推进人与人之间、人与系统之间以及系统与系统之间的整合及调整的经营方法与解决方案的 IT 工具。 通常以 Internet方式实现信息传递、数据同步、 业务监控和企业业务流程的持续升级优化,从而实现跨应用、跨部门、跨合作伙伴与客户的企业运作。通过 BPM 软件对企业内部及外部的业务流程的整个生命周期进行建模、自动化、管理监控和优化,使企业成本降低,利润得以大幅提升。BPM 软件在企业中应用领域广泛,凡是有业务流程的地方都可以 BPM 软件进行管理,比如企业人事办公管理、采购流程管理、公文审批流程管理、财务管理等。
BPMN
BPMN(Business Process Model And Notation):业务流程模型和符号是BPMI(Business Process Management Initiative)开发的一套标准的业务流程建模符号,使用 BPMN 提供的符号可以创建业务流程。
2004 年 5 月发布了 BPMN1.0 规范.BPMI,于 2005 年 9 月并入 OMG(The Object Management Group对象管理组织)组织。OMG 于 2011 年 1月发布BPMN2.0 的最终版本。
BPMN 是目前被各 BPM 厂商广泛接受的 BPM 标准。Activiti 就是使用 BPMN 2.0 进行流程建模、流程执行管理,它包括很多的建模符号,比如: Event 用一个圆圈表示,它是流程中运行过程中发生的事情。
3、Activiti7使用教程
部署activiti
Activiti是一个工作流引擎(其实就是一堆 jar 包 API),业务系统使用activiti来对系统的业务流程进行自动化管理,为了方便业务系统访问(操作)activiti 的接口或功能,通常将 activiti 环境与业务系统的环境集成在一起。
流程定义
使用 activiti流程建模工具(activity-designer)定义业务流程(.bpmn文件)。 .bpmn 文件就是业务流程定义文件,通过xml定义业务流程。
如果使用其它公司开发的工作引擎一般都提供了可视化的建模工具(Process Designer)用于生成流程定义文件。建模工具操作直观,一般都支持图形化拖拽方式、多窗口的用户界面、丰富的过程图形元素、过程元素拷贝、粘贴、删除等功能。
流程定义部署
向activiti部署业务流程定义(.bpmn文件)。使用 activiti 提供的 api向 activiti 中部署.bpmn 文件,一般情况还需要一块儿部署业务流程的图片.png。
启动一个流程实例(ProcessInstance)
启动一个流程实例表示开始一次业务流程的运行,比如员工请假流程部署完成,如果张三要请假就可以启动一个流程实例,如果李四要请假也启动一个流程实例,两个流程的执行互相不影响,就好比定义一个java类,实例化两个对象一样,部署的流程就好比 java 类,启动一个流程实例就好比 new 一个 java 对象。
用户查询待办任务(Task)
因为现在系统的业务流程已经交给 activiti管理,通过activiti就可以查询当前流程执行到哪了, 当前用户需要办理什么任务了,这些activiti帮我们管理了,而不像上边需要我们在sql语句中的where条件中指定当前查询的状态值是多少。
用户办理任务
用户查询待办任务后,就可以办理某个任务,如果这个任务办理完成还需要其它用户办理,比如购单创建后由部门经理审核,这个过程也是由activiti帮我们完成了,不需要我们在代码中硬编码指定下一个任务办理人了。
流程结束
当任务办理完成没有下一个任务/结点了,这个流程实例就完成了。
4、Activiti7下载安装
下载地址:https://www.activiti.org/before-you-start
Maven地址:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.1.0-M8</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
5、安装Activiti Designer流程设计器(IDEA)
方式一:直接在IDEA中查询插件actiBPM安装
方式二:如果没有查询到插件,则自己下载导入,下载地址:https://plugins.jetbrains.com/plugin/7429-actibpm/versions,导入下载的actibpm.jar包
安装完成,在创建文件时可以看见
6)生成25张表
命名规则
Activiti的表都以act_开头,第二部分是表示表的用途的两个字母缩写标识,用途也和服务的API对应。
-
act_hi_*:'hi’表示 history,此前缀的表包含历史数据,如历史(结束)流程实例,变量,任务等等。
-
act_ge_*:'ge’表示 general,此前缀的表为通用数据,用于不同场景中。
-
act_evt_*:'evt’表示 event,此前缀的表为事件日志。
-
act_procdef_*:'procdef’表示 processdefine,此前缀的表为记录流程定义信息。
-
act_re_*:'re’表示 repository,此前缀的表包含了流程定义和流程静态资源(图片,规则等等)。
-
act_ru_*:'ru’表示 runtime,此前缀的表是记录运行时的数据,包含流程实例,任务,变量,异步任务等运行中的数据。Activiti只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。
数据表分类
-
通用数据(act_ge_)
表名 | 解释 |
---|---|
act_ge_bytearray | 二进制数据表,存储通用的流程定义和流程资源。 |
act_ge_property | 系统相关属性,属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。 |
-
流程定义表(act_re_)
表名 | 解释 |
---|---|
act_re_deployment | 部署信息表 |
act_re_model | 流程设计模型部署表 |
act_re_procdef | 流程定义数据表 |
-
运行实例表(act_ru_)
表名 | 解释 |
---|---|
act_ru_deadletter_job | 作业死亡信息表,作业失败超过重试次数 |
act_ru_event_subscr | 运行时事件表 |
act_ru_execution | 运行时流程执行实例表 |
act_ru_identitylink | 运行时用户信息表 |
act_ru_integration | 运行时积分表 |
act_ru_job | 运行时作业信息表 |
act_ru_suspended_job | 运行时作业暂停表 |
act_ru_task | 运行时任务信息表 |
act_ru_timer_job | 运行时定时器作业表 |
act_ru_variable | 运行时变量信息表 |
-
历史流程表(act_hi_)
表名 | 解释 |
---|---|
act_hi_actinst | 历史节点表 |
act_hi_attachment | 历史附件表 |
act_hi_comment | 历史意见表 |
act_hi_detail | 历史详情表,提供历史变量的查询 |
act_hi_detail | 历史流程用户信息表 |
act_hi_procinst | 历史流程实例表 |
act_hi_taskinst | 历史任务实例表 |
act_hi_varinst | 历史变量表 |
-
其他表
表名 | 解释 |
---|---|
act_evt_log | 流程引擎的通用事件日志记录表 |
act_procdef_info | 流程定义的动态变更信息 |
7、流程开发
在最新版的IDEA中去除了流程页面的编辑窗口,所以只能先创建流程图,然后用编辑软件打开该文件,即可编辑xml内容
将bpmn文件拷贝一份,后缀改为xml,然后右击选择编辑器打开,即可看见流程图
注:bpmn文件保存到本地其实是看不到流程图的,只能看见xml内容;但是如上操作后的流程图是可以导出为图片的
8、解决BPMN中文乱码
1)设置文件编码
2)修改IDEA配置文件
在idea.exe.vmoptions和idea64.exe.vmoptions后面加上-Dfile.encoding=UTF-8
3)在如下位置添加-Dfile.encoding=UTF-8,设置完重启即可