Activiti工作流

夙愿已清 提交于 2020-12-29 09:24:10

一、什么是工作流

工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。

工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流规则进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。

工作流管理联盟(WfMC,Workflow Management Coalition)给出的关于工作流管理系统的定义是:工作流管理系统是一个软件系统,它通过执行经过计算的流程定义去支持一批专门设定的业务流程。工作流管理系统被用来定义、管理、和执行工作流程。

工作流管理系统的目标:管理工作的流程以确保工作在正确的时间被期望的人员所执行——在自动化进行的业务过程中插入人工的执行和干预。

通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的形式就是工作流。

常用框架

Activiti、JBPM、Shark、OSWorkfolw、ActiveBPEL、YAWL

二、Activiti介绍

Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。基于Apache许可的开源BPM平台。

Java语言编写,对java支持非常好,可以快速上手。

提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程

稳定的BPMN2.0流程引擎

三、什么是BPMN

首先BPMN规范是由标准组织BPMI发布的.BPMN 1.0规范发布于2004年5月。此规范展示了BPMI组织两年多的努力成果。BPMN的主要目标就是要提供被所有业务用户理解的一套标记语言,包括业务分析者、软件开发者以及业务管理者与监察者。BPMN还将支持生成可执行的BPEL4WS语言。所以,BPMN在业务流程设计与流程实现之间搭建了一条标准化的桥梁。

BPMN定义了业务流程图,其基于流程图技术,同时为创建业务流程操作的图形化模型进行了裁减。业务流程的模型就是图形化对象的网图,包括活动(也可以说工作)和定义操作顺序的流控制。

将流程图转化为计算机能识别的一种标记语言。

BPMN的元素分类

 流对象(Flow Objects)

流对象是定义业务流程的主要图形元素。它进一步细分为三个类别,分别是事件(Events)、活动(Activities)和网关(Gateways);

事件(Events):流程的创建、流转、结束等都需要事件支持,例如在流程文档绘制阶段、定义开始事件、结束事件是一个必不可少的环节。可通过事件机制为工作流系统增加辅助功能。

活动(Activities):有生命周期的元素或者节点都可以称之为‘活动’,例如:任务节点,子流程、引用流程等,活动节点可以作为任何连线元素的源头或者目标。

网关(Gateways):所谓网关就是用来辅助决定流程实例最终流转的目的地,可以用来并行执行节点、也可以作为聚合或者条件分支使用,常用的网关类型有排他网关、兼容网关三种。

 数据(Data)

数据对象(Data Object)、

数据输入(Data Inputs)、

数据输出(Data Outputs)

数据存储(Data Stores);

 连接对象(Connection Ojbects)

用来把各个流对象或流对象与其他信息连接起来,它分为四种类别:顺序流(Sequence Flows)、消息流(Message Flows)、关联(Associations)和数据关联(Data Associations);

 泳道(Swimlanes)

用来区分不同部门或者不同参与者的功能和职责。Swimlanes包含两种类别:池(Pool)和道(Lane);

 人工交付物(Artifacts)

它用以给流程附加一些额外的信息,它分为两种类别:组(Group)和附注(Text Annotation)。

四、安装与运行Activiti

1、activiti软件环境

1)  JDK1.7或者更高版本

2)  支持的数据库有:h2,mysql,oracle,db2等

3)  支持activiti运行的jar包,可以通过maven依赖引入

4)  开发环境为Eclipse3.7或者以上版本,myeclipse为8.6版本

2、安装流程设计器(eclipse插件)

1)打开Help àInstall New Software àAdd

输入 Name:   Activiti Designer

 Location: http://activiti.org/designer/update/

输入完成后,单击OK按钮等待下载完成后安装。

安装完成后在菜单选项中会出现activiti的目录选项

3、activiti下载

github地址:https://github.com/Activiti/Activiti

由于activiti官网常年无法打开,所以如果要下载activiti,只能去github上下载

源码下载

发行版下载

4、运行官方例子

第一步

解压activiti发行版后,看到的目录如下:

1)      database:里面存放的是Activiti使用到的数据库信息的sql文件,它支持的数据库类型如下图,使用时只需执行你自己的数据库类型的文件即可。如:你的数据库是mysql,那么就执行activiti.mysql.create.*.sql即可。

2)      docs:毫无疑问,api文档是也。

3)      libs:使用Activiti所需要的所有的jar包和源文件。

4)      wars:官方给我们提供的示例Demo,通过使用Demo可以更加快速的了解Activiti。

第二步

通过运行你下载的包里的wars文件夹里的所有.war文件,以便更快的了解Activiti。将文件拷贝至Tomcat的webapps目录,启动tomcat,输入http://localhost:8080/activiti-app/

注意:登陆Activiti的用户名和密码都是admin test

这里需要说明的就是,这个Demo默认采用的是h2内存数据库,启动的时候开始创建数据库,关闭的时候清除数据。所以每次重启,数据都会清空

 

官方案例使用

1.登陆管理员账号

http://localhost:8080/activiti-app/ admin test

2. 创建普通用户和经理用户

进入Identity ManageMent --> Users -- > create User

3.创建流程

进入 kickstart APP -> Processes -- > Create Proesss --> Assignment(userTask中填写任务人)

4.创建项目,将流程放入项目中

进入 kickstart APP -> Apps-- > Create App -- > 填写AppName与AppKey -- >

Edit included models --> publish

5.切换到jiangbang用户,进入 OA-->Processes -- > start a processes -- > start process

此时已经发起了请假流程,点击Show diagram可以看到流程进度

声明接受这个任务 claim---> 完成任务 :complete

6.切换经理账号,按照5步骤完成任务,此时任务列表清空了,要看任务历史记录,需要去后台项目中观看。

后台项目地址:http://localhost:8080/activiti-admin/ admin admin

后台项目修改端口为8080

五、服务API介绍

 

ProcessEngine:在Activiti中最核心的类,其他的类都是由他而来,定义了各种服务类实例对象方法

ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

 

RepositoryService : 仓库存储服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片该service可以用来删除部署的流程定义。

RepositoryService repositoryService = engine.getRepositoryService();

 

RuntimeService : 流程执行服务类(运行时服务,可以从这个服务类中获取很多关于流程执行的相关的信息。)

RuntimeService runtimeService = engine.getRuntimeService();

 

TaskService :任务服务类。提供一系列流程任务的方法,例如:任务的完成、挂起、激活、添加处理人、认领、删除等操作。

TaskService taskService = engine.getTaskService();

 

IdentityService :用户服务类。 提供一系列操作用户或者用户组的方法。

IdentityService identityService = engine.getIdentityService();

 

HistoryService : 提供一系列查询历史流程实例、历史变量、历史任务的方法。

HistoryService historyService = engine.getHistoryService();

 

ManagementService : 提供查询数据库中的数据、表的元数据以及执行命令等方法。

ManagementService managementService = engine.getManagementService();

 

FormService : 提供一系列操作流程表单的方法

FormService formService = engine.getFormService();

 

ProcessInstance:流程定义的执行实例,当一个部署的流程图启动后,该流程只有一条流程实例数据,但是它的流程任务可以有多个,每个任务对应流程图中相应的流程节点。

 

ProcessDefinition:流程定义类,可以从这里获得资源文件等。

 

六、数据库介绍

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。

ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。

ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。

ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。

ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。

 

表结构操作:

3.1:资源库流程规则表

1)        act_re_deployment        部署信息表

2)        act_re_model               流程设计模型部署表

3)        act_re_procdef             流程定义数据表

3.2:运行时数据库表

1)        act_ru_execution           运行时流程执行实例表

2)        act_ru_identitylink        运行时流程人员表,主要存储任务节点与参与者的相关信息

3)        act_ru_task                   运行时任务节点表

4)        act_ru_variable             运行时流程变量数据表

3.3:历史数据库表

1)        act_hi_actinst               历史节点表

2)        act_hi_attachment          历史附件表

3)        act_hi_comment            历史意见表

4)        act_hi_identitylink         历史流程人员表

5)        act_hi_detail                 历史详情表,提供历史变量的查询

6)        act_hi_procinst              历史流程实例表

7)        act_hi_taskinst              历史任务实例表

8)        act_hi_varinst               历史变量表

3.4:组织机构表

1)     act_id_group           用户组信息表

2)     act_id_info              用户扩展信息表

3)     act_id_membership  用户与用户组对应信息表

4)     act_id_user             用户信息表

这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足

3.5:通用数据表

act_ge_bytearray          二进制数据表(一个存储xml,一个存储图片)

act_ge_property            属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!