做问卷的网站好烟台网站建设seo
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 中有独立记录
- 完成所有实例后继续流程执行
实际应用示例
在你的项目中,这些概念和表结构体现在:
- 
流程启动: // 设置认证用户 identityService.setAuthenticatedUserId(userIdStr); // 启动流程实例 ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, formBusinessKey, variables);
- 
任务处理: // 完成任务 taskService.complete(taskBo.getTaskId(), taskBo.getVariables(), localScope);
- 
历史查询: // 查询历史流程实例 HistoricProcessInstance historicProcIns = historyService.createHistoricProcessInstanceQuery().processInstanceId(procInsId).includeProcessVariables().singleResult();
理解这些核心概念、表结构和生命周期,可以更好地设计和优化基于 Flowable 的工作流应用。
