初始Activiti

一、工作流的定义:

工作流,简单的理解就是工作流程,工作流在我们日常生活中无处不在,例如说:员工请假,首先需要提交请假申请,然后提交的申请转到上级领导手里,领导检查过后并同意,最后通知员工领导同意该请假申请,这一系列的流程就相当于一个工作流程,这一切的工作都会在上级确认并同意后自动运行,这就是工作流技术。Georgakopoulos给出的工作流定义:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完。

常见的oa系统等就经常用到工作流

常见开源工作流引擎框架:OSWorkFlow、jBPM(jboss business process management)、Activity(对jBPM升级)工作流

 

二、工作流介绍:

工作流引擎:ProcessEngine对象,这是Activity的核心,负责生成流程运行时的各种实例即数据、监控和管理流程的运行。

 

 

 

 

//该方法会自动加载classpath下名为activiti.cfg.xml文件
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

//可以产生RepositoryService
RepositoryService repositoryService = processEngine.getRepositoryService();

//可以产生RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();

//可以产生TaskService
TaskService taskService = processEngine.getTaskService();

//可以产生managementService
ManagementService managementService = processEngine.getManagementService();

//可以产生IdentityService
IdentityService identityService = processEngine.getIdentityService();

//可以产生HistoryService 
HistoryService historyService = processEngine.getHistoryService();

//可以产生FormService
FormService formService = processEngine.getFormService();

//可以产生DynamicBpmnService
DynamicBpmnService dynamicBpmnService = processEngine.getDynamicBpmnService();

 

各个Service的作用:

RepositoryService

管理流程定义

RuntimeService

执行管理,包括启动、推进、删除流程实例等操作

TaskService

任务管理

HistoryService

历史管理(执行完的数据管理)

IdentityService

组织机构管理

FormService

一个可选服务,任务表单管理

ManagerService

activiti的引擎管理类

 

简单介绍:

1)RepositoryService

是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工

作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计

算机。除了部署流程定义以外还可以:查询引擎中的发布包和流程定义。

暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操

作了,激活是对应的反向操作。获得多种资源,像是包含在发布包里的文件, 或引

擎自动生成的流程图。获得流程定义的pojo版本,可以用来通过java解析流程,而不必通过xml。

2)RuntimeService

Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息

3)TaskService

Activiti的任务管理类。可以从这个类中获取任务的信息。

4)HistoryService

Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根

据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实

例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。

5)ManagementService

Activiti的引擎管理类,提供了对 Activiti 流程引擎的管理和维护功能,这些功能不

在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。

 

三、BPM:

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

 

四、BPMN:

业务流程建模与标注(Business Process Model and Notation,BPMN),描述流程的基本符号,包括这些图元如何让组合成一个业务流程图(Business Process Diagram),整个BPMN是用一组符号来描述业务流程中发生的各种事件的。BPMN通过在这些符号事件之间连线来描述一个完整的业务流程。

 

 

 

接下来我们来大致了解一下常用符号的含义:

1)事件Event

 

事件是驱动工作流发展的核心对象,在工作流的流程定制中会经常看到。

 

2)活动Activity

活动是工作或任务的一个通用术语。一个活动可以是一个任务,也可以是当前流程

的子处理流程。并且,活动会有不同的类型。例如Activiti中定义了

UserTask,ScriptTask,ServiceTask,MailTask等等多种类型。这些活动是构成整个业

务流程的主体

 

 

 

3)网关GateWay

网关是用来处理角色的,他决定了工作流的业务走向。有几种常用的网关需要了解

一下:

 

 

 

3.1)排他网关

只有一条路径会被选择。流程执行到该网关时,会按照输出流的顺序逐个计算,当

条件的结果为true时,继续执行当前网关的输出流。如果有多条线路计算结构都是true,则会执行第一个值为true的路线。如果所有网关计算结果都没有true,引擎会抛出异常。排他网关需要和条件顺序流结合使用,default属性指定默认顺序流,当所有的条件不满足时会执行默认顺序流。

 

3.2)并行网关

所有路径会被同时选择。并行执行所有输出顺序流,为每一条顺序流创建一个并行执行路线。最终,在所有的执行路线都执行完后才继续向下执行。

 

3.3)包容网关

可以同时执行多条路线。相当于是排他网关和并行网关的结合。可以在网关上设置条件,计算每条路线上的表达式。当表达式计算结果为true时,创建一个并行线路并继续执行。最终,当所有需要执行的线路都执行完成后才继续向下执行。

 

3.4)事件网关

专门为中间捕获事件而设置。允许设置多个输出流指向多个不同的中间捕获事件。

当流程执行到事件网关后,流程出于等待状态,需要等待抛出对应的事件才能将等

待状态转换为活动状态。

 

五、数据库

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

Activity的工作流数据库有23张表

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

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

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

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

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

 

1)表结构:

1.1)资源流程规则表

act_re_deployment        部署信息表

act_re_model           流程设计模型部署表

act_re_procdef          流程定义数据表

 

1.2)运行时数据库表

act_ru_execution         运行时流程执行实例表

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

act_ru_task            运行时任务节点表

act_ru_variable          运行时流程变量数据表

 

1.3)历史数据库表

act_hi_actinst          历史节点表

act_hi_attachment         历史附件表

act_hi_comment          历史意见表

act_hi_identitylink        历史流程人员表

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

act_hi_procinst          历史流程实例表

act_hi_taskinst          历史任务实例表

act_hi_varinst          历史变量表

 

1.4)组织机构表

act_id_group           用户组信息表

act_id_info            用户扩展信息表

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

act_id_user            用户信息表

 

1.5)通用数据表

act_ge_bytearray         二进制数据表

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

 

六、activity.cfg.xml

Activity核心配置文件,配置流程引擎创建工具的基本参数和数据库连接参数

 

七、Activiti使用步骤

通常使用Activiti时包含以下几个步骤:

.部署Activiti:Activiti包含一堆jar包,因此需要把业务系统和Activiti的环境集成在一起进行部署。

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

.部署流程定义:使用Activiti提供的API把流程定义内容存储起来,在Activiti执行过程汇总可以查询定义的内容。Activiti是通过数据库来存储业务流程的。

.启动流程实例:流程实例也叫ProcessInstance。启动一个流程实例表示开始一次业务流程的运作。例如员工提交请假申请后,就可以开启一个流程实例,从而推动后续的审批等操作。

.用户查询代办任务(task):因为现在系统的业务流程都交给activiti管理,通过activiti就可以查询当前流程执行到哪个步骤了。当前用户需要办理哪些任务也就同样可以由activiti帮我们管理,开发人员不需要自己编写sql语句进行查询了

.用户办理任务:用户查询到自己待办任务后,就可以办理某个业务,如果这个业务办理完成还需要其他用户办理,就可以由activiti帮我们把工作流程往后面的步骤推动。

.流程结束:当任务办理完成没有下一个任务节点的时候,这个流程实例就执行完成了。

posted @ 2022-08-22 09:29  萨科拉  阅读(89)  评论(0编辑  收藏  举报