什么是工作流
1. 工作流介绍
工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。
2. 工作流系统
一个软件系统中具有工作流的功能,我们把它称为工作流系统,一个系统中工作流的功能是什么?就是对系统的业务流程进行自动化管理,所以工作流是建立在业务流程的基础上,所以一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。即使没有工作流业务系统也可以开发运行,只不过有了工作流可以更好的管理业务流程,提高系统的可扩展性。
⑴ 适用行业
消费品行业,制造业,电信服务业,银证险等金融服务业,物流服务业,物业服务业,物业管理,大中型进出口贸易公司,政府事业机构,研究院所及教育服务业等,特别是大的跨国企业和集团公司。
⑵ 具体应用
关键业务流程:订单、报价处理、合同审核、客户电话处理、供应链管理等
行政管理类:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。
人事管理类:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。
财务相关类:付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。
客户服务类:客户信息管理、客户投诉、请求处理、售后服务管理等。
特殊服务类:ISO 系列对应流程、质量管理对应流程、产品数据信息管理、贸易公司报关处理、
物流公司货物跟踪处理等各种通过表单逐步手工流转完成的任务均可应用工作流软件自动规范
地实施。
3. 工作流实现方式
在没有专门的工作流引擎之前,我们之前为了实现流程控制,通常的做法就是采用状态字段的值来跟踪流程的变化情况。这样不用角色的用户,通过状态字段的取值来决定记录是否显示。
针对有权限可以查看的记录,当前用户根据自己的角色来决定审批是否合格的操作。如果合格将状态字段设置一个值,来代表合格;当然如果不合格也需要设置一个值来代表不合格的情况。
这是一种最为原始的方式。通过状态字段虽然做到了流程控制,但是当我们的流程发生变更的时候,这种方式所编写的代码也要进行调整。
那么有没有专业的方式来实现工作流的管理呢?并且可以做到业务流程变化之后,我们的程序可以不用改变,如果可以实现这样的效果,那么我们的业务系统的适应能力就得到了极大提升。
Activity7概述
介绍
Alfresco软件在2010年5月17日宣布Activiti业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理BPM的专家 Tom Baeyens担任,Tom Baeyens就是原来jbpm的架构师,而jbpm是一个非常有名的工作流引擎,当然activiti也是一个工作流引擎。
Activiti是一个工作流引擎, activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由activiti进行管理,减少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发维护成本。
官方网站:https://www.activiti.org/
BPM
BPM(Business Process Management),即业务流程管理,是一种规范化的构造端到端的业务流程,以持续的提高组织业务效率。常见商业管理教育如EMBA、MBA等均将BPM包含在内。
BPM软件
BPM软件就是根据企业中业务环境的变化,推进人与人之间、人与系统之间以及系统与系统之间的整合及调整的经营方法与解决方案的IT工具。
通过BPM软件对企业内部及外部的业务流程的整个生命周期进行建模、自动化、管理监控和优化,使企业成本降低,利润得以大幅提升。
BPM软件在企业中应用领域广泛,凡是有业务流程的地方都可以BPM软件进行管理,比如企业人事办公管理、采购流程管理、公文审批流程管理、财务管理等。
BPMN
BPMN(Business Process Model AndNotation)- 业务流程模型和符号 是由BPMI(BusinessProcess 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
用一个圆圈表示,它是流程中运行过程中发生的事情。
活动用圆角矩形表示,一个流程由一个活动或多个活动组成
Bpmn图形其实是通过xml表示业务流程,上边的.bpmn文件使用文本编辑器打开:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
<process id="myProcess" name="My process" isExecutable="true">
<startEvent id="startevent1" name="Start"></startEvent>
<userTask id="usertask1" name="创建请假单"></userTask>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
<userTask id="usertask2" name="部门经理审核"></userTask>
<sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>
<userTask id="usertask3" name="人事复核"></userTask>
<sequenceFlow id="flow3" sourceRef="usertask2" targetRef="usertask3"></sequenceFlow>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow4" sourceRef="usertask3" targetRef="endevent1"></sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
<bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess">
<bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
<omgdc:Bounds height="35.0" width="35.0" x="130.0" y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
<omgdc:Bounds height="55.0" width="105.0" x="210.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">
<omgdc:Bounds height="55.0" width="105.0" x="360.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="usertask3" id="BPMNShape_usertask3">
<omgdc:Bounds height="55.0" width="105.0" x="510.0" y="150.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
<omgdc:Bounds height="35.0" width="35.0" x="660.0" y="160.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="165.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="210.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
<omgdi:waypoint x="315.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="360.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
<omgdi:waypoint x="465.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="510.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
<omgdi:waypoint x="615.0" y="177.0"></omgdi:waypoint>
<omgdi:waypoint x="660.0" y="177.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
使用步骤
部署activiti
Activiti是一个工作流引擎(其实就是一堆jar包API),业务系统访问(操作)activiti的接口,就可以方便的操作流程相关数据,这样就可以把工作流环境与业务系统的环境集成在一起。
流程定义
使用activiti流程建模工具(activity-designer)定义业务流程(.bpmn文件) 。
.bpmn文件就是业务流程定义文件,通过xml定义业务流程。
流程定义部署
activiti部署业务流程定义(.bpmn文件)。
使用activiti提供的api把流程定义内容存储起来,在Activiti执行过程中可以查询定义的内容
Activiti执行把流程定义内容存储在数据库中
启动一个流程实例
流程实例也叫:ProcessInstance
启动一个流程实例表示开始一次业务流程的运行。
在员工请假流程定义部署完成后,如果张三要请假就可以启动一个流程实例,如果李四要请假也启动一个流程实例,两个流程的执行互相不影响。
用户查询待办任务(Task)
因为现在系统的业务流程已经交给activiti管理,通过activiti就可以查询当前流程执行到哪了,当前用户需要办理什么任务了,这些activiti帮我们管理了,而不需要开发人员自己编写在sql语句查询。
用户办理任务
用户查询待办任务后,就可以办理某个任务,如果这个任务办理完成还需要其它用户办理,比如采购单创建后由部门经理审核,这个过程也是由activiti帮我们完成了。
流程结束
当任务办理完成没有下一个任务结点了,这个流程实例就完成了。
Activiti环境
开发环境
jdk1.8或以上版本
Mysql5及以上版本
Tomcat8.5
Idea
Activiti环境
我们使用:Activiti Betal 默认支持Spring5
下载Activiti
Activiti下载地址:http:activiti.org/download.html
Maven依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
按照idea流程设计器
流程图设计工具
Activiti-Model(推荐)
Activiti默认的一款在线流程设计器,可在线设计.bpmn流程图文件,需要集成Activiti-Model,然后项目运行后可以在线设计流程图,推荐使用。
camunda-modeler(推荐)
基于 bpmn.io的面向 BPMN DMN和CMMN的集成建模解决方案,camunda-modeler是一款外部流程设计器,同普通安装软件一样安装完后双击.exe程序即可使用,也可以通过IDEA安装外部Tool使用。
官网版本: Camunda Modeler 3.0.0 Released - Camunda
Camunda Modeler下载渠道
官网下载
https://bpmn.io/modeler/
GitHub下载
https://github.com/camunda/camunda-modeler
三、IDEA安装外部Tools
Tools——>External Tools
点击OK后,重启IDEA.
点击项目右键找到External Tools ——> camunda-modeler开始流程设计
四、camunda-modeler学习资料
camunda流程图设计工具
https://segmentfault.com/t/camunda-modeler
下载插件Activiti BPMN visualizer
具体流程
1、创建保存BPMN保存目录
在 idea 中使用插件:Activiti BPMN visualizer,创建流程图,具体使用如下:
注:将流程图创建在 resources\activiti 包下,入下图所示
2、创建BPMN文件
在新建的 activiti 包上右键,选择 New Activiti,填写文件名称后回车即可创建完成
3、编写具体流程
在创建好的文件中任意位置右键,选择 View BPMN Diagram,打开可视化界面(流程定义的界面)
打开可视化编辑器,右键start events –>start event画一个开始事件。
在绘图界面右键,打开对应的菜单,选择后绘制,选择当前节点,在下方出现对应的属性,根据需要可以配置,如下图所示:
生成.png图片文件
在流程图中点击右键生成
注:此处可能生成的图片的时候没有描述,只有相关图片,此处解决方案为下图所示
右键我的的流程的xml文件选择Diagrams
选择你要保存的目录为止,此处建议和xml文件保存在一处
Activiti 支持的数据库
activiti 支持的数据库和版本如下:
在MySQL生成表
创建数据库
创建 mysql 数据库 activiti (名字任意):
CREATE DATABASE activiti DEFAULT CHARACTER SET utf8;
使用java代码生成表
1) 创建 java 工程
使用idea 创建 java 的maven工程,取名:activiti01。
2) 加入 maven 依赖的坐标(jar 包)
首先需要在 java 工程中加入 ProcessEngine 所需要的 jar 包,包括:
- activiti-engine-7.1.0.M6.jar (我们使用maven)
- activiti 依赖的 jar 包: mybatis、 alf4j、 log4j 等
- activiti 依赖的 spring 包
- mysql数据库驱动
- 第三方数据连接池 dbcp
- 单元测试 Junit-4.12.jar
我们使用 maven 来实现项目的构建,所以应当导入这些 jar 所对应的坐标到 pom.xml 文件中。
完整的依赖内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itheima</groupId>
<artifactId>activiti01</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- activiti 的相关包 mysql的驱动包 mybatis log4j 数据库链接池-->
<properties>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<activiti.version>7.1.0.M6</activiti.version>
</properties>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- bpmn 模型处理 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- bpmn 转换 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-converter</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- bpmn json数据转换 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- bpmn 布局 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- activiti 云支持 -->
<dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-cloud-services-api</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- 链接池 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</project>
3) 添加log4j日志配置
我们使用log4j日志包,可以对日志进行配置
在resources 下创建log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE
# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m\n
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=f:\act\activiti.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m\n
4) 添加activiti配置文件
我们使用activiti提供的默认方式来创建mysql的表。
默认方式的要求是在 resources 下创建 activiti.cfg.xml 文件,注意:默认方式目录和文件名不能修改,因为activiti的源码中已经设置,到固定的目录读取固定文件名的文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
</beans>
5) 在 activiti.cfg.xml 中进行配置
默认方式要在在activiti.cfg.xml中bean的名字叫processEngineConfiguration,名字不可修改
在这里有2中配置方式:一种是单独配置数据源,一种是不单独配置数据源
1、直接配置processEngineConfiguration
processEngineConfiguration 用来创建 ProcessEngine,在创建 ProcessEngine 时会执行数据库的操作。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 默认id对应的值 为processEngineConfiguration -->
<!-- processEngine Activiti的流程引擎 -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.183.9:3306/activiti?useSSL=false&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&characterSetResults=utf8"/>
<property name="jdbcUsername" value="root"/>
<property name="jdbcPassword" value="123456"/>
<!-- activiti数据库表处理策略 -->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
</beans>
2、配置数据源后,在processEngineConfiguration 引用
首先配置数据源
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 这里可以使用 链接池 dbcp-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://192.168.183.9:3306/activiti" />
<property name="username" value="root" />
<property name="password" value="123456" />
<property name="maxActive" value="3" />
<property name="maxIdle" value="1" />
</bean>
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- 引用数据源 上面已经设置好了-->
<property name="dataSource" ref="dataSource" />
<!-- activiti数据库表处理策略 -->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
</beans>
6) java类编写程序生成表
创建一个测试类,调用activiti的工具类,生成acitivti需要的数据库表。
直接使用activiti提供的工具类ProcessEngines,会默认读取classpath下的activiti.cfg.xml文件,读取其中的数据库配置,创建 ProcessEngine,在创建ProcessEngine 时会自动创建表。
代码如下:
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;
public class TestDemo {
/**
* 生成 activiti的数据库表
*/
@Test
public void testCreateDbTable() {
//使用classpath下的activiti.cfg.xml中的配置创建processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(processEngine);
}
}
说明:
1、运行以上程序段即可完成 activiti 表创建,通过改变 activiti.cfg.xml 中databaseSchemaUpdate 参数的值执行不同的数据表处理策略。
2 、 上 边 的 方法 getDefaultProcessEngine方法在执行时,从activiti.cfg.xml 中找固定的名称 processEngineConfiguration 。
在测试程序执行过程中,idea的控制台会输出日志,说明程序正在创建数据表,类似如下,注意红框内容:
执行完成后我们查看数据库, 创建了 25 张表,结果如下:
到这,我们就完成activiti运行需要的数据库和表的创建。
扩展
(一)创建activiti表方式一:
1、使用方法getDefaultProcessEngine
2、默认从resources下读取名字为actviti.cfg.xml的文件
3、创建processEngine时,就会创建mysql的表
//默认方式
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment();
//获取流程引擎对象(此时创建activiti的表)
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
(二)创建activiti表方式二:
配置文件的名字可以自定义,bean的名字也可以自定义
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.
createProcessEngineConfigurationFromResource("activiti.cfg.xml","processEngineConfiguration");
//获取流程引擎对象(此时创建activiti的表)
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
表结构
表功能
序号 | 表分类 | 表名 | 说明 | 解释 |
一般数据 | ||||
1 | act_ge_bytearray | 二进制数据表 | 通用的流程定义和流程资源 | |
2 | act_ge_property | 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录, | 系统相关属性 | |
流程历史记录 | ||||
3 | act_hi_actinst | 历史节点表 | ||
4 | act_hi_attachment | 历史附件表 | ||
5 | act_hi_comment | 历史意见表 | ||
6 | act_hi_identitylink | 历史流程人员表 | ||
7 | act_hi_detail | 历史详情表,提供历史变量的查询 | ||
8 | act_hi_procinst | 历史流程实例表 | ||
9 | act_hi_taskinst | 历史任务实例表 | ||
10 | act_hi_varinst | 历史变量表 | ||
11 | act_id_group | 用户组信息表 | ||
12 | act_id_info | 用户扩展信息表 | ||
13 | act_id_membership | 用户与用户组对应信息表 | ||
14 | act_id_user | 用户信息表 | ||
流程定义表 | ||||
15 | act_re_deployment | 部署信息表 | ||
16 | act_re_model | 流程设计模型部署表 | ||
17 | act_re_procdef | 流程定义数据表 | ||
运行实列表 | ||||
18 | act_ru_event_subscr | throwEvent、catchEvent时间监听信息表 | ||
19 | act_ru_execution | 运行时流程执行实例表 | ||
20 | act_ru_identitylink | 运行时流程人员表,主要存储任务节点与参与者的相关信息 | ||
21 | act_ru_job | 运行时定时任务数据表 | ||
22 | act_ru_task | 运行时任务节点表 | ||
23 | act_ru_variable | 运行时流程变量数据表 |
表以及索引信息
2.1 二进制数据表(act_ge_bytearray)
2.1.1 简要描述
保存流程定义图片和xml、Serializable(序列化)的变量,即保存所有二进制数据,特别注意类路径部署时候,不要把svn等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)。
2.1.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键ID | |
REV_ | 乐观锁 | int | √ | Version(版本) | |
NAME_ | 名称 | nvarchar(255) | √ | 部署的文件名称,如:mail.bpmn、mail.png 、mail.bpmn20.xml | |
DEPLOYMENT_ID_ | 部署ID | nvarchar(64) | √ | 部署表ID | |
BYTES_ | 字节 | varbinary(max) | √ | 部署文件 | |
GENERATED_ | 是否是引擎生成 | tinyint | √ | 0为用户生成 1为Activiti生成 |
2.1.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_FK_BYTEARR_DEPL | DEPLOYMENT_ID_ |
2.2 属性数据表( act_ge_property )
2.2.1 简要描述
属性数据表。存储整个流程引擎级别的数据。
2.2.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
NAME_ | 名称 | nvarchar(64) | √ | schema.version schema.history next.dbid | |
VALUE_ | 值 | nvarchar(300) | √ | 5.* create(5.*) | |
REV_ | 乐观锁 | int | √ | version |
2.2.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | NAME_ | Unique | 主键唯一索引 |
2.3 历史节点表(act_hi_actinst)
2.3.1 简要描述
历史活动信息。这里记录流程流转过的所有节点,与HI_TASKINST不同的是,taskinst只记录usertask内容
2.3.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | ||
PROC_DEF_ID_ | 流程定义ID | nvarchar(64) | |||
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | |||
EXECUTION_ID_ | 执行实例ID | nvarchar(64) | |||
ACT_ID_ | 节点ID | nvarchar(225) | 节点定义ID | ||
TASK_ID_ | 任务实例ID | nvarchar(64) | √ | 任务实例ID 其他节点类型实例ID在这里为空 | |
CALL_PROC_INST_ID_ | 调用外部的流程实例ID | nvarchar(64) | √ | 调用外部流程的流程实例ID' | |
ACT_NAME_ | 节点名称 | nvarchar(225) | √ | 节点定义名称 | |
ACT_TYPE_ | 节点类型 | nvarchar(225) | 如startEvent、userTask | ||
ASSIGNEE_ | 签收人 | nvarchar(64) | √ | 节点签收人 | |
START_TIME_ | 开始时间 | datetime | 2013-09-15 11:30:00 | ||
END_TIME_ | 结束时间 | datetime | √ | 2013-09-15 11:30:00 | |
DURATION_ | 耗时 | numeric(19,0) | √ | 毫秒值 |
2.3.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_IDX_HI_ACT_INST_START | START_TIME_ | ||
ACT_IDX_HI_ACT_INST_END | END_TIME_ | ||
ACT_IDX_HI_ACT_INST_PROCINST | PROC_INST_ID_ 、 ACT_ID_ | ||
ACT_IDX_HI_ACT_INST_EXEC | EXECUTION_ID_ 、 ACT_ID_ |
2.4 历史附件表( act_hi_attachment )
2.4.1 简要描述
历史附件表。
2.4.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键ID | |
REV_ | 乐观锁 | integer | √ | Version | |
USER_ID_ | 用户ID | nvarchar(255) | √ | 用户ID | |
NAME_ | 名称 | nvarchar(255) | √ | 附件名称 | |
DESCRIPTION_ | 描述 | nvarchar(4000) | √ | 描述 | |
TYPE_ | 类型 | nvarchar(255) | √ | 附件类型 | |
TASK_ID_ | 任务实例ID | nvarchar(64) | √ | 节点实例ID | |
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | √ | 流程实例ID | |
URL_ | URL_ | nvarchar(4000) | √ | 附件地址 | |
CONTENT_ID_ | 字节表的ID | nvarchar(64) | √ | ACT_GE_BYTEARRAY的ID |
2.4.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
2.5 历史意见表( act_hi_comment )
2.5.1 简要描述
历史意见表。
2.5.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键ID | |
TYPE_ | 类型 | nvarchar(255) | √ | 类型:event(事件) comment(意见) | |
TIME_ | 时间 | datetime | 填写时间' | ||
USER_ID_ | 用户ID | nvarchar(64) | √ | 填写人 | |
TASK_ID_ | 节点任务ID | nvarchar(64) | √ | 节点实例ID | |
PROC_INST_ID_ | 流程实例ID | nvarchar(255) | √ | 流程实例ID | |
ACTION_ | 行为类型 | nvarchar(64) | √ | 见备注1 | |
MESSAGE_ | 基本内容 | nvarchar(4000) | √ | 用于存放流程产生的信息,比如审批意见 | |
FULL_MSG_ | 全部内容 | varbinary(max) | √ | 附件地址 |
2.5.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
2.6 历史详情表( act_hi_detail )
2.6.1 简要描述
历史详情表:流程中产生的变量详细,包括控制流程流转的变量,业务表单中填写的流程需要用到的变量等。
2.6.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键 | |
TYPE_ | 类型 | nvarchar(255) | 见备注2 | ||
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | √ | 流程实例ID | |
EXECUTION_ID_ | 执行实例ID | nvarchar(64) | √ | 执行实例ID | |
TASK_ID_ | 任务实例ID | nvarchar(64) | √ | 任务实例ID | |
ACT_INST_ID_ | 节点实例ID | nvarchar(64) | √ | ACT_HI_ACTINST表的ID | |
NAME_ | 名称 | nvarchar(255) | 名称 | ||
VAR_TYPE_ | 参数类型 | nvarchar(255) | √ | 见备注3 | |
REV_ | 乐观锁 | int | √ | Version | |
TIME_ | 时间戳 | datetime | 创建时间 | ||
BYTEARRAY_ID_ | 字节表ID | nvarchar | √ | ACT_GE_BYTEARRAY表的ID | |
DOUBLE_ | DOUBLE_ | double precision | √ | 存储变量类型为Double | |
LONG_ | LONG_ | numeric | √ | 存储变量类型为long | |
TEXT_ | TEXT_ | nvarchar | √ | 存储变量值类型为String | |
TEXT2_ | TEXT2_ | nvarchar | √ | 此处存储的是JPA持久化对象时,才会有值。此值为对象ID |
2.6.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_IDX_HI_ACT_INST_START | START_TIME_ | ||
ACT_IDX_HI_ACT_INST_END | END_TIME_ | ||
ACT_IDX_HI_ACT_INST_PROCINST | PROC_INST_ID_ 、 ACT_ID_ | ||
ACT_IDX_HI_ACT_INST_EXEC | EXECUTION_ID_ 、 ACT_ID_ |
2.7 历史流程人员表( act_ru_identitylink )
2.7.1 简要描述
任务参与者数据表。主要存储历史节点参与者的信息。
2.7.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | ID_ | |
GROUP_ID_ | 组ID | nvarchar(255) | √ | 组ID | |
TYPE_ | 类型 | nvarchar(255) | √ | 备注4 | |
USER_ID_ | 用户ID | nvarchar(255) | √ | 用户ID | |
TASK_ID_ | 节点实例ID | nvarchar(64) | √ | 节点实例ID | |
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | √ | 流程实例ID |
2.7.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_IDX_HI_IDENT_LNK_USER | USER_ID_ | Unique | |
ACT_IDX_HI_IDENT_LNK_TASK | TASK_ID_ | ||
ACT_IDX_HI_IDENT_LNK_PROCINST | PROC_INST_ID_ |
2.8 历史流程实例表(act_hi_procinst)
2.8.1 简要描述
历史流程实例表。
2.8.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键ID | |
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | 流程实例ID | ||
BUSINESS_KEY_ | 业务主键 | nvarchar(255) | √ | 业务主键,业务表单的ID | |
PROC_DEF_ID_ | 流程定义ID | nvarchar(64) | 流程定义ID | ||
START_TIME_ | 开始时间 | datetime | 开始时间 | ||
END_TIME_ | 结束时间 | datetime | √ | 结束时间 | |
DURATION_ | 耗时 | Numeric(19) | √ | 耗时 | |
START_USER_ID_ | 起草人 | nvarchar(255) | √ | 起草人 | |
START_ACT_ID_ | 开始节点ID | nvarchar(255) | √ | 起草环节ID | |
END_ACT_ID_ | 结束节点ID | nvarchar(255) | √ | 结束环节ID | |
SUPER_PROCESS _INSTANCE_ID_ | 父流程实例ID | nvarchar(64) | √ | 父流程实例ID | |
DELETE_REASON_ | 删除原因 | nvarchar(4000) | √ | 删除原因 |
2.8.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
PROC_INST_ID_ | PROC_INST_ID_ | Unique | 外键 |
ACT_UNIQ_HI_BUS_KEY | PROC_DEF_ID_,BUSINESS_KEY_ | Unique | |
ACT_IDX_HI_PRO_INST_END | END_TIME_ | ||
ACT_IDX_HI_PRO_I_BUSKEY | BUSINESS_KEY_ |
2.9 历史任务实例表( act_hi_taskinst )
2.9.1 简要描述
历史任务实例表。
2.9.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键ID | |
PROC_DEF_ID_ | 流程定义ID | nvarchar(64) | √ | 流程定义ID | |
TASK_DEF_KEY_ | 节点定义ID | nvarchar(255) | √ | 节点定义ID | |
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | √ | 流程实例ID | |
EXECUTION_ID_ | 执行实例ID | nvarchar(64) | √ | 执行实例ID | |
NAME_ | 名称 | varchar(255) | √ | 名称 | |
PARENT_TASK_ID_ | 父节点实例ID | nvarchar(64) | √ | 父节点实例ID | |
DESCRIPTION_ | 描述 | nvarchar(400) | √ | 描述 | |
OWNER_ | 实际签收人 任务的拥有者 | nvarchar(255) | √ | 签收人(默认为空,只有在委托时才有值) | |
ASSIGNEE_ | 签收人或被委托 | nvarchar(255) | √ | 签收人或被委托 | |
START_TIME_ | 开始时间 | datetime | 开始时间 | ||
CLAIM_TIME_ | 提醒时间 | datetime | √ | 提醒时间 | |
END_TIME_ | 结束时间 | datetime | √ | 结束时间 | |
DURATION_ | 耗时 | numeric(19) | √ | 耗时 | |
DELETE_REASON_ | 删除原因 | nvarchar(4000) | √ | 删除原因(completed,deleted) | |
PRIORITY_ | 优先级别 | int | √ | 优先级别 | |
DUE_DATE_ | 过期时间 | datetime | √ | 过期时间,表明任务应在多长时间内完成 | |
FORM_KEY_ | 节点定义的 formkey | nvarchar(255) | √ | desinger节点定义的 form_key属性 |
2.9.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
2.10 历史变量表( act_hi_varinst )
2.10.1 简要描述
历史变量表。
2.10.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | ID_ | |
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | √ | 流程实例ID | |
EXECUTION_ID_ | 执行实例ID | nvarchar(255) | √ | 执行实例ID | |
TASK_ID_ | 任务实例ID | nvarchar(64) | √ | 任务实例ID | |
NAME_ | 名称 | nvarchar(64) | 参数名称(英文) | ||
VAR_TYPE_ | 参数类型 | varchar(255) | √ | 备注5 | |
REV_ | 乐观锁 | nvarchar(64) | √ | 乐观锁 Version | |
BYTEARRAY_ID_ | 字节表ID | nvarchar(400) | √ | ACT_GE_BYTEARRAY表的主键 | |
DOUBLE_ | DOUBLE_ | nvarchar(255) | √ | 存储DoubleType类型的数据 | |
LONG_ | LONG_ | nvarchar(255) | √ | 存储LongType类型的数据 | |
TEXT_ | TEXT_ | datetime | √ | 备注6 | |
TEXT2_ | TEXT2_ | datetime | √ | 此处存储的是JPA持久化对象时,才会有值。此值为对象ID |
2.10.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_IDX_HI_PROCVAR_PROC_INST | PROC_INST_ID_ | ||
ACT_IDX_HI_PROCVAR_NAME_TYPE | NAME_, VAR_TYPE_ |
2.11 用户组信息表( act_id_group )
2.11.1 简要描述
用来存储用户组信息。
2.11.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键ID | |
REV_ | 乐观锁 | int | √ | 乐观锁Version | |
NAME_ | 名称 | nvarchar(255) | √ | 组名称 | |
TYPE_ | 类型 | nvarchar(255) | √ | 类型 |
2.11.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
2.12 用户扩展信息表( act_id_info )
2.12.1 简要描述
用户扩展信息表。目前该表未用到~~~~~·
2.12.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键ID | |
REV_ | 乐观锁 | int | √ | 乐观锁Version | |
USER_ID_ | 用户ID | nvarchar(64) | √ | ||
TYPE_ | 类型 | nvarchar(64) | √ | ||
KEY_ | nvarchar(255) | √ | |||
VALUE_ | nvarchar(255) | √ | |||
PASSWORD_ | Image | √ | |||
PARENT_ID_ | nvarchar(255) | √ |
2.12.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
2.13 用户与分组对应信息表( act_id_membership )
2.13.1 简要描述
用来保存用户的分组信息。
2.13.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
USER_ID | 用户ID | nvarchar(64) | √ | ||
GROUP_ID | 用户组ID | nvarchar(64) | √ |
2.13.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | USER_ID_, GROUP_ID_ | Unique | 主键唯一索引 |
ACT_FK_MEMB_GROUP | GROUP_ID_ |
2.14 用户信息表( act_id_user )
2.14.1 简要描述
工作流用户信息
2.14.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键ID | |
REV_ | 乐观锁 | int | √ | 乐观锁Version | |
FIRST_ | 姓 | nvarchar(255) | √ | ||
LAST_ | 名 | nvarchar(255) | √ | ||
EMAIL_ | EMAIL_ | nvarchar(255) | √ | ||
PWD_ | 密码 | nvarchar(255) | √ | ||
PICTURE_ID_ | 图片ID | nvarchar(64) | √ |
2.14.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
2.15 部署信息表( act_re_deployment )
2.15.1 简要描述
部署流程定义时需要被持久化保存下来的信息。
2.15.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键ID | |
NAME_ | 部署名称 | nvarchar(255) | √ | 部署文件名 | |
CATEGORY_ | 分类 | nvarchar(255) | √ | 类别 | |
DEPLOY_TIME_ | 部署时间 | datetime | √ | 部署时间 |
2.15.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
2.16 流程设计模型部署表( act_re_model )
2.16.1 简要描述
流程设计器设计流程后,保存数据到该表。
2.16.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | ID_ | |
REV_ | 乐观锁 | int | √ | 乐观锁 | |
NAME_ | 名称 | nvarchar(255) | √ | 名称 | |
KEY_ | KEY_ | nvarchar(255) | √ | 分类,例如: | |
CATEGORY_ | 分类 | nvarchar(255) | √ | 分类 | |
CREATE_TIME_ | 创建时间 | datetime | √ | 创建时间 | |
LAST_UPDATE_TIME_ | 最新修改时间 | datetime | √ | 最新修改时间 | |
VERSION_ | 版本 | int | √ | 版本 | |
META_INFO_ | META_INFO_ | nvarchar(255) | √ | 以json格式保存流程定义的信息 | |
DEPLOYMENT_ID_ | 部署ID | nvarchar(255) | √ | 部署ID | |
EDITOR_SOURCE_VALUE_ID_ | datetime | √ | |||
EDITOR_SOURCE_EXTRA_VALUE_ID_ | datetime | √ |
2.16.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_FK_MODEL_SOURCE | EDITOR_SOURCE_VALUE_ID_ | ||
ACT_FK_MODEL_SOURCE_EXTRA | EDITOR_SOURCE_EXTRA_VALUE_ID_ | ||
ACT_FK_MODEL_DEPLOYMENT | DEPLOYMENT_ID_ |
2.17 流程定义数据表( act_re_procdef )
2.17.1 简要描述
业务流程定义数据表。此表和ACT_RE_DEPLOYMENT是多对一的关系,即,一个部署的bar包里可能包含多个流程定义文件,每个流程定义文件都会有一条记录在ACT_REPROCDEF表内,每个流程定义的数据,都会对于ACT_GE_BYTEARRAY表内的一个资源文件和PNG图片文件。和ACT_GE_BYTEARRAY的关联是通过程序用ACT_GE_BYTEARRAY.NAME与ACT_RE_PROCDEF.NAME_完成的,在数据库表结构中没有体现。
2.17.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | ID_ | |
REV_ | 乐观锁 | int | √ | 乐观锁 | |
CATEGORY_ | 分类 | nvarchar(255) | √ | 流程定义的Namespace就是类别 | |
NAME_ | 名称 | nvarchar(255) | √ | 名称 | |
KEY_ | 定义的KEY | nvarchar(255) | 流程定义ID | ||
VERSION_ | 版本 | int | 版本 | ||
DEPLOYMENT_ID_ | 部署表ID | nvarchar(64) | √ | 部署表ID | |
RESOURCE_NAME_ | bpmn文件名称 | nvarchar(4000) | √ | 流程bpmn文件名称 | |
DGRM_RESOURCE_NAME_ | png图片名称 | nvarchar(4000) | √ | 流程图片名称 | |
DESCRIPTION_ | 描述 | nvarchar(4000) | √ | 描述 | |
HAS_START_FORM_KEY_ | 是否存在开始节点formKey | tinyint | √ | start节点是否存在formKey 0否 1是 | |
SUSPENSION_STATE_ | 是否挂起 | tinyint | √ | 1 激活 2挂起 |
2.17.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_UNIQ_PROCDEF | KEY_, VERSION_ | Unique |
2.18 ( act_ru_event_subscr )
2.18.1 简要描述
没有用到该表~~~ 网上找到的资料~~~不足之处请说明补充 谢谢~~
2.18.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | 事件ID | nvarchar(64) | √ | 事件ID | |
REV_ | 版本 | int | √ | 乐观锁Version | |
EVENT_TYPE_ | 事件类型 | nvarchar(255) | 事件类型 | ||
EVENT_NAME_ | 事件名称 | nvarchar(255) | √ | 事件名称 | |
EXECUTION_ID_ | 执行实例ID | nvarchar(64) | √ | 执行实例ID | |
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | √ | 流程实例ID | |
ACTIVITY_ID_ | 活动实例ID | nvarchar(64) | √ | 活动实例ID | |
CONFIGURATION_ | 配置 | nvarchar(255) | √ | 配置 | |
CREATED_ | 是否创建 | datetime | 默认值 当前系统时间戳 CURRENT_TIMESTAMP |
2.18.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_IDX_EVENT_SUBSCR_CONFIG_ | CONFIGURATION_ | ||
ACT_FK_EVENT_EXEC | EXECUTION_ID_ |
2.19 运行时流程执行实例表( act_ru_execution )
2.19.1 简要描述
流程执行记录表。
2.19.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | ID_ | |
REV_ | 乐观锁 | int | √ | 乐观锁 | |
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | 流程实例ID | ||
BUSINESS_KEY_ | 业务主键ID | nvarchar(255) | √ | 业务主键ID | |
PARENT_ID_ | 父节点实例ID | nvarchar(64) | √ | 父节点实例ID | |
PROC_DEF_ID_ | 流程定义ID | nvarchar(64) | √ | 流程定义ID | |
SUPER_EXEC_ | SUPER_EXEC_ | nvarchar(64) | √ | SUPER_EXEC_ | |
ACT_ID_ | 节点实例ID | nvarchar(255) | √ | 节点实例ID即 ACT_HI_ACTINST中ID | |
IS_ACTIVE_ | 是否存活 | tinyint | √ | 是否存活 | |
IS_CONCURRENT_ | 是否并行 | tinyint | √ | 是否为并行(true/false) | |
IS_SCOPE_ | IS_SCOPE_ | tinyint | √ | IS_SCOPE_ | |
IS_EVENT_SCOPE_ | IS_EVENT_SCOPE_ | tinyint | √ | IS_EVENT_SCOPE_ | |
SUSPENSION_STATE_ | 是否挂起 | tinyint | √ | 挂起状态 1激活 2挂起 | |
CACHED_ENT_STATE_ | int | √ |
2.19.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_UNIQ_RU_BUS_KEY | PROC_DEF_ID_, BUSINESS_KEY_ | Unique | |
ACT_IDX_EXEC_BUSKEY | BUSINESS_KEY_ | ||
ACT_FK_EXE_PROCINST | PROC_INST_ID_ | ||
ACT_FK_EXE_PARENT | PARENT_ID_ | ||
ACT_FK_EXE_SUPER | SUPER_EXEC_ |
2.20 运行时流程人员表( act_ru_identitylink )
2.20.1 简要描述
任务参与者数据表。主要存储当前节点参与者的信息。
2.20.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | ID_ | |
REV_ | 乐观锁 | int | √ | 乐观锁 | |
GROUP_ID_ | 组ID | nvarchar(64) | √ | 组ID | |
TYPE_ | 类型 | nvarchar(255) | √ | 备注7 | |
USER_ID_ | 用户ID | nvarchar(64) | √ | 用户ID | |
TASK_ID_ | 节点实例ID | nvarchar(64) | √ | 节点实例ID | |
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | √ | 流程实例ID | |
PROC_DEF_ID_ | 流程定义ID | nvarchar(255) | √ | 流程定义ID |
2.20.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_IDX_IDENT_LNK_USER | USER_ID_ | Unique | |
ACT_IDX_IDENT_LNK_GROUP | GROUP_ID_ | ||
ACT_IDX_ATHRZ_PROCEDEF | PROC_DEF_ID_ | ||
ACT_FK_TSKASS_TASK | TASK_ID_ | ||
ACT_FK_IDL_PROCINST | PROC_INST_ID_ |
2.21 运行时定时任务数据表( act_ru_job )
2.21.1 简要描述
运行时定时任务数据表。用到网上找的资料 字段描述..
2.21.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | 标识 | nvarchar(64) | √ | 标识 | |
REV_ | 版本 | int | √ | 版本 | |
TYPE_ | 类型 | nvarchar(255) | 类型 | ||
LOCK_EXP_TIME_ | 锁定释放时间 | datetime | √ | 锁定释放时间 | |
LOCK_OWNER_ | 挂起者 | nvarchar(255) | √ | 挂起者 | |
EXCLUSIVE_ | bit | √ | |||
EXECUTION_ID_ | 执行实例ID | nvarchar(64) | √ | 执行实例ID | |
PROCESS_INSTANCE_ID_ | 流程实例ID | nvarchar(64) | √ | 流程实例ID | |
PROC_DEF_ID_ | 流程定义ID | nvarchar(64) | √ | 流程定义ID | |
RETRIES_ | int | √ | |||
EXCEPTION_STACK_ID_ | 异常信息ID | nvarchar(64) | √ | 异常信息ID | |
EXCEPTION_MSG_ | 异常信息 | nvarchar(4000) | √ | 异常信息 | |
DUEDATE_ | 到期时间 | datetime | √ | 到期时间 | |
REPEAT_ | 重复 | nvarchar(255) | √ | 重复 | |
HANDLER_TYPE_ | 处理类型 | nvarchar(255) | √ | 处理类型 | |
HANDLER_CFG_ | nvarchar(4000) | √ | 标识 |
2.21.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_FK_JOB_EXCEPTION | EXCEPTION_STACK_ID_ |
2.22 运行时任务节点表( act_ru_task )
2.22.1 简要描述
行时任务数据表。
2.22.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | ID_ | |
REV_ | 乐观锁 | int | √ | 乐观锁 | |
EXECUTION_ID_ | 执行实例ID | nvarchar(64) | √ | 执行实例ID | |
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | √ | 流程实例ID | |
PROC_DEF_ID_ | 流程定义ID | nvarchar(64) | √ | 流程定义ID | |
NAME_ | 节点定义名称 | nvarchar(255) | √ | 节点定义名称 | |
PARENT_TASK_ID_ | 父节点实例ID | nvarchar(64) | √ | 父节点实例ID | |
DESCRIPTION_ | 节点定义描述 | nvarchar(4000) | √ | 节点定义描述 | |
TASK_DEF_KEY_ | 节点定义的KEY | nvarchar(255) | √ | 任务定义的ID | |
OWNER_ | 实际签收人 | nvarchar(255) | √ | 拥有者(一般情况下为空,只有在委托时才有值) | |
ASSIGNEE_ | 签收人或委托人 | nvarchar(255) | √ | 签收人或委托人 | |
DELEGATION_ | 委托类型 | nvarchar(64) | √ | 备注8 | |
PRIORITY_ | 优先级别 | int | √ | 优先级别,默认为:50 | |
CREATE_TIME_ | 创建时间 | datetime | √ | 创建时间 | |
DUE_DATE_ | 过期时间 | datetime | √ | 耗时 | |
SUSPENSION_STATE_ | 是否挂起 | int | √ | 1代表激活 2代表挂起 |
2.22.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_IDX_TASK_CREATE | CREATE_TIME_ | ||
ACT_FK_TASK_EXE | EXECUTION_ID_ | ||
ACT_FK_TASK_PROCINST | PROC_INST_ID_ | ||
ACT_FK_TASK_PROCDEF | PROC_DEF_ID_ |
2.23 运行时流程变量数据表( act_ru_variable )
2.23.1 简要描述
运行时流程变量数据表。
2.23.2 表结构说明
字段名称 | 字段描述 | 数据类型 | 主键 | 为空 | 取值说明 |
ID_ | ID_ | nvarchar(64) | √ | 主键标识 | |
REV_ | 乐观锁 | int | √ | 乐观锁 | |
TYPE_ | 类型 | nvarchar(255) | 备注9 | ||
NAME_ | 名称 | nvarchar(255) | 变量名称 | ||
EXECUTION_ID_ | 执行实例ID | nvarchar(64) | √ | 执行的ID | |
PROC_INST_ID_ | 流程实例ID | nvarchar(64) | √ | 流程实例ID | |
TASK_ID_ | 节点实例ID | nvarchar(64) | √ | 节点实例ID(Local) | |
BYTEARRAY_ID_ | 字节表ID | nvarchar(64) | √ | 字节表的ID (ACT_GE_BYTEARRAY) | |
DOUBLE_ | DOUBLE_ | float | √ | 存储变量类型为Double | |
LONG_ | LONG_ | numeric(19) | √ | 存储变量类型为long | |
TEXT_ | TEXT_ | nvarchar(4000) | √ | '存储变量值类型为String 如此处存储持久化对象时,值jpa对象的class | |
TEXT2_ | TEXT2_ | nvarchar(4000) | √ | 此处存储的是JPA持久化对象时,才会有值。此值为对象ID |
2.23.3 索引说明
索引名称 | 组成字段名称 | 索引类型 | 索引说明 |
PRIMARY | ID_ | Unique | 主键唯一索引 |
ACT_IDX_VARIABLE_TASK_ID | TASK_ID_ | ||
ACT_FK_VAR_EXE | EXECUTION_ID_ | ||
ACT_FK_VAR_PROCINST | PROC_INST_ID_ | ||
ACT_FK_VAR_BYTEARRAY | BYTEARRAY_ID_ |
备注:
备注1:行为类型。值为下列内容中的一种:
AddUserLink、DeleteUserLink、AddGroupLink、DeleteGroupLink、AddComment、AddAttachment、DeleteAttachment
备注2:类型:
FormProperty, //表单
VariableUpdate //参数
备注3、5、9:参数类型:
jpa-entity、boolean、bytes、serializable(可序列化)、自定义type(根据你自身配置)、
CustomVariableType、date、double、integer、long、null、short、string
备注4、7:类型,主要分为以下几种:
assignee 、 candidate 、 owner 、starter 、participant
备注6:
存储变量值类型为String,如此处存储持久化对象时,值jpa对象的class
备注8:委托类型,DelegationState分为两种:PENDING,RESOLVED。如无委托则为空
Activiti类关系图
上面我们完成了Activiti数据库表的生成,java代码中我们调用Activiti的工具类,下面来了解Activiti的类关系
4.1 类关系图
在新版本中,我们通过实验可以发现IdentityService,FormService两个Serivce都已经删除了。
所以后面我们对于这两个Service也不讲解了,但老版本中还是有这两个Service,同学们需要了解一下
4.2 activiti.cfg.xml
activiti的引擎配置文件,包括:ProcessEngineConfiguration的定义、数据源定义、事务管理器等,此文件其实就是一个spring配置文件。
4.3 流程引擎配置类
流程引擎的配置类(ProcessEngineConfiguration),通过ProcessEngineConfiguration可以创建工作流引擎ProceccEngine,常用的两种方法如下:
4.3.1 StandaloneProcessEngineConfiguration
使用StandaloneProcessEngineConfigurationActiviti可以单独运行,来创建ProcessEngine,Activiti会自己处理事务。
配置文件方式:
通常在activiti.cfg.xml配置文件中定义一个id为 processEngineConfiguration 的bean.
方法如下:
<!--在默认方式下 bean的id固定为processEngineConfiguration-->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!--配置数据库相关的信息-->
<!--数据库驱动-->
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
<!--数据库链接-->
<property name="jdbcUrl" value="jdbc:mysql:///activiti"/>
<!--数据库用户名-->
<property name="jdbcUsername" value="root"/>
<!--数据库密码-->
<property name="jdbcPassword" value="123456"/>
<!--actviti数据库表在生成时的策略 true - 如果数据库中已经存在相应的表,那么直接使用,如果不存在,那么会创建-->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
还可以加入连接池:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contex
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///activiti"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="maxActive" value="3"/>
<property name="maxIdle" value="1"/>
</bean>
<!--在默认方式下 bean的id 固定为 processEngineConfiguration-->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!--引入上面配置好的 链接池-->
<property name="dataSource" ref="dataSource"/>
<!--actviti数据库表在生成时的策略 true - 如果数据库中已经存在相应的表,那么直接使用,如果不存在,那么会创建-->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
</beans>
4.3.2 SpringProcessEngineConfiguration
通过org.activiti.spring.SpringProcessEngineConfiguration 与Spring整合。
创建spring与activiti的整合配置文件:
activity-spring.cfg.xml(名称可修改)
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd ">
<!-- 工作流引擎配置bean -->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- 使用spring事务管理器 -->
<property name="transactionManager" ref="transactionManager" />
<!-- 数据库策略 -->
<property name="databaseSchemaUpdate" value="drop-create" />
<!-- activiti的定时任务关闭 -->
<property name="jobExecutorActivate" value="false" />
</bean>
<!-- 流程引擎 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<!-- 资源服务service -->
<bean id="repositoryService" factory-bean="processEngine"
factory-method="getRepositoryService" />
<!-- 流程运行service -->
<bean id="runtimeService" factory-bean="processEngine"
factory-method="getRuntimeService" />
<!-- 任务管理service -->
<bean id="taskService" factory-bean="processEngine"
factory-method="getTaskService" />
<!-- 历史管理service -->
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<!-- 用户管理service -->
<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />
<!-- 引擎管理service -->
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
<!-- 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/activiti" />
<property name="username" value="root" />
<property name="password" value="mysql" />
<property name="maxActive" value="3" />
<property name="maxIdle" value="1" />
</bean>
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes></tx:attributes>
<!-- 传播行为 -->
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 切面,根据具体项目修改切点配置 -->
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.itheima.ihrm.service.impl.*.(..))"* />
</aop:config>
</beans>
创建processEngineConfiguration
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
上边的代码要求activiti.cfg.xml中必须有一个processEngineConfiguration的bean
也可以使用下边的方法,更改bean 的名字:
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName);
4.4 工作流引擎创建
工作流引擎(ProcessEngine),相当于一个门面接口,通过ProcessEngineConfiguration创建processEngine,通过ProcessEngine创建各个service接口。
4.4.1 默认创建方式
将activiti.cfg.xml文件名及路径固定,且activiti.cfg.xml文件中有 processEngineConfiguration的配置, 可以使用如下代码创建processEngine:
//直接使用工具类 ProcessEngines,使用classpath下的activiti.cfg.xml中的配置创建processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(processEngine);
4.4.2 一般创建方式
//先构建ProcessEngineConfiguration
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//通过ProcessEngineConfiguration创建ProcessEngine,此时会创建数据库
ProcessEngine processEngine = configuration.buildProcessEngine();
代码如下:
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class JwtApplicationTests {
@Test
void contextLoads() {
}
/**
* 生成 activiti的数据库表
*/
@Test
public void testCreateDbTable() {
/*
* 需要使用activiti提供的工具类ProcessEngines,提供的getDefaultProcessEngine
* getDefaultProcessEngine会默认resources下读取名字为activiti.cfg.xml的文件
* 创建Process时就会创建mysql的表
* 默认方式
* //使用classpath下的activiti.cfg.xml中的配置创建processEngine
* ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
* RepositoryService repositoryService = processEngine.getRepositoryService();
* repositoryService.createDeployment();
* */
//使用自定义的方式
//配置文件的名字可以自定义,bean的名字也可以自定义
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml"
, "processEngineConfiguration");
//获取流程引擎对象
ProcessEngine processEngine = processEngineConfiguration
.buildProcessEngine();
System.out.println(processEngine);
}
}
4.5 Servcie服务接口
Service是工作流引擎提供用于进行工作流部署、执行、管理的服务接口,我们使用这些接口可以就是操作服务对应的数据表
4.5.1 Service创建方式
通过ProcessEngine创建Service
方式如下:
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
4.5.2 Service总览
service名称 | service作用 |
RepositoryService | activiti的资源管理类 |
RuntimeService | activiti的流程运行管理类 |
TaskService | activiti的任务管理类 |
HistoryService | activiti的历史管理类 |
ManagerService | activiti的引擎管理类 |
简单介绍:
RepositoryService
是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的业务流程图需要使用此service将流程定义文件的内容部署到计算机。
除了部署流程定义以外还可以:查询引擎中的发布包和流程定义。
暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。
获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。
RuntimeService
Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息
TaskService
Activiti的任务管理类。可以从这个类中获取任务的信息。
HistoryService
Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。
ManagementService
Activiti的引擎管理类,提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。