天天看点

Activiti7入门手册

一、工作流介绍

工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。在计算机中,工作流属于计算机支持的协同工作(CSCW)的一部分。后者是普遍地研究一个群体如何在计算机的帮助下实现协同工作的。

工作流主要解决的主要问题是:为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。

工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。

工作流管理联盟(WfMC,Workflow Management Coalition)给出的关于工作流管理系统的定义是:工作流管理系统是一个软件系统,它完成工作流的定义和管理,并按照在计算机中预先定义好的工作流逻辑推进工作流实例的执行。

消费品行业,制造业,电信服务业,银证险等金融服务业,物流服务业,物业服务业,物业管理,大中型进出口贸易公司,政府事业机构,研究院所及教育服务业等,特别是大的跨国企业和集团公司。

关键业务流程:订单、报价处理、合同审核、客户电话处理、供应链管理等。

行政管理类:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。

人事管理类:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。

财务相关类:付款请求、应收款处理、日常报销处、出差报销、预算和计划申请等。

客户服务类:客户信息管理、客户投诉、请求处理、售后财务管理等。

特殊服务类:ISO系统对应流程、质量管理对应流程、产品数据信息管理、贸易公司报关处理、物流公司货物跟踪处理等各种通过表单逐步手动流转完成的任务均可应用工作流软件自动规范实施。

在没有专门的工作流引擎之前,我们之前为了实现流程控制,通常的做法就是采用状态字段的值来跟踪流程的变化情况。这样不同角色的用户,通过状态字段的取值来决定记录是否显示。

针对有权限可以查看的记录,当前用户根据自己的角色来决定审批是否是合格的操作。如果合格将状态字段设置一个值,来代表合格;当然如果不合格也需要设置一个值来代表不合格的情况。

这是一种最为原始的方式。通过状态字段虽然做到了流程控制,但是当我们的流程发生变更的时候,这种方式所编写的代码也要进行调整。

那么有没有专业的方式来实现工作流的管理呢?并且可以做到业务流程变化之后,我们的程序可以不用改变,如果可以实现这样的效果,那么我们的业务系统的适应能力就得到了极大提升。答案就是采用工作流引擎。

二、Activiti7介绍

Alfresco 软件在 2010 年 5 月 17 日宣布 Activiti 业务流程管理(BPM)开源项目的正式启动, 其首席架构师由业务流程管理 BPM 的专家 Tom Baeyens 担任, Tom Baeyens 就是原来 jbpm 的架构师,而 jbpm 是一个非常有名的工作流引擎,当然 activiti 也是一个工作流引擎。

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

官方网站

BPM(Business Process Management),即业务流程管理,是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法,常见商业管理教育如EMBA、MBA等均将BPM包含在内。

企业流程管理主要是对企业内部改革,改变企业只能管理机构重叠、中间层次多、流程不闭环等,做到机构不重叠、业务不复杂,达到缩短流程周期、节约运作资本、提高企业效益的作用。

比较下面的两个人事加薪流程,那个效率更高?

流程一:

graph LR

F[人事加薪流程]

A[制定加新计划] -->B[部门经理审批]

   B --> C[总经理审批]

   C -->D[财务经理审批]

流程二:

   B --> C{1万元}

   C -->|1万元以内|D[财务经理审批]  

   C -->|1万元以上|E[总经理审批]

上面的两个流程的区别在于第二个流程在执行时,如果本次加薪金额在一万元内不再由总经理审批将比第一个流程缩短流程周期,从而提高效率。

BPM软件就是根据企业中业务环境的变化,推进人和人之间、人和系统之间以及系统和系统之间的整合及调整的经营方法和解决方案的IT工具。通常以Internet方式实现信息传、数据同步、业务监控和企业业务流程的持续升级优化,从而实现跨应用、跨部门、夸合作伙伴和客户的企业运作。

通过BPM软件对企业内部及外部的业务流程的整个生命周期进行建模、自动化、管理监控和优化,使企业成本降低,利润得以大幅度提升。

BPM软件在企业中应用领域广泛,凡是有业务流程的地方都可以用BPM软件进行管理,比如企业人事办公管理、采购流程管理、公文审批流程管理、财务管理等。

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标准。Activit就是使用BPMN2.0进行流程建模、流程执行管理,它包括很多的建模符号。

一个BPMN的例子:

首先当事人发起一个请假单;

其次他所在部门的经理对请假单进行审核;

然后人事经理进行复核并进行备案;

最后请假流程结束。

Activiti7入门手册

在线BPMN网址https://bpmn.io

三、Activiti如何使用

Activiti是一个工作流引擎,业务系统使用Activiti来对系统的业务流程进行自动化管理,为了方便业务系统访问(操作)Activiti的接口或功能,通常将Activiti和业务系统的环境集成在一起。

使用Activiti流程建模工具定义业务流程(.bpmn文件)。

.bpmn文件就是业务流程定义文件,通过xml定义业务流程。

如果使用其他公司开发的工作引擎一般都提供了可视化的建模工具(Process Designer)用于生成流程定义文件,建模工具操作直观,一般都支持图形化拖拽方式、多窗口的用户界面、丰富的过程图形元素、过程元素拷贝、粘贴、删除等功能。

向Activiti部署业务流程定义(.bpmn文件)。

使用Activiti提供的API向Activiti中部署.bpmn文件(一般情况下还需要一起部署业务流程的图片.png)。

启动一个流程实例表示开始一次业务流程的运行,比如员工请假流程部署完成,如果张三要请假就可以启动一个流程实例,如果李四要请假也需要启动一个流程实例,两个流程的执行互不影响,就好比定义一个Java类,实例化两个Java对象一样,部署的流程就好比Java类,启动一个流程实例就好比new一个Java对象。

因为现在系统的业务流程已经交给Activiti管理,通过Activiti就可以查询当前流程执行到哪里了,当前用户需要办理什么任务了,这些Activiti帮我们管理了,而不像传统方式中需要我们在SQL语句中的WHERE条件中指定当前查询的状态值是多少。。

用户查询待办任务后,就可以办理某个任务,如果这任务办理完成还需要其他用户办理,比如采购单创建后由部门经理审核,这个过程也是由Activiti帮我们完成了,不需要我们在代码中硬编码指定下一个任务办理人了。

当任务办理完成没有下一个任务/结点了,这个流程实例就完成了。四、Activiti环境

通过IDEA创建Maven的Java工程。

在Java工程中加入ProcessEngine所需要的jar包,包括:

activiti-engine-7.0.0.GA.jar

activiti依赖的jar包:mybatis、slf4j、log4j等

activiti依赖的spring的jar包

数据库驱动

第三方数据库连接池dbcp

单元测试junit

创建ProcessEngineConfiguration,通过ProcessEngineConfiguration创建ProcessEngine,在创建ProcessEngine的同时会自动创建数据库。

示例:

也可以这样

此时我们查看数据库,发现25张表

五、Activiti服务架构

Activiti7入门手册

通过ProcessEngine创建Service,Service是工作流引擎提供用于进行工作流部署、指定、管理的服务接口。

创建方式如下:

Service接口

说明

RepositoryService

Activiti的资源管理接口

RuntimeService

Activiti的流程运行管理接口

TaskService

Activiti的任务管理接口

HistoryService

Activiti的历史管理接口

ManagementService

Activiti的引擎管理接口

RepositoryService,是Activiti的资源管理接口,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要使用此Service将流程定义文件的内容部署到计算机中。

除了流程部署定义以外还可以做如下的操作:

查询引擎中的发布包和流程定义。

暂停或激活发布包以及对应全部和特定流程定义。暂停意味着它们不能再在执行任务操作了,激活是对应的反向操作。

获取多种资源,像包含在发布包中的文件获引擎自动生成的流程图。

获取流程定义的POJO,可以用解析流程,而不必通过XML。

RuntimeService是Activiti的流程运行管理接口,可以从这个接口中获取很多关于流程执行相关的信息。

TaskService是Activiti的任务管理接口,可以从这个接口中获取任务的信息。

HistoryService是Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会包含很多数据(根据配置),比如流程实例启动时间,任务的参与者,完成任务的时间,每个流程实例的执行路径,等等。

ManagementService是Activiti的引擎管理接口,提供了对Activiti流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于Activiti系统的日常维护。六、流程定义

在IDEA中安装对应的Activiti-Designer已停止更新了。

https://gitee.com/jjjxxx/activiti-designer

基于bpmn.js 的 activiti 模型设计器

切换到项目目录下运行 npm install 安装依赖

运行 npm run dev 启动

可在页面进行拖拽设计activiti的流程图,支持导出bpmn流程图和svg图片

运行截图

Activiti7入门手册

选中可执行文件

Activiti7入门手册

把请假申请任务分配给张三

Activiti7入门手册

导出diagram.bpmn

将刚才生成的holiday.bpmn和holiday.png拷贝到项目的resources目录下。

Activiti7入门手册

测试

运行结果:

Activiti7入门手册

流程定义部署在Activiti中之后就可以通过工作流管理业务流程了。

针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于Java类和Java对象的关系,类定义好之后需要new创建一个对象使用,当然,也可以new多个对象。

对于请假申请流程,张三发起一个请假申请单需要启动一个流程实例,李四发起一个请求申请单也需要启动一个流程实例。

关系: 流程定义(BPMN文件)-->流程部署(Activiti的三张表)。 流程实例-->启动流程实例。 类比: 流程定义类似于Java中的类,流程实例类似于Java中的一个实例(对象),所以一个流程定义key对应多个不同的流程实例。
Activiti7入门手册

流程启动后,各个任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户的待办任务。

Activiti7入门手册

任务负责人查询待办任务,选择任务进行处理,完成任务。

Activiti7入门手册

七、流程定义

流程定义是按照BPMN2.0标准去描述业务流程,通常使用Activiti-explorer(Activiti控制台)或Activiti-eclipse-designer(Activiti的eclipse设计器)插件对业务流程进行建模,这两种方式都遵循BPMN2.0标准。

如果使用Activiti-eclipse-designer插件完成业务流程建模。可以生成两个文件:.bpmn和.png文件。

.bpmn文件其实就是XML文件。

.bpmn文件的根节点是definitions节点。这个元素中,可以定义多个流程定义(建议每个文件只包含一个流程定义,可以简化开发过程中的维护难度)。注意,definitions元素最少也要包含xmlns和targetNamespace的声明。targetNamespace可以是任何值,它用来对流程实例进行分类。

流程定义部分:定义了流程每个结点的描述和结点之间的流程流转。

流程布局定义:定义流程每个结点在流程图上的位置坐标等信息。

将生成的流程定义部署到Activiti的数据库中,这就是流程定义部署,通过调用Activiti的API将流程定义的bpmn和png两个文件一个一个添加部署到Activiti中,也可以将两个文件打成zip包进行部署。

分别将bpmn文件和png图片文件部署。

将.bpmn文件和.png图片压缩成一个zip包。

Activiti7入门手册

流程定义部署后,会操作三张表:act_re_deployment、act_re_procdef和act_ge_bytearray。

act_re_deployment是流程定义部署表,记录流程部署信息。

act_re_procdef是流程定义表,记录流程定义信息。

act_ge_bytearray是资源表,将.bpmn文件和.png图片存入到这个表。

说明: act_re_deployment和act_re_procdef是一对多的关系,一次部署在流程部署表生成一条记录,但一次流程部署可以部署多个流程定义,每个流程定义在流程定义表生成一条记录。每一个流程定义在act_ge_bytearray会存在两个资源记录.bpmn文件和.png图片。 建议: 一次部署一个流程,这样部署表和流程定义表示一对一的关系,方便读取流程部署和流程定义信息。

结果显示为:

Activiti7入门手册
Activiti7入门手册

在数据库中访问DEPLOYMENT_ID表可以发现22501的部署数据已经消失。

示例:通过查询流程定义对象获取流程定义资源,即bpmn和png

继续阅读