Flowable工作流-高级

Flowable高级

一、表介绍

Flowable生成的各个表

ACT_RE_ 表*: 存储流程定义相关的静态信息,如流程定义、流程部署等。

  例如,ACT_RE_PROCDEF 表存储流程定义的静态信息,如流程定义ID、流程名称、版本号等。

ACT_RU_ 表*: 存储运行时的流程实例数据,如任务、流程变量等。

  例如,ACT_RU_EXECUTION 表存储当前正在执行的流程实例信息,包括流程实例ID、流程定义ID、当前活动的节点等。

ACT_HI_ 表*: 存储历史数据,如已完成的流程实例、任务、活动实例等。

  例如,ACT_HI_PROCINST 表存储已完成的流程实例的历史信息,包括流程实例ID、开始时间、结束时间等。

ACT_ID_ 表*: 存储身份验证和管理相关的信息,如用户、用户组、权限等。

  例如,ACT_ID_USER 表存储用户信息,如用户名、密码、邮箱等。

ACT_GE_ 表*: 存储通用的引擎数据,如引擎属性、定时任务等 

  例如,ACT_GE_PROPERTY 表存储引擎属性信息,如数据库版本号、引擎名称等。

表分类 表名 解释
一般数据表 ACT_GE_BYTEARRAY 通用的流程定义和流程资源
  ACT_GE_PROPERTY 系统相关属性
流程历史记录  ACT_HI_ACTINST 历史的流程实例
  ACT_HI_ATTACHMENT 历史的流程附件
  ACT_HI_COMMENT 历史的说明性信息
  ACT_HI_DETAIL 历史的流程运行中的细节信息
  ACT_HI_IDENTITYLINK 历史的流程运行过程中用户关系
  ACT_HI_PROCINST 历史的流程实例
  ACT_HI_TASKINST 历史的任务实例
  ACT_HI_VARINST 历史的流程运行中的变量信息
用户用户组表  ACT_ID_BYTEARRAY 二进制数据表
  ACT_ID_GROUP 用户组信息表
  ACT_ID_INFO 用户信息详情表
  ACT_ID_MEMBERSHIP 人与组关系表
  ACT_ID_PRIV 权限表
  ACT_ID_PRIV_MAPPING 用户或组权限关系表
  ACT_ID_PROPERTY 属性表
  ACT_ID_TOKEN 系统登录日志表
  ACT_ID_USER 用户表
流程定义表 ACT_RE_DEPLOYMENT 部署单元信息
  ACT_RE_MODEL 模型信息
  ACT_RE_PROCDEF 已部署的流程定义
运行实例表 ACT_RU_DEADLETTER_JOB 正在运行的任务表
  ACT_RU_EVENT_SUBSCR 运行时事件
  ACT_RU_EXECUTION 运行时流程执行实例
  ACT_RU_HISTORY_JOB 历史作业表
  ACT_RU_IDENTITYLINK 运行时用户关系信息
  ACT_RU_JOB 运行时作业表
  ACT_RU_SUSPENDED_JOB 暂停作业表
  ACT_RU_TASK 运行时任务表
  ACT_RU_TIMER_JOB 定时作业表
  ACT_RU_VARIABLE 运行时变量表
其他表  ACT_EVT_LOG 事件日志表
  ACT_PROCDEF_INFO 流程定义信息

 

我这边生成34个表

 

 二、配置文件获取ProcessEngine

默认会加载resouce/flowable.cfg2.xml,所以我们在resource下面新建flowable.cfg2.xml就可以直接获取,不需要设置数据库连接

    @Test
    public void processEngineDefault() {
        // 会加载resource下面的flowable.cfg.xml文件
        // 配置文件类似创建了createStandaloneProcessEngineConfiguration
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        System.out.println("defaultProcessEngine = " + defaultProcessEngine);

    }
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="processEngineConfiguration"
          class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcUrl" value="jdbc:mysql://101.4:33067/flowable?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=UTC&amp;nullCatalogMeansCurrent=true" />
<!--        注意驱动,-->
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="beis6" />
        <property name="databaseSchemaUpdate" value="true" />
        <property name="asyncExecutorActivate" value="false" />
    </bean>
</beans>

 也可以自定义配置文件名,然后使用下面方式获取,两种方法自定义获取和默认获取的方式很值得借鉴

    @Test
    public void processEngine03() {
        // 会加载resource下面的flowable.cfg.xml文件
        // 配置文件类似创建了createStandaloneProcessEngineConfiguration
        ProcessEngine defaultProcessEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("flowable.cfg2.xml").buildProcessEngine();
        System.out.println("defaultProcessEngine = " + defaultProcessEngine);
    }

 

三、Service总览

 

RepositoryService

资源管理类,提供了管理和控制流程发布包和流程定义的操作

RuntimeService

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

TaskService

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

HistoryService

历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。

ManagementService

提供了对Flowable 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Flowable 系统的日常维护

获取方式:

RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
TaskService taskService = defaultProcessEngine.getTaskService();
// ...

四、图标介绍

4.1 事件图标

 4.2 活动任务图标

 4.3 结构图标

 4.4 网关图标

 

 五、流程部署详解

5.1 流程部署实现

    @Test
    public void test3(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        Deployment deploy = repositoryService.createDeployment()
                .addClasspathResource("holiday-request-new.bpmn20.xml")
                .name("请假流程...")
                .category("请假") // 分类
                .tenantId("dpb") // 租户id
                .deploy();
        System.out.println("deploy.getId() = " + deploy.getId());
        System.out.println("deploy.getName() = " + deploy.getName());
        System.out.println("deploy.getCategory() = " + deploy.getCategory());
    }

5.2 流程部署涉及表

流程部署表:ACT_RE_DEPLOYMENT 一次流程部署操作会生成一条表结构

流程定义表:ACT_RE_PROCDEF  一次部署操作包含多个流程定义文件就会产生多条记录

流程定义资源文件表:ACT_GET_BYTEARRAY 有多少资源就会生成几条记录

 

涉及到的三张表:

部署资源表:act_ge_bytearray

字段名称备注
ID_ 主键  
REV_ 版本号  
NAME_ 名称 部署的文件名称,如:holiday-request-new.bpmn20.xml、holiday-request-new.bpmn20.png
DEPLOYMENT_ID_ 部署ID  
BYTES_ 字节(二进制数据)  
GENERATED_ 是否系统生成 0为用户上传, 1为系统自动生成, 比如系统会 自动根据xml生 成png

 

部署ID表:act_re_deployment

 

字段名称备注
ID_ 主键  
NAME_ 名称  
CATEGORY_ 分类  
TENANT_ID_ 租户ID  
DEPLOY_TIME_ 部署时间  
DERIVED_FROM_ 来源于  
DERIVED_FROM_ROOT_ 来源于  
ENGINE_VERSION_ 流程引擎的版本  

流程表:act_re_procdef

字段名称备注
ID_ 主键  
REV_ 版本号  
CATEGORY_ 分类 流程定义的Namespace就是类别
NAME_ 名称  
KEY_ 标识  
VERSION_ 版本  
DEPLOYMENT_ID_ 部署ID  
RESOURCE_NAME_ 资源名称 流程bpmn文件名称
DGRM_RESOURCE_NAME_ 图片资源名称  
DESCRIPTION_ 描述  
HAS_START_FORM_KEY_ 拥有开始表单标识 start节点是否存在formKey 0否 1是
HAS_GRAPHICAL_NOTATION_ 拥有图形信息  
SUSPENSION_STATE_ 挂起状态 暂停状态 1激活 2暂停
TENANT_ID_ 租户ID  
     

 

 5.3 挂起与激活

@Test
    public void test4(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = processEngine.getRepositoryService();
        //根据DeploymentId查询流程定义信息  表名:ACT_RE_PROCDEF
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionId("holidayRequest:1:3")
                .singleResult();
        //suspension_state 1 是激活 2是挂起
        if (processDefinition.isSuspended()) {
            //流程是挂起的 激活操作
            System.out.println("流程是挂起的 执行激活操作");
            repositoryService.activateProcessDefinitionById(processDefinition.getId());
        }else{
            //流程是激活的 挂起操作
            System.out.println("流程是激活的 执行挂起操作");
            //挂起流程执行启动流程会报异常:Cannot start process instance. Process definition 请假流程 (id = holidayRequest:1:3) is suspended
            repositoryService.suspendProcessDefinitionById(processDefinition.getId());
        }
    }

  注:挂起的流程就不能执行启动流程示例或者流转流程操作

 

 

 

 

 

 

 

11111111111111

    

posted @ 2024-06-05 21:58  苦心明  阅读(156)  评论(0)    收藏  举报