工作流引擎flowable

所谓工作流实际上就是对任务的编排调度。可以简单理解为工作+流,工作体现为业务系统的一个个任务,流就是Camnuda应该负责的任务编排调度。

一,什么是flowable?

Flowable 是一个轻量级、开源的工作流和业务流程管理(BPM)平台,基于 Java 开发。它提供了强大的工具来设计、执行和监控业务流程,适用于自动化业务流程、任务管理和决策管理。Flowable 是 Activiti 项目的一个分支,继承了其核心功能并进行了优化和扩展。

1、什么是工作流

工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。指在组织中,多个任务、活动或过程之间的顺序和控制流。这些任务通常涉及多个参与者、系统或部门,工作流的目标是将复杂的业务逻辑分解为多个可管理的逻辑段,并统一控制这些逻辑段的执行条件、执行顺序以及相互通信,从而实现业务逻辑的解耦与优化。这种方式不仅提高了业务流程的灵活性和可维护性,还促进了各个环节之间的协同工作。

2、为什么要使用工作流

提高效率:通过自动化和标准化重复性任务,减少人工干预,提升整体工作效率。
增强透明度:工作流提供清晰的任务分配和进度跟踪,使团队成员能够实时了解工作状态,促进协作。
降低错误率:通过预定义的流程和自动化步骤,减少人为错误,提高数据准确性。
灵活性和适应性:可以根据业务需求快速调整和优化流程,适应变化的市场环境。
优化资源管理:通过有效分配和调度资源,确保任务按时完成,提高资源利用率。
监控和分析:提供实时监控和数据分析功能,帮助识别瓶颈和改进机会,持续优化业务流程。
合规性和标准化:确保业务流程符合行业标准和法规要求,提高合规性,减少风险。

二、flowable使用实例

本实例中我们实现以下功能:1.工作流程设计 2.工作流中包含用户任务和服务任务 3.工作流中使用网关  4.工作流和外部服务结合实现任务执行前提醒任务执行者 5.实现工作流实例的启动  6.实现工作流实例启动时设置各个任务的执行人 7.实现代办任务获取和已办任务获取。

项目环境:JDK(openJDK17)、SpringBoot3.2.2、flowable7.0.0

1.下载flowable流程设计器

下载地址:

Release Flowable 6.7.2 release · flowable/flowable-engine · GitHubA compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users. - Release Flowable 6.7.2 release · flowable/flowable-enginehttps://github.com/flowable/flowable-engine/releases/tag/flowable-6.7.2

下载后启动解压文件夹中的 flowable-6.7.2\wars\flowable-ui.war

2.利用流程设计器设计工作流流程

启动方式可选择在tomcat中部署,启动tomcat。也可以直接启动war包(需要本机有JDK环境)。

以下采用java -jar flowable-ui.war方式启动流程设计器。

启动成功后可看到以下提示

浏览器中打开flowable流程设计器网页。网页地址:http://localhost:8080/flowable-ui

默认用户密码为admin/test

进入流程设计器,设计业务流程

流程设计好后点击左上侧保存按钮,然后点击左上侧√按钮校验流程设计中是否存在错误。无错误后点击右上侧X按钮关闭设计页面。

在流程模型页面选择具体业务流程定义

点击右上侧下载按钮,下载流程bpmn文件

至此流程设计完毕。

3.工作流引擎开发 

环境JDK:openJDK17 、springboot3.2.2、flowable7.0.0

创建flowable-engine服务

3.1项目结构

3.2pom.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.2.2</version>
    <relativePath/>
  </parent>
  <groupId>infosky</groupId>
  <artifactId>flowable-engine</artifactId>
  <version>1.0</version>
  <name>flowable-engine</name>
  <description>Demo project for Spring Boot</description>
  <properties>
    <java.version>17</java.version>
    <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>3.2.2</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.27</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.8</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>2.0.53</version>
    </dependency>
    <dependency>
      <groupId>org.flowable</groupId>
      <artifactId>flowable-spring-boot-starter</artifactId>
      <version>7.0.0</version>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>2021.0.5</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <plugins>
    </plugins>
  </build>
</project>

3.2配置文件application.yaml

server:
  port: 9999

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/lit?nullDatabaseMeansCurrent=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
    username: root
    password: 123456
    driverClassName: com.mysql.cj.jdbc.Driver

flowable:
  #是否激活一步执行器
  async-executor-activate: false
  #数据库模式更新策略 true:自动更新
  database-schema-update: true

3.3流程定义文件(流程编辑器生成的bpmn文件)   awb-ceshi20250211.bpmn20.xml

<?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:flowable="http://flowable.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.flowable.org/processdef" exporter="Flowable Open Source Modeler" exporterVersion="6.7.2">
  <process id="awbceshi20250211" name="awb-ceshi20250211" isExecutable="true">
    <documentation>这是一个测试样例。流程中包括1.人工任务 2.服务任务 3.排他网关 4.监听器</documentation>
    <startEvent id="startevent20250211awb" name="流程启动awb" flowable:formFieldValidation="true">
      <documentation>启动流程awb</documentation>
    </startEvent>
    <userTask id="rengongrenwu01awb" name="人工任务01awb" flowable:assignee="${rengongrenwu01userawb}" flowable:formFieldValidation="true">
      <documentation>这是一个人工任务</documentation>
      <extensionElements>
        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
    </userTask>
    <sequenceFlow id="sid-4793691B-D0E4-42D2-98C2-54E4ABD35345" sourceRef="startevent20250211awb" targetRef="rengongrenwu01awb"></sequenceFlow>
    <exclusiveGateway id="wangguan02awb" name="网关02awb">
      <documentation>这是一个排他网关</documentation>
    </exclusiveGateway>
    <sequenceFlow id="sid-A2E73FFB-BC62-482E-8B49-16DE472973AC" sourceRef="rengongrenwu01awb" targetRef="wangguan02awb"></sequenceFlow>
    <userTask id="rengongrenwu03awb" name="人工任务03awb" flowable:assignee="${rengongrenwu03userawb}" flowable:formFieldValidation="true">
      <documentation>这是另外一个人工任务</documentation>
      <extensionElements>
        <flowable:executionListener event="start" class="infosky.listener.RcsStartListener"></flowable:executionListener>
        <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
      </extensionElements>
    </userTask>
    <serviceTask id="fuwurenwu04awb" name="服务任务04awb" flowable:class="infosky.service.RcsService">
      <documentation>这是一个服务任务</documentation>
    </serviceTask>
    <endEvent id="endevent20250211awb" name="流程结束awb">
      <documentation>结束流程awb</documentation>
    </endEvent>
    <sequenceFlow id="sid-3725C98B-79FC-4829-B4C8-F17EFE94864D" sourceRef="rengongrenwu03awb" targetRef="endevent20250211awb"></sequenceFlow>
    <sequenceFlow id="sid-7272DD8B-F6DD-40E3-ACA0-BC031BC74A49" sourceRef="fuwurenwu04awb" targetRef="endevent20250211awb"></sequenceFlow>
    <sequenceFlow id="wangguan02awb-flow01" name="aaa=0" sourceRef="wangguan02awb" targetRef="rengongrenwu03awb">
      <documentation>这是网关02的第一个分支</documentation>
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${aaa==0}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="wangguan02awb-flow02" name="aaa=1" sourceRef="wangguan02awb" targetRef="fuwurenwu04awb">
      <documentation>这是网关02的第二个分支</documentation>
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${aaa==1}]]></conditionExpression>
    </sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_awbceshi20250211">
    <bpmndi:BPMNPlane bpmnElement="awbceshi20250211" id="BPMNPlane_awbceshi20250211">
      <bpmndi:BPMNShape bpmnElement="startevent20250211awb" id="BPMNShape_startevent20250211awb">
        <omgdc:Bounds height="30.0" width="30.0" x="90.0" y="163.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="rengongrenwu01awb" id="BPMNShape_rengongrenwu01awb">
        <omgdc:Bounds height="80.0" width="100.0" x="175.0" y="138.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="wangguan02awb" id="BPMNShape_wangguan02awb">
        <omgdc:Bounds height="40.0" width="40.0" x="320.0" y="158.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="rengongrenwu03awb" id="BPMNShape_rengongrenwu03awb">
        <omgdc:Bounds height="80.0" width="100.0" x="495.0" y="138.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="fuwurenwu04awb" id="BPMNShape_fuwurenwu04awb">
        <omgdc:Bounds height="80.0" width="100.0" x="510.0" y="255.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent20250211awb" id="BPMNShape_endevent20250211awb">
        <omgdc:Bounds height="28.0" width="28.0" x="765.0" y="164.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sid-A2E73FFB-BC62-482E-8B49-16DE472973AC" id="BPMNEdge_sid-A2E73FFB-BC62-482E-8B49-16DE472973AC" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="20.5" flowable:targetDockerY="20.5">
        <omgdi:waypoint x="274.94999999999806" y="178.21623376623378"></omgdi:waypoint>
        <omgdi:waypoint x="320.4130434782609" y="178.4130434782609"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-3725C98B-79FC-4829-B4C8-F17EFE94864D" id="BPMNEdge_sid-3725C98B-79FC-4829-B4C8-F17EFE94864D" flowable:sourceDockerX="50.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
        <omgdi:waypoint x="594.9499999999273" y="178.0"></omgdi:waypoint>
        <omgdi:waypoint x="765.0" y="178.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-7272DD8B-F6DD-40E3-ACA0-BC031BC74A49" id="BPMNEdge_sid-7272DD8B-F6DD-40E3-ACA0-BC031BC74A49" flowable:sourceDockerX="99.0" flowable:sourceDockerY="40.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
        <omgdi:waypoint x="609.95" y="294.31176470588235"></omgdi:waypoint>
        <omgdi:waypoint x="767.4663067795316" y="185.90954512188932"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sid-4793691B-D0E4-42D2-98C2-54E4ABD35345" id="BPMNEdge_sid-4793691B-D0E4-42D2-98C2-54E4ABD35345" flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
        <omgdi:waypoint x="119.94999873104688" y="178.0"></omgdi:waypoint>
        <omgdi:waypoint x="174.99999999997792" y="178.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="wangguan02awb-flow01" id="BPMNEdge_wangguan02awb-flow01" flowable:sourceDockerX="20.5" flowable:sourceDockerY="20.5" flowable:targetDockerX="50.0" flowable:targetDockerY="40.0">
        <omgdi:waypoint x="359.49178098971095" y="178.45343137254903"></omgdi:waypoint>
        <omgdi:waypoint x="494.9999999999977" y="178.12212713936432"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="wangguan02awb-flow02" id="BPMNEdge_wangguan02awb-flow02" flowable:sourceDockerX="20.5" flowable:sourceDockerY="20.5" flowable:targetDockerX="1.0" flowable:targetDockerY="40.0">
        <omgdi:waypoint x="340.5" y="197.44187392795888"></omgdi:waypoint>
        <omgdi:waypoint x="340.5" y="295.0"></omgdi:waypoint>
        <omgdi:waypoint x="510.0" y="295.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

3.4 springboot启动类  Application.java

package infosky;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * springboot启动类
 */
@SpringBootApplication
public class Application {
  static Logger logger = LoggerFactory.getLogger(Application.class);
  public static void main(String... args) {
    try {
      SpringApplication.run(Application.class, args);
      logger.info("★★★★★★★★★★★★★★★★★★★★启动正常★★★★★★★★★★★★★★★★★★★★");
    } catch (Exception e) {
      logger.error("■■■■■■■■■■■■■■■■■■启动异常", e);
    }
  }
}

3.5 flowable流程管理类(实现流程部署、流程启动、任务结束、历史任务查询、代办任务查询)

FlowController.java

package infosky.controller;

import org.flowable.engine.HistoryService;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * flowable流程
 */
@RestController
@RequestMapping("/flow")
public class FlowController {
    @Autowired
    private RepositoryService repositoryService;
    @Autowired
    private RuntimeService runtimeService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private HistoryService historyService;

    /**
     * 部署流程
     * @return
     */
    @RequestMapping("/deploy")
    public String deploy(){
        Deployment dm = repositoryService.createDeployment()
                .name("测试流程awb")                                        //定义部署文件的名称
                .addClasspathResource("bpmn/awb-ceshi20250211.bpmn20.xml")  //绑定需要部署的流程文件
                .deploy();                                               //部署流程
        return dm.getName() + "|" + dm.getId();
    }

    /**
     * 启动流程
     */
    @RequestMapping("/startFlow")
    public String startFlow(){
        //定义map集合,存储相关流程的变量信息
        Map<String,Object> map = new HashMap<>();
        map.put("rengongrenwu01userawb","广成子");
        map.put("rengongrenwu03userawb","文殊广法天尊");
        //启动流程
        //  启动流程可以根据id或者key,其中id是唯一的它由3部分组成(流程定义的key:版本号:自动生成的id)
        //    id例=>   Process_awb:3:d9afa57b-dfbb-11ef-818c-4e5f7046682e
        //    key例=>  Process_awb  ■key对应的流程定义不唯一,同一个key的流程定义可以有多个版本。
        //  流程启动时可指定key和对应的版本 例=>runtimeService.startProcessInstanceByKey("Process_awb","3");
        //  流程启动时也可只指定key,此时默认启动该key的最新版本 例=>runtimeService.startProcessInstanceByKey("Process_awb");
        //  根据id启动流程 例=>runtimeService.startProcessInstanceById("Process_awb:3:d9afa57b-dfbb-11ef-818c-4e5f7046682e");
        //  以上指的id和key及版本存储在表[ACT_RE_PROCDEF]  另外,此处的key是在流程设计器中的[流程ID]
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("awbceshi20250211",map);

        //返回流程实例id
        return processInstance.getId();
    }

    /**
     * 结束任务
     * @return
     */
    @RequestMapping("/completeTask")
    public String completeTask(){
        //获取任务 可根据流程实例id或者taskid,对应表[ACT_RU_TASK]
        //  ■任务执行完后将清除[ACT_RU_TASK]表中对应的task数据
        Task task = taskService.createTaskQuery()
                .processInstanceId("2903a55c-e835-11ef-91f8-4e5f7046682e")
//                .taskId("6db24541-dfbc-11ef-98b5-4e5f7046682e")
                .singleResult();

        //判断任务是否存在
        if(task != null){
            System.out.println("==================");
            //设置参数
            taskService.setVariable(task.getId(),"aaa","0");

            //完成任务   参数:taskID
            taskService.complete(task.getId());
        }

        return "OK";
    }

    /**
     * 查询任务(代办)
     *
     *  流程定义ID:processDefinition =>流程部署时产生的ID,一个流程部署多次每次都会产生一个ID
     *  流程实例ID:processInstance   =>启动流程实例时产生的实例ID
     * @return
     */
    @RequestMapping("/queryTaskByHandle")
    public void queryTaskByHandle(){
        List<Task> list = taskService.createTaskQuery()
                .taskAssignee("lisi")
                .list();
        for (Task task : list) {
            System.out.println("#############:" + task.getId());
        }
    }

    /**
     * 查询已完成任务
     * [ACT_HI_TASKINST]
     */
    @RequestMapping("/queryTaskByHistory")
    public void queryTaskByHistory(){
        List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
                .taskAssignee("wangwu")
                .finished()
                .list();
        for (HistoricTaskInstance hti : list) {
            System.out.println("#############:" + hti.getId() + "|" + hti.getName() + "|" + hti.getStartTime() + "|" + hti.getEndTime());
        }
    }
}

3.6 流程中任务监听器 RcsStartListener.java

package infosky.listener;

import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;

/**
 * 监听器
 *   用于给对应处理人发送消息
 *   可将消息存储到DB中或者发送到MQ中
 */
@Component
public class RcsStartListener implements ExecutionListener {
    @Override
    public void notify(DelegateExecution delegateExecution) {
        Object user1 = delegateExecution.getVariable("rengongrenwu03userawb");
        System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&:" + user1);
    }
}

3.7 服务任务处理类  RcsService.java

package infosky.service;

import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;
import org.springframework.stereotype.Service;

/**
 * 测试处理
 */
@Service("rcsService")
public class RcsService implements JavaDelegate {
    @Override
    public void execute(DelegateExecution delegateExecution) {
        //处理完成后设置网关变量
        delegateExecution.setVariable("xyz",1);
        delegateExecution.setVariable("con",0);
        System.out.println("$$$$$$$$$$$$$$$$$完成任务");
    }
}

至此项目开发完毕。

4.流程的部署、启动、任务处理测试

启动项目后,在网页部署流程(http://localhost:9999/flow/deploy)

启动流程实例(http://localhost:9999/flow/startFlow)

完成UserTask类型任务(http://localhost:9999/flow/completeTask)

附1:flowable7.0.0表定义

ACT_GE_BYTEARRAY 资源表

字段 类型 主键 说明 备注
ID_ NVARCHAR2(64) Y 主键
REV_ INTEGER N 数据版本 Activiti 有可能会被频繁修改数据库表,加入字段,用来表示该数据被操作的次数
NAME_ NVARCHAR2(255) N 资源名称
DEPLOYMENT_ID_ NVARCHAR2(64) N 部署序号 部署序号,一次部署可以部署多个资源,该字段与部署表 ACT_RE_DEPLOYMENT 的主键关联
BYTES_ BLOB N 资源内容
GENERATED_ NUMBER(1) N 是否是右 activiti 自动产生的资源 0 表示 false,1 表示 true

ACT_GE_PROPERTY 属性表

字段 类型 主键 说明 备注
NAME_ NVARCHAR2(64) Y 属性名称
VALUE_ NVARCHAR2(300) N 属性值
REV_ INTEGER N 数据版本号

ACT_RE_DEPLOYMENT 部署数据表

字段 类型 主键 说明 备注
ID_ NVARCHAR2(64) Y 部署序号
NAME_ NVARCHAR2(255) N 部署名称
CATEGORY_ NVARCHAR2(255) N 类别 流程定义的 Namespace 就是类别
KEY_ NVARCHAR2(255) N 流程定义 ID
TENANT_ID_ NVARCHAR2(255) N
DEPLOY_TIME_ TIMESTAMP(6) N 部署时间
DERIVED_FROM_ NVARCHAR2(64) N 用于标识当前部署是从哪个先前的部署或流程定义中派生出来的。
DERIVED_FROM_ROOT_ NVARCHAR2(255) N 这个字段进一步扩展了DERIVED_FROM_的概念,它标识了当前部署的根起源,即最初的那个流程定义或部署。
PARENT_DEPLOYMENT_ID_ NVARCHAR2(255) N 这个字段用于存储当前部署的父部署ID。
ENGINE_VERSION_ NVARCHAR2(255) N 引擎版本

ACT_RE_PROCDEF 流程定义表

字段 类型 主键 说明 备注
ID_ NVARCHAR2(64) Y 主键
REV_ INTEGER N 数据版本号
CATEGORY_ NVARCHAR2(255) N 流程定义分类 读取 xml 文件中程的 targetNamespace 值
NAME_ NVARCHAR2(255) N 流程定义的名称 读取流程文件中 process 元素的 name 属性
KEY_ NVARCHAR2(255) N 流程定义 key 读取流程文件中 process 元素的 id 属性
VERSION_ INTEGER N 版本
DEPLOYMENT_ID_ NVARCHAR2(64) N 部署 ID 流程定义对应的部署数据 ID
RESOURCE_NAME_ NVARCHAR2(2000) N bpmn 文件名称 一般为流程文件的相对路径
DGRM_RESOURCE_NAME_ VARCHAR2(4000) N 流程定义对应的流程图资源名称
DESCRIPTION_ NVARCHAR2(2000) N 说明
HAS_START_FORM_KEY_ NUMBER(1) N 是否存在开始节点 formKey start 节点是否存在 formKey 0 否 1 是
HAS_GRAPHICAL_NOTATION_ NUMBER(1) N
SUSPENSION_STATE_ INTEGER N 流程定义状态 1 激活、2 中止
TENANT_ID_ NVARCHAR2(255) N
ENGINE_VERSION_ NVARCHAR2(255) N 引擎版本
DERIVED_FROM_ NVARCHAR2(64) N 用于标识当前部署是从哪个先前的部署或流程定义中派生出来的。
DERIVED_FROM_ROOT_ NVARCHAR2(255) N 这个字段进一步扩展了DERIVED_FROM_的概念,它标识了当前部署的根起源,即最初的那个流程定义或部署。
DERIVED_VERSION_ INTEGER N

ACT_RE_MODEL 流程设计模型部署表

字段 类型 主键 说明 备注
ID_ NVARCHAR2(64) Y 主键
REV_ INTEGER N 数据版本
NAME_ NVARCHAR2(255) N
KEY_ NVARCHAR2(255) N
CATEGORY_ NVARCHAR2(255) N 分类
CREATE_TIME_ TIMESTAMP(6) N 创建时间
LAST_UPDATE_TIME_ TIMESTAMP(6) N 最后更新时间
VERSION_ INTEGER N 版本
META_INFO_ NVARCHAR2(2000) N 以 json 格式保存流程定义的信息
DEPLOYMENT_ID_ NVARCHAR2(64) N 部署 ID
EDITOR_SOURCE_VALUE_ID_ NVARCHAR2(64) N
EDITOR_SOURCE_EXTRA_VALUE_ID_ NVARCHAR2(64) N
TENANT_ID_ NVARCHAR2(255) N

ACT_RU_EXECUTION 流程实例 (执行流) 表

字段 类型 主键 说明 备注
ID_ NVARCHAR2(64) Y 主键
REV_ INTEGER N 数据版本
PROC_INST_ID_ NVARCHAR2(64) N 流程实例 ID
BUSINESS_KEY_ NVARCHAR2(255) N 业务主键 ID
PARENT_ID_ NVARCHAR2(64) N 父执行流的 ID
PROC_DEF_ID_ NVARCHAR2(64) N 流程定义的数据 ID
SUPER_EXEC_ NVARCHAR2(64) N
ROOT_PROC_INST_ID_ NVARCHAR2(64) N
ACT_ID_ NVARCHAR2(255) N 节点实例 ID
IS_ACTIVE_ NUMBER(1) N 是否存活
IS_CONCURRENT_ NUMBER(1) N 执行流是否正在并行
IS_SCOPE_ NUMBER(1) N 表示执行实例是否为一个作用域(如子流程)。
IS_EVENT_SCOPE_ NUMBER(1) N 在没有使用到事件的情况下,一般都为0。如果使用了事件,这个字段可能用于标识执行实例是否为一个事件作用域。
IS_MI_ROOT_ NUMBER(1) N
SUSPENSION_STATE_ INTEGER N 流程终端状态
CACHED_ENT_STATE_ INTEGER N
TENANT_ID_ NVARCHAR2(255) N 租户ID
NAME_ NVARCHAR2(255) N 执行实例的名称(可选字段)。
START_ACT_ID_ NVARCHAR2(255) N
START_TIME_ TIMESTAMP(6) N 开始时间
START_USER_ID_ NVARCHAR2(255) N
LOCK_TIME_ TIMESTAMP(6) N
LOCK_OWNER_ NVARCHAR2(255) N
IS_COUNT_ENABLED_ NUMBER(1) N
EVT_SUBSCR_COUNT_ INTEGER N
TASK_COUNT_ INTEGER N
JOB_COUNT_ INTEGER N
TIMER_JOB_COUNT_ INTEGER N
SUSP_JOB_COUNT_ INTEGER N
DEADLETTER_JOB_COUNT_ INTEGER N
EXTERNAL_WORKER_JOB_COUNT_ INTEGER N
VAR_COUNT_ INTEGER N
ID_LINK_COUNT_ INTEGER N
CALLBACK_ID_ NVARCHAR2(255) N
CALLBACK_TYPE_ NVARCHAR2(255) N
REFERENCE_ID_ NVARCHAR2(255) N
REFERENCE_TYPE_ NVARCHAR2(255) N
PROPAGATED_STAGE_INST_ID_ NVARCHAR2(255) N
BUSINESS_STATUS_ NVARCHAR2(255) N

ACT_RU_TASK 流程任务表

字段 类型 主键 说明 备注
ID_ NVARCHAR2(64) Y 主键
REV_ INTEGER N 数据版本
EXECUTION_ID_ NVARCHAR2(64) N 任务所在的执行流 ID
PROC_INST_ID_ NVARCHAR2(64) N 流程实例 ID
PROC_DEF_ID_ NVARCHAR2(64) N 流程定义数据 ID
TASK_DEF_ID_ NVARCHAR2(64) N
SCOPE_ID_ NVARCHAR2(255) N
SUB_SCOPE_ID_ NVARCHAR2(255) N
SCOPE_TYPE_ NVARCHAR2(255) N
SCOPE_DEFINITION_ID_ NVARCHAR2(255) N
PROPAGATED_STAGE_INST_ID_ NVARCHAR2(255) N
NAME_ NVARCHAR2(255) N 任务名称
PARENT_TASK_ID_ NVARCHAR2(64) N 父任务 ID
DESCRIPTION_ NVARCHAR2(2000) N 说明
TASK_DEF_KEY_ NVARCHAR2(255) N 任务定义的 ID 值
OWNER_ NVARCHAR2(255) N 任务拥有人
ASSIGNEE_ NVARCHAR2(255) N 被指派执行该任务的人
DELEGATION_ NVARCHAR2(64) N
PRIORITY_ INTEGER N
CREATE_TIME_ TIMESTAMP(6) N 创建时间
DUE_DATE_ TIMESTAMP(6) N 耗时
CATEGORY_ NVARCHAR2(255) N
SUSPENSION_STATE_ INTEGER N 是否挂起 1 代表激活 2 代表挂起
TENANT_ID_ NVARCHAR2(255) N
FORM_KEY_ NVARCHAR2(255) N
CLAIM_TIME_ TIMESTAMP(6) N
IS_COUNT_ENABLED_ INTEGER N
VAR_COUNT_ INTEGER N
ID_LINK_COUNT_ INTEGER N
SUB_TASK_COUNT_ INTEGER N

 ACT_RU_VARIABLE 流程参数表

字段 类型 主键 说明 备注
ID_ NVARCHAR2(64) Y 主键
REV_ INTEGER N 数据版本
TYPE_ NVARCHAR2(255) N 参数类型 可以是基本的类型,也可以用户自行扩展
NAME_ NVARCHAR2(255) N 参数名称
EXECUTION_ID_ NVARCHAR2(64) N 参数执行 ID
PROC_INST_ID_ NVARCHAR2(64) N 流程实例 ID
TASK_ID_ NVARCHAR2(64) N 任务 ID
SCOPE_ID_ NVARCHAR2(255) N
SUB_SCOPE_ID_ NVARCHAR2(255) N
SCOPE_TYPE_ NVARCHAR2(255) N
BYTEARRAY_ID_ NVARCHAR2(64) N 资源 ID
DOUBLE_ NUMBER(*,10) N 参数为 double,则保存在该字段中
LONG_ NUMBER(19) N 参数为 long,则保存在该字段中
TEXT_ NVARCHAR2(2000) N 用户保存文本类型的参数值
TEXT2_ NVARCHAR2(2000) N 用户保存文本类型的参数值
META_INFO_ NVARCHAR2(2000) N

ACT_RU_IDENTITYLINK 流程身份关系表

字段 类型 主键 说明 备注
ID_ NVARCHAR2(64) Y 主键
REV_ INTEGER N 数据版本
GROUP_ID_ NVARCHAR2(255) N 用户组 ID
TYPE_ NVARCHAR2(255) N 关系数据类型 assignee 支配人 (组)、candidate 候选人 (组)、owner 拥有人
USER_ID_ NVARCHAR2(255) N 用户 ID
TASK_ID_ NVARCHAR2(64) N 任务 ID
PROC_INST_ID_ NVARCHAR2(64) N 流程定义 ID
PROC_DEF_ID_ NVARCHAR2(64) N 属性 ID
SCOPE_ID_ NVARCHAR2(255) N
SUB_SCOPE_ID_ NVARCHAR2(255) N
SCOPE_TYPE_ NVARCHAR2(255) N
SCOPE_DEFINITION_ID_ NVARCHAR2(255) N

ACT_RU_ACTINST 流程活动实例

字段 类型 主键 说明 备注
ID_ NVARCHAR2(64) Y 唯一标识符。
REV_ INTEGER N 数据版本
PROC_DEF_ID_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值