当前位置: 首页 > news >正文

【Flowable】核心概念、核心表字段、关联关系以及生命周期

Flowable 是一个轻量级的工作流和业务流程管理(BPM)平台,基于 Activiti 项目发展而来。
本文详细讲解 Flowable 的核心概念、核心表字段、关联关系以及生命周期。

Flowable 核心概念

1. 流程定义 (Process Definition)

  • 流程定义是 BPMN 2.0 XML 文件的部署结果
  • 它描述了业务流程的结构和行为
  • 每个流程定义都有一个唯一的 key 和版本号

2. 流程实例 (Process Instance)

  • 流程实例是流程定义的一次具体执行
  • 每启动一次流程就会创建一个流程实例
  • 一个流程定义可以有多个流程实例

3. 执行 (Execution)

  • 执行代表流程实例当前活动的位置
  • 在简单流程中,执行与流程实例是一对一关系
  • 在并行流程中,一个流程实例可能有多个执行

4. 任务 (Task)

  • 人工任务需要用户参与处理
  • 系统任务由系统自动执行
  • 用户任务是任务的一种特殊类型

5. 身份管理 (Identity Management)

  • 用户 (User) 和组 (Group) 管理
  • 任务分配和权限控制

Flowable 核心表结构

1. Repository 表 (ACT_RE_*)

ACT_RE_PROCDEF (流程定义表)
  • ID_: 流程定义唯一标识符
  • KEY_: 流程定义 Key
  • VERSION_: 版本号
  • NAME_: 流程定义名称
  • DEPLOYMENT_ID_: 部署ID,关联 ACT_RE_DEPLOYMENT
  • RESOURCE_NAME_: BPMN 文件名
  • DGRM_RESOURCE_NAME_: 流程图文件名
ACT_RE_DEPLOYMENT (部署表)
  • ID_: 部署ID
  • NAME_: 部署名称
  • DEPLOY_TIME_: 部署时间

2. Runtime 表 (ACT_RU_*)

ACT_RU_EXECUTION (执行表)
  • ID_: 执行ID
  • PROC_INST_ID_: 流程实例ID
  • PROC_DEF_ID_: 流程定义ID
  • ACT_ID_: 当前活动ID
  • IS_ACTIVE_: 是否活跃
  • IS_CONCURRENT_: 是否并行
  • PARENT_ID_: 父执行ID
ACT_RU_TASK (任务表)
  • ID_: 任务ID
  • EXECUTION_ID_: 执行ID
  • PROC_INST_ID_: 流程实例ID
  • PROC_DEF_ID_: 流程定义ID
  • NAME_: 任务名称
  • ASSIGNEE_: 任务处理人
  • CREATE_TIME_: 创建时间
  • TASK_DEF_KEY_: 任务定义Key
ACT_RU_VARIABLE (变量表)
  • ID_: 变量ID
  • PROC_INST_ID_: 流程实例ID
  • EXECUTION_ID_: 执行ID
  • TASK_ID_: 任务ID
  • NAME_: 变量名
  • TYPE_: 变量类型
  • TEXT_: 变量值
ACT_RU_IDENTITYLINK (身份链接表)
  • ID_: 链接ID
  • USER_ID_: 用户ID
  • GROUP_ID_: 组ID
  • TASK_ID_: 任务ID
  • PROC_INST_ID_: 流程实例ID
  • TYPE_: 链接类型(candidate/assignee/owner)

3. History 表 (ACT_HI_*)

ACT_HI_PROCINST (历史流程实例表)
  • ID_: 流程实例ID
  • PROC_DEF_ID_: 流程定义ID
  • START_TIME_: 开始时间
  • END_TIME_: 结束时间
  • DURATION_: 持续时间
  • START_USER_ID_: 发起人ID
  • START_ACT_ID_: 开始活动ID
  • END_ACT_ID_: 结束活动ID
ACT_HI_ACTINST (历史活动实例表)
  • ID_: 活动实例ID
  • PROC_DEF_ID_: 流程定义ID
  • PROC_INST_ID_: 流程实例ID
  • EXECUTION_ID_: 执行ID
  • ACT_ID_: 活动ID
  • ACT_NAME_: 活动名称
  • ACT_TYPE_: 活动类型
  • START_TIME_: 开始时间
  • END_TIME_: 结束时间
  • DURATION_: 持续时间
ACT_HI_TASKINST (历史任务实例表)
  • ID_: 任务实例ID
  • PROC_DEF_ID_: 流程定义ID
  • TASK_DEF_KEY_: 任务定义Key
  • PROC_INST_ID_: 流程实例ID
  • EXECUTION_ID_: 执行ID
  • NAME_: 任务名称
  • ASSIGNEE_: 任务处理人
  • START_TIME_: 开始时间
  • END_TIME_: 结束时间
  • DURATION_: 持续时间
ACT_HI_VARINST (历史变量实例表)
  • ID_: 变量实例ID
  • PROC_INST_ID_: 流程实例ID
  • EXECUTION_ID_: 执行ID
  • TASK_ID_: 任务ID
  • NAME_: 变量名
  • VAR_TYPE_: 变量类型
  • TEXT_: 变量值

核心表关联关系

1. 流程定义与部署关系

ACT_RE_PROCDEF.DEPLOYMENT_ID_ → ACT_RE_DEPLOYMENT.ID_

2. 流程实例与流程定义关系

ACT_RU_EXECUTION.PROC_DEF_ID_ → ACT_RE_PROCDEF.ID_
ACT_HI_PROCINST.PROC_DEF_ID_ → ACT_RE_PROCDEF.ID_

3. 执行与流程实例关系

ACT_RU_EXECUTION.PROC_INST_ID_ → ACT_RU_EXECUTION.ID_ (根执行)

4. 任务与执行关系

ACT_RU_TASK.EXECUTION_ID_ → ACT_RU_EXECUTION.ID_
ACT_RU_TASK.PROC_INST_ID_ → ACT_RU_EXECUTION.PROC_INST_ID_

5. 变量与执行/任务关系

ACT_RU_VARIABLE.EXECUTION_ID_ → ACT_RU_EXECUTION.ID_
ACT_RU_VARIABLE.TASK_ID_ → ACT_RU_TASK.ID_
ACT_RU_VARIABLE.PROC_INST_ID_ → ACT_RU_EXECUTION.PROC_INST_ID_

6. 身份链接与任务/流程实例关系

ACT_RU_IDENTITYLINK.TASK_ID_ → ACT_RU_TASK.ID_
ACT_RU_IDENTITYLINK.PROC_INST_ID_ → ACT_RU_EXECUTION.PROC_INST_ID_

Flowable 生命周期详解

1. 部署阶段 (Deployment)

// 部署流程定义
Deployment deployment = repositoryService.createDeployment().addClasspathResource("processes/my-process.bpmn20.xml").name("My Process Deployment").deploy();// 结果:
// 1. ACT_RE_DEPLOYMENT 插入部署记录
// 2. ACT_RE_PROCDEF 插入流程定义记录

2. 启动流程实例 (Start Process Instance)

// 启动流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcessKey");// 结果:
// 1. ACT_RU_EXECUTION 插入执行记录
// 2. ACT_HI_PROCINST 插入历史流程实例记录
// 3. ACT_RU_VARIABLE 插入流程变量
// 4. ACT_HI_ACTINST 记录开始活动

3. 任务处理阶段 (Task Processing)

// 查询任务
List<Task> tasks = taskService.createTaskQuery().taskAssignee("user1").list();// 完成任务
taskService.complete(task.getId());// 结果:
// 1. ACT_RU_TASK 删除已完成任务
// 2. ACT_HI_TASKINST 插入历史任务记录
// 3. ACT_RU_EXECUTION 更新执行状态
// 4. ACT_HI_ACTINST 记录活动历史

4. 流程执行 (Process Execution)

// 设置流程变量
runtimeService.setVariable(processInstanceId, "variableName", "value");// 触发信号事件
runtimeService.signalEventReceived("signalName");// 结果:
// 1. ACT_RU_VARIABLE 更新变量值
// 2. ACT_HI_VARINST 记录变量历史

5. 流程结束 (Process Completion)

// 正常结束或通过结束事件结束
// 结果:
// 1. ACT_RU_EXECUTION 删除执行记录
// 2. ACT_RU_TASK 删除任务记录
// 3. ACT_RU_VARIABLE 删除运行时变量
// 4. ACT_HI_PROCINST 更新结束时间
// 5. ACT_HI_ACTINST 记录结束活动

6. 流程异常处理

// 挂起流程实例
runtimeService.suspendProcessInstanceById(processInstanceId);// 激活流程实例
runtimeService.activateProcessInstanceById(processInstanceId);// 删除流程实例
runtimeService.deleteProcessInstance(processInstanceId, "reason");

生命周期中的关键转换

1. 运行时表到历史表的转换

  • 当任务完成时,ACT_RU_TASK → ACT_HI_TASKINST
  • 当流程实例结束时,ACT_RU_EXECUTION → ACT_HI_PROCINST
  • 当变量更新时,ACT_RU_VARIABLE → ACT_HI_VARINST

2. 并行执行管理

  • 并行网关会产生多个执行实例
  • 每个执行实例在 ACT_RU_EXECUTION 中有独立记录
  • 并行汇聚时会合并执行实例

3. 多实例任务处理

  • 多实例任务会产生多个任务实例
  • 每个实例在 ACT_RU_TASK 中有独立记录
  • 完成所有实例后继续流程执行

实际应用示例

在你的项目中,这些概念和表结构体现在:

  1. 流程启动

    // 设置认证用户
    identityService.setAuthenticatedUserId(userIdStr);
    // 启动流程实例
    ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, formBusinessKey, variables);
    
  2. 任务处理

    // 完成任务
    taskService.complete(taskBo.getTaskId(), taskBo.getVariables(), localScope);
    
  3. 历史查询

    // 查询历史流程实例
    HistoricProcessInstance historicProcIns = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInsId).includeProcessVariables().singleResult();
    

理解这些核心概念、表结构和生命周期,可以更好地设计和优化基于 Flowable 的工作流应用。

http://www.dtcms.com/a/326903.html

相关文章:

  • python3.10.6+flask+sqlite开发一个越南留学中国网站的流程与文件组织结构说明
  • GM3568JHF快速入门教程【二】FPGA+ARM异构开发板环境编译教程
  • 嵌入式硬件——ARM
  • Apache虚拟主机三种配置实战
  • 为什么灰度图用G(绿色)通道?
  • Gradient Descent for Logistic Regression|逻辑回归梯度下降
  • 物理服务器内存容量选择:大数据分析场景下的适配指南
  • 互连的带宽
  • 终端安全检测和防御技术
  • 2-1〔O҉S҉C҉P҉ ◈ 研记〕❘ 漏洞扫描▸理论基础与NSE脚本
  • Flutter path_provider的基本使用(读写文件)
  • Android12 Framework电话功能UI定制
  • Mac M1探索AnythingLLM+Ollama+知识库问答
  • Vue.js 样式绑定
  • 【Node.js从 0 到 1:入门实战与项目驱动】2.1 安装 Node.js 与 npm(Windows/macOS/Linux 系统的安装步骤)
  • 派聪明RAG知识库----关于elasticsearch报错,重置密码的解决方案
  • node.js简介
  • 【论文阅读】RestorerID: Towards Tuning-Free Face Restoration with ID Preservation
  • ARM芯片架构之CoreSight SoC-400 组件介绍
  • 高效解耦:自定义内核链表实现指南(简化版)
  • LLM智能:从语言模型到通用智能体的技术跃迁
  • Java多线程基础总结
  • Python类装饰器:优雅解决描述符属性命名难题
  • 内存作假常见方案可行性分析
  • 【15-多类别分类和多标签分类】
  • SSE流式输出分层与解耦、用户自动结束语错误处理
  • 基于FPGA的热电偶测温数据采集系统,替代NI的产品(一)FPGA 测温研究现状
  • 【Python修仙编程】(20) 参悟参数真谛,林羽内力大增
  • 前端工程化:pinia
  • 【Leetcode】随笔