本文基于源码静态分析,梳理一套企业级工作流引擎的架构分层、运行模式设计、接收人规则引擎与二次开发接口,供技术选型与方案论证参考。
该 BPM 平台(该引擎 / 该引擎) 是一套面向企业级审批与流程自动化的工作流引擎,核心能力覆盖流程设计、表单绑定、组织权限、运行期流转与运维监控。与仅提供「画流程图 + 简单审批」的轻量产品不同,该平台引擎在分合流、父子流程、接收人规则、表单方案等维度做了深度建模,适合复杂政企、集团型组织的流程场景。
从代码规模看,后端 BP.WF 模块约 600+ 个 C# 源文件,前端 前端模块源码目录 约 1200+ 个 Vue/TS 文件——这不是薄封装层,而是经过长期业务沉淀的完整 BPM 产品栈。
维度 | 实现 |
|---|---|
运行时 | .NET 8.0(BP.WF.csproj) |
Web 集成 | ASP.NET Core(Microsoft.AspNetCore.App) |
数据访问 | 自研 BP.DA 层,参数化 SQL |
实体模型 | BP.En30 实体框架(Entity / Attr / Map) |
序列化 | Newtonsoft.Json |
调度 | Quartz(超时、自动发起等) |
引擎在 Glo.cs 等核心类中对多种数据库做了方言适配,开箱支持:
这对国产化替代、混合云部署场景是实际优势,而非仅文档宣称。
代码中通过 该引擎RunModel 区分:
OrgNo 隔离贯穿待办、节点、权限查询)同一套引擎代码可支撑从私有化到 SaaS 的多种商业模式,技术团队无需维护多套分支。
节点运行模式在 EnumLib.RunModel 中明确定义,是引擎路由分发的核心枚举:
值 | 枚举 | 含义 |
|---|---|---|
0 | Ordinary | 普通线形节点 |
1 | HL | 合流节点 |
2 | FL | 分流节点 |
3 | FHL | 分合流节点 |
4 | SubThreadSameWorkID | 同表单子线程 |
5 | SubThreadUnSameWorkID | 异表单子线程 |
WorkNode.cs 中按运行模式拆分发送逻辑,例如:
NodeSend_11 — 普通节点到普通节点NodeSend_24_SameSheet — 同表单分流下发NodeSend_24_UnSameSheet — 异表单多路径分流NodeSend_53_SameSheet_To_HeLiu / 异表单合流 — 子线程汇总后激活干流程这种按模式分派、而非单一状态机硬编码的设计,使复杂拓扑(并行会签、多表单分流、合流通过率)在引擎层有清晰边界,便于定位问题与二次扩展。
根据项目内功能点统计(项目内统计文档),四大模块合计 769 个功能点:
模块 | 功能点 | 技术要点 |
|---|---|---|
线性流程 | 324 | 顺序审批基座:发起模式、接收人、按钮权限、方向条件、超时回滚 |
异表单分合流 | 184 | 多路径分流、各节点独立 ND{NodeID} 物理表、ToNodes 多选 |
父子流程 | 136 | FrmSubFlow + WF_NodeSubFlow,手动/自动/延续/前置导航四种启动 |
同表单分合流 | 125 | FID 关联干流程与子线程,共用 Flow.PTable |
线性流程是其他模块的共用基座;同表单与异表单分合流在实例模型上互斥(同一分流点不可混发 RunModel 4 与 5),父子流程则是跨流程嵌套,与子线程并行模型不同——边界在代码与文档中均有明确约束,避免误用。
WFState 枚举覆盖完整生命周期:Blank、Draft、Runing、CompleteEnd、Hungup、ReturnSta、Shift、Delete、Askfor、Fix 等 12+ 种状态。运行期不仅支持「进行中/已完成」,还支持挂起、加签、冻结、非正常完成等运维场景,适合长周期、多干预的企业流程。
除普通用户节点外,引擎原生支持:
前端 FlowDesignerV2 通过 userNodes、routeNodes、ccNodes、subFlowNodes 四类图元与之对应,设计态与运行态模型一致。
DeliveryWay 枚举定义了 50+ 种接收人计算方式,FindWorker.cs(约 3200 行)集中实现。前后端常量对齐(DeliveryWay.ts ↔ EnumLib.cs),配置在设计器保存后由运行期统一解析。
代表性规则包括:
类别 | 示例规则 |
|---|---|
组织维度 | 按部门、按角色、部门与角色交集、分管领导 |
表单驱动 | 主表人员字段、从表明细行、部门编号字段、权限组 |
路由类 | 部门路由(ByFromDeptToEmp)、字段路由(ByFromAttrToEmp) |
主管链 | 连续多级主管(ByMLeader0/1/2) |
子线程专用 | 按明细表拆分子线程、SQL 确定子线程接收人与数据源 |
外部集成 | WebAPI(ByAPIUrl)、数据源(ByGenerDBSrc)、字典表(BySFTable) |
预置处理人 | 发送前固定或自由选择(PreplaceWokerFix/Free) |
国内 BPM 项目的难点往往不在「画流程图」,而在**「这一步该找谁」**。该平台将找人逻辑抽象为可配置、可扩展的规则引擎,并针对子线程、父子流程、合流节点提供专用规则——这是相对开源/轻量工作流产品最显著的差异化能力之一。
中肯说明:规则种类多意味着配置项丰富,实施阶段需要熟悉各 DeliveryWay 的适用边界,建议配合测试容器与轨迹工具验证,而非仅靠设计器直觉配置。
FrmSubFlow(表单内子流程组件)WF_NodeSubFlow(节点与子流程关系)AllSubFlowOverRole(全部完成后送父流程下一步 / 结束父流程)、SubFlowRunModel(按子流程结束或指定节点驱动父流程)BackCopyRole(字段自动匹配、格式匹配、混合模式)典型场景:主项目流程 + 投标/采购子审批、按明细行批量发起子流程、子流程会签式全部完成后推进父流程。
对比项 | 同表单(RunModel=4) | 异表单(RunModel=5) |
|---|---|---|
数据表 | 共用 Flow.PTable,FID 关联 | 各节点独立 ND{NodeID} |
分流路径 | 单条同表单路径 | 可多选异表单子线程并行 |
选人 UI | 单选 | ToNodes.vue 多选 |
核心 API | NodeSend_24_SameSheet | NodeSend_24_UnSameSheet |
异表单适合财务/法务/技术等多表单并行填报;同表单适合多部门会签同一份主表数据。引擎在物理数据模型层面做了区分,而非仅用 UI 区分。
节点可绑定傻瓜表单(FoolForm)、嵌入式表单、独立表单等多种 NodeFormType;引擎节点数据接口.GenerWorkNode 统一组装表单元数据(Sys_MapData、Sys_MapAttr、附件、版本号 FrmVer),并在加载前后触发 ExecEvent 表单事件。
运行期 WorkCheck.vue 支持多种展示模式(normalMode、trackMode、trackTimeMode),对应轨迹、时间轴、手写签批、立场、附件等能力。异表单分合流模块中审核相关功能点达 27 项,说明审核不仅是「意见框」,而是可配置的合规组件。
FoolFormDesigner 提供可视化字段、从表、扩展属性(MapExt)配置;支持 VSTO 集成(DesignerVSTO)、AI 辅助建表(GPN_AIFlow.ts、WF_Admin_AIFlow.cs)。流程与表单在同一产品内闭环,减少「流程引擎 + 第三方表单」的集成成本。
模块 | 技术 |
|---|---|
框架 | Vue 3 + TypeScript |
流程设计器 | @vue-flow/core(FlowDesignerV2) |
UI 组件 | Ant Design Vue |
通信 | HttpHandler 统一调用后端 Handler |
元数据 UI | BSEntity / Entity / Map 驱动(Comm/En.vue、GenerList.vue) |
useFlowLayout)GroupPageEdit)EventSource + IsChecking),设计期即可发现配置错误FrmDesignerWrapper)WorkOpt 目录涵盖发送(Send.ts)、抄送、移交、退回、加签、子线程管理(ThreadDtl)、轨迹查看(OneWork/Track.vue)等完整操作链。发送实体通过 Map 声明字段与弹窗选人(SetPopTreeEns 懒加载组织树),前后端契约清晰。
TestingContainer/FlowInstance.vue 提供流程实例运维:跳转、删除、移交、强制结束、轨迹查看——便于实施与二开阶段不依赖生产数据做流转验证。
Dev2Interface.cs(约 15000+ 行)是二开主入口,文档注释约定命名规范:
前缀 | 含义 |
|---|---|
Flow_ | 流程操作 |
Node_ | 节点操作 |
Port_ | 组织架构 |
WorkOpt_ | 工作处理器 |
Frm_ | 表单/打印 |
DTS_ | 调度任务 |
DB_ | 返回结果集的查询 |
接口以静态方法暴露,便于在 ASP.NET 业务系统中直接调用,无需深入 WorkNode 内部状态机。
ExecEvent 在流程、节点、表单多个生命周期挂载事件:
FrmLoadBefore/After、SaveBefore/After、CheckStart/Over……FrmEvents、OverrideFile 支持无侵入重写适合在不修改引擎源码的前提下注入校验、同步外部系统、自定义消息。
运行期与设计期 API 按职责拆分:WF_MyFlow(我的流程)、WF_WorkOpt(工作操作)、WF_Admin_AttrFlow(流程属性)、WF_Admin_Cond(方向条件)等 30+ 个 Handler。前端 HttpHandler 类按类名与方法名路由,约定统一,利于生成接口文档与 Mock。
引擎节点数据接口.GenerWorkNode 等工作节点数据组装 API,可供移动端、第三方门户、低代码页面以 DataSet 方式消费流程+表单一体数据。
BP.WF 不仅包含纯工作流,还集成了:
模块 | 路径/类 | 能力 |
|---|---|---|
低代码门户模块 | 低代码门户模块/ | 低代码门户、DataV 大屏、AI 辅助 |
单据台账模块 | 单据台账模块/ | 单据、台账、实体权限 |
项目协同模块 | 项目协同模块/ | 项目协同、文件评审 |
自由任务模块 | 自由任务模块/ | 自由任务(非固定流程图的协作任务) |
办公扩展模块 | 办公扩展模块/ | 办公扩展 |
这意味着选型该平台不仅是选一个流程引擎,而是选一个可渐进扩展的 BPM 平台底座;若只需极简审批,部分模块可能用不到,需按场景裁剪部署。
WF_Admin_AIFlow 解析自然语言/图片描述,输出 Flow/Node 的 JSON 并导入设计器WF_Admin_AI低代码门户模块、GPN_AIFlow.ts 等辅助建表与布局ByPreviousNodeFormStationsAI 等规则预留 AI 辅助选人中肯评价:AI 能力处于快速迭代阶段,适合作为设计期提效工具;核心流转仍由确定性引擎执行,生产环境的关键业务规则建议以显式配置 + 事件代码为准,AI 生成结果需经人工审核与流程检查。
DeliveryWay,直面国内企业组织、表单、主管链、子线程拆单等真实痛点。Dev2Interface + 事件重载 + HttpHandler 分层,15 年量级沉淀的 API 面。引擎历史悠久,核心类(如 WorkNode.cs 超 11000 行)承载了大量边界场景。新开发者建议路径:
Dev2Interface 常用 API RunModel 与 FID/WorkID 实例模型 不建议在未理解 DeliveryWay 与节点运行模式的情况下直接上复杂流程。
后端采用自研实体框架 + HttpHandler,而非 Spring Activiti/Flowable 那类 BPMN 标准引擎。优势是中国企业场景贴合度高;若团队强依赖 BPMN 2.0 标准导入导出或 Camunda 生态,需要评估迁移与互操作成本。
更适合 | 需审慎评估 |
|---|---|
政企/集团复杂审批 | 仅需 3~5 节点极简审批 |
多组织、多租户 SaaS | 强依赖 BPMN 标准引擎 |
国产化数据库环境 | 团队无 .NET 运维能力 |
深度定制与源码掌控 | 不愿投入流程建模学习成本 |
表单+流程一体化业务 | 纯微服务编排(可考虑专用编排引擎) |
场景 | 推荐模块 | 关键技术点 |
|---|---|---|
请假/报销顺序审批 | 线性流程 | DeliveryWay、方向条件、按钮权限、超时 OutTimeDeal |
多部门会签同一单据 | 同表单分合流 | FID 关联、PassRate 合流通过率 |
财务+法务+技术并行填报 | 异表单分合流 | ToNodes 多选、USSWorkIDRole |
主项目+子项目审批 | 父子流程 | SubFlowHand/Auto、AllSubFlowOverRole |
按报销明细行指定审批人 | 同表单 + ByDtlAsSubThreadEmps | 明细驱动子线程 |
与 ERP 同步 | ExecEvent + Dev2Interface | 节点/表单事件、调度 DTS_ |
移动端待办 | 引擎节点数据接口 + Dev2Interface | 待办数量、GenerWorkNode 数据包 |
该 BPM 平台 工作流引擎是一套以运行期深度为核心竞争力的企业级产品:代码体量、枚举完备度、分模式发送实现和找人规则引擎,都指向「复杂组织里的真实审批」而非演示级流程图。
从技术选型角度,若贵方需要:
该平台引擎是值得重点评估的国产 BPM 方案之一。同时,应预留实施团队对 RunModel、DeliveryWay 和事件扩展的学习周期,并善用设计器流程检查与测试容器降低上线风险。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。