审批中心与 Flowable
审批中心由 workflow 域和内嵌 Flowable 共同实现。前端提供设计与操作页面,服务端校验设计器 schema 并编译 BPMN。客户无需部署独立 Flowable REST、UI 或用户体系。
从配置到实际审批
- 建立实际部门、用户和角色,确认可用审批人,不依赖演示组织。
- 创建分类和流程定义,设计动态表单及节点。
- 校验定义,使用预览/模拟检查条件、人员和字段规则。
- 发布版本,再以具有发起权限的普通账号发起。
- 由实际待办人执行审批,核对已办、抄送、撤销和附件访问。
模拟不落真实实例,不能代替已发布流程的实际验证。超级管理员能管理流程,不意味着可以替代当前任务审批人操作。
第一次验证建议使用最简单的审批
在验收环境准备两个普通账号:一个发起人、一个审批人。创建包含必填文本字段的表单,配置一个指定审批人的节点并发布。用发起人提交,再用审批人在待办中通过,最后回到申请记录确认流程结束。
这一步验证组织、权限、发布和任务执行。再逐步增加条件分支、多人审批、附件和字段权限;一次加入全部规则,出现问题时难以判断是哪一环导致。
| 现象 | 优先核对 |
|---|---|
| 设计器中没有可选人员 | 组织和账号是否已建立、状态是否可用 |
| 发起时看不到流程 | 是否已发布、启用以及拥有发起范围 |
| 管理员看得到任务但不能处理 | 当前操作人是否实际待办人 |
| 修改草稿后旧申请未变化 | 已有实例使用发起时的快照,这是预期行为 |
| 附件打不开 | 实例参与关系、字段可见性及文件是否可读取 |
版本与实例快照
发布时固化业务版本和引擎定义 ID。运行实例冻结表单、流程与设置,后续编辑草稿、停用或回滚不改写已发起实例。
回滚生成带来源的新草稿及快照,不修改旧版本或已部署 BPMN。需要改变运行行为时先明确历史实例如何处理,不通过数据库直接覆盖快照。
引擎与事务
WorkflowEngineConfiguration 等待 Flyway 完成后创建引擎,使用业务 DataSource 和事务管理器。引擎自动建表、IDM、Event Registry、异步执行器及 Liquibase 建表保持关闭。
业务表和引擎表统一由 Flyway 管理。不要为了修复启动错误打开 databaseSchemaUpdate,否则会形成两套数据库版本入口。
支持与限制
| 项目 | 当前行为 |
|---|---|
| 审批方式 | ANY、ALL、SEQUENTIAL |
| 任务动作 | 通过、驳回、评论、转交、符合条件的加签 |
| 自选审批人 | 发起时按定义及人数限制校验 |
| 自审批与重复审批 | 支持 AUTO_SKIP、跨节点去重等既定规则 |
| 空人员 | 按 AUTO_PASS / AUTO_REJECT 等配置处理 |
| 条件 | 按已校验图协议编译,条件节点按顺序选首个命中分支 |
| 任意脚本/XML | 不接收任意 BPMN XML、JavaScript 或外部表达式 |
| 预留上级策略 | TO_MANAGER / TO_DEPARTMENT_MANAGER 自审批设置当前归一化为 ALLOW,levelOffset 不参与执行 |
顺序审批禁用加签。表单配置不执行任意外部数据源请求;正则、附件、列表及表单大小都有服务端上限。不要因为设计器能保存某个预留字段就推定运行引擎已执行该策略。
权限与附件
定义使用 workflow:definition 数据范围;实例区分本人、参与者、抄送人与管理范围。隐藏字段由服务端过滤。
附件按私有文件处理。未绑定时限制上传人和超级管理员访问,绑定后联合检查实例参与范围、附件引用和字段可见性。审批不能绕过文件域直接拼接对象存储公开 URL。
二次开发入口
| 目标 | 主要源码 |
|---|---|
| 修改定义、发布、回滚、复制 | WorkflowDefinitionCommandService |
| 发起、重提、撤销 | WorkflowInstanceCommandService |
| 审批、驳回、转交、加签 | WorkflowTaskCommandService、WorkflowTaskGuard |
| 设计器 schema 到 BPMN | WorkflowBpmnCompiler |
| 引擎命令 | WorkflowEngineService |
| 人员、自审批、去重 | WorkflowApproverResolver、WorkflowAssignmentService |
| 表单及字段规则 | WorkflowFormDataService、WorkflowFormRules |
写操作先锁实例,再锁任务并检查当前状态/归属,保持该顺序。workflowNodeExecution.enter/finish、workflowTaskLifecycle 会被已部署流程引用,不能按普通内部名称随意重命名。
改动图协议时同时验证定义校验、BPMN 编译、预览和真实执行;覆盖重复提交、并发审批、权限拒绝、运行快照和附件。深入契约见随包 docs/guides/workflow-design.md。
