流程引擎BPM设计之:流程二开的三种模式

发布时间:2026/9/10 20:04:50

流程引擎BPM设计之:流程二开的三种模式 .流程引擎BPM设计之流程二开的三种模式摘要驰骋 BPM 主张流程可以设计出来业务却不能写进引擎内核。流程设计完成后要用脚本与流程引擎交互在发送成功、发送前、退回、结束等生命周期点嵌入业务逻辑——这一能力我们称为流程二开。CCFlow / JFlow 工作流引擎为此提供了三种编写脚本的模式前端外挂、后端外挂、事件配置。团队可按场景复杂度与技术特征选型三种模式共用同一套事件语义如SendWhen/SendSuccess互为补充、互不排斥。本文说明驰骋 BPM 对「流程二开」的设计思想与主张重点记录关键设计决策并以驰骋 BPMCCFlow / JFlow为实现对照。一、什么是流程二开1.1 定义流程二开 流程设计出来之后用脚本与流程引擎交互实现相关业务逻辑的过程。典型场景在发送成功时做业务同步、在发送前做校验拦截、在流程结束后写台账——不是改引擎源码而是在固定挂接点嵌入执行一段脚本。对比项改引擎流程二开改动位置内核发送/退回代码外挂 / 事件脚本升级成本高难合并低核心可独立升级职责边界引擎与业务缠在一起引擎管流转二开管业务可交付性难复用可按流程模板绑定交付1.2 驰骋的主张主张一引擎稳定业务外挂。流程引擎只回答「怎么流转」「流转时业务做什么」交给二开。主张二同一套事件时钟三种写法。不发明三套事件名前端外挂、后端外挂、事件配置都认SendWhen、SendSuccess、FlowOverAfter等同一语义。主张三按团队选模式不按产品逼模式。前端强、后端强、配置优先——三种路径都合法按场景与团队技术特征选择。二、三种模式总览模式一句话谁写适合什么团队典型载体前端外挂在浏览器侧挂流程脚本前端 / 全栈Vue/TS 能力强重交互校验WGFlow_{流程号}、OverrideFiles后端外挂在服务端挂强类型事件类后端C# / Java 能力强重事务与集成FlowEventBase子类、DLL/程序集事件配置在设计器里配执行体实施 / 低代码希望少写代码、快速上线Sys_FrmEvent GenerDBSrcSQL / WebApi / 过程等管理端把「前后端外挂」与「事件配置」并置事件列表工具栏可见「前后端外挂」产品语义上三者是并列的二开入口不是互相替代。运行时分层设计示意用户点击发送 ├─ ① 前端外挂WGFlow_* / beforeSend ← 可拦截UI 侧 └─ ② HTTP → 流程引擎发送编排 └─ ExecEvent统一调度 ├─ OverrideEvent全局后端拦截 ├─ FlowEventBase流程级后端外挂 ├─ FrmEvents / GenerDBSrc事件配置 └─ PushMsgs消息推送同事件标记 └─ ③ 前端 SendSuccess / afterSend ← 发送成功后的前端副作用设计记录 R1二开挂接点与消息推送共用事件标记但执行职责分离——消息走PushMsg业务走外挂/配置避免「发消息的代码里夹业务」。三、模式一前端外挂3.1 设计意图前端外挂回答的是「用户还在页面上时要不要先校验、先提示、先改交互」适合发送前的表单完整性、金额/天数等即时校验发送成功后的前端提示、局部刷新、调用浏览器侧能力自定义工具栏按钮、打开表单后的 UI 初始化不适合单独承担强事务写库、跨系统强一致同步应交后端外挂或事件配置中的服务端执行体。3.2 设计记录编号决策说明F1约定优于配置注册类名必须以WGFlow_开头并绑定流程号工厂扫描发现即可减少手工注册表F2前后端事件名对齐前端同样提供SendWhen/SendSuccess/ReturnBefore等降低「学两套事件」的成本F3不改核心改外挂目录外挂与 OverrideFiles 落在应用扩展区升级引擎不覆盖业务脚本F4可拦截、可放行返回err...或钩子返回false可阻断操作成功路径再触发SendSuccess3.3 能力边界宣传口径轻量钩子如beforeSend/afterSend适合快速嵌入流程外挂类继承流程外挂基类按流程号完整覆盖生命周期字段级脚本经典 JSLib / 表单字段脚本属于更细粒度的前端扩展可与流程外挂并存主张四前端外挂管「人机交互边界」不管「系统真相边界」。交互可拦在浏览器业务真相以服务端事件为准。四、模式二后端外挂4.1 设计意图后端外挂回答的是「引擎已经进入服务端生命周期业务要以强类型、可调试的方式介入。」适合发送前复杂规则、可改跳转节点 / 接收人发送成功后写第三方待办、同步 ERP/主数据需要访问引擎运行时变量当前节点、WorkID、发送返回对象等平台级全局拦截所有流程统一审计、统一组织策略4.2 设计记录编号决策说明B1一个子类绑定一个组流程模板通过FlowMark如,065,注册避免「一个上帝类管全世界」B2基类暴露引擎变量子类可直接使用当前节点、WorkID、发送对象、系统参数等降低「自己再查一遍引擎状态」的成本B3程序集扫描即可用类放入BP.*.dllCCFlow或对应包JFlow由工厂反射发现部署即生效B4全局与流程级分层全局OverrideEvent/ 可重写文件做平台定制FlowEventBase做流程级二开B5统一错误协议返回err...阻止发送与前端拦截语义一致运维可读源码注释中的产品原话设计思想直述集成该基类的子类可以重写事件的方法与基类交互一个子类必须与一个流程模版绑定基类里有很多流程运行过程中的变量可辅助编写复杂业务逻辑。4.3 与「改引擎」的本质区别后端外挂写的是业务程序集不是改NodeSend内核。引擎升级时业务 DLL / 包可独立保留——这是驰骋坚持「可二开而不改核」的技术承诺。五、模式三事件配置5.1 设计意图事件配置回答的是「没有专职开发时实施人员能否在设计器里把业务挂上」适合SQL 校验 / 存储过程WebApi 同步外部系统指向已有事件类、业务单元BuessUnit节点事件、流程事件、表单事件的快速挂接5.2 设计记录编号决策说明C1配置优先、代码兜底能配就不强制写 DLL复杂逻辑再落到 EventBase / 后端外挂C2事件源三分表单 / 节点 / 流程三类EventSource挂接点与业务对象对齐C3执行体数据源化现行主路径收敛到 GenerDBSrc如 SFProcSQL、WebApi、过程等统一编排C4与外挂并列入口设计器事件列表提供「前后端外挂」入口明确配置与代码二开是同一产品能力的两翼C5事件清单产品化每个事件有名称与业务说明实施可按清单勾选而不是背事件码5.3 能力边界事件配置擅长「标准化连接」查库、调接口、调过程。当逻辑需要大量分支、强类型重构、深度使用引擎变量时应升级到后端外挂当逻辑主要服务页面交互时应落到前端外挂。主张五低代码不是弱代码而是把「简单集成」从程序员日程里解放出来。六、如何选型场景 × 团队场景更推荐原因发送前弹窗校验、禁用按钮、字段联动前端外挂反馈即时无需先打到服务端发送成功同步 ERP、写业务台账、改跳转人后端外挂强一致、可事务、可调试一条 SQL / 一个 WebApi 就能完成事件配置实施可配交付最快全公司统一审计、统一组织策略后端全局外挂一次拦截全流程生效前端团队强、后端人手紧前端外挂 事件配置交互前端扛集成配置扛后端团队强、要长期演进后端外挂为主可测试、可重构、可版本管理实施为主、少开发事件配置为主设计器闭环设计记录 R2三种模式允许叠加。同一SendWhen可以前端先拦 → 后端再拦 → 配置再执行。顺序固定、语义清晰叠加不是混乱而是分层。七、设计思想小结宣传要点二开是一等公民流程设计完成不等于项目完成业务挂接点是产品能力不是售后补丁。事件语义统一前端、后端、配置认同一套时钟降低培训与协作成本。核心不可污升级路径建立在「业务在外、引擎在内」之上。模式服务团队不是强迫全员写 DLL也不是强迫全员只配 SQL。消息与业务解耦同一事件点可推消息也可跑脚本二者独立配置。八、以驰骋 BPMCCFlow / JFlow为例以下用驰骋 BPM 开源引擎CCFlow.NET与JFlowJava说明上述思想如何落地。二者事件模型同源事件名、二开分层、执行调度思想一致差异主要在语言与程序集/包机制。8.1 统一调度ExecEvent服务端由ExecEvent统一执行节点/流程/表单事件。节点发送时大致顺序为全局拦截如OverrideEvent流程事件实体FlowEventBase后端外挂配置事件FrmEvents→ GenerDBSrc消息推送PushMsgs同事件标记这直接对应本文「后端外挂 事件配置」的服务端分层。8.2 前端外挂示例CCFlow Vue3基类WaiGuaBaseFlow类名必须以WGFlow_开头约定WGFlow_064绑定流程064发送链路工具栏先调SendWhen服务端成功后再调SendSuccess轻量替代DataUser/OverrideFiles下的beforeSend/afterSend等钩子含义前端外挂不是「随便写个 onClick」而是与后端同源的事件协议。8.3 后端外挂示例CCFlowDemoF065 : FlowEventBaseFlowMark ,065,绑定流程 065重写SendWhen/SendSuccess注释明确标注为「后端外挂」返回err...可阻止发送类需进入BP.*.dll才能被反射解析JFlow 侧以 Java 包 同类FlowEventBase思想对应事件方法与标记保持一致便于跨语言团队按同一文档实施。8.4 事件配置示例设计器节点属性 →「节点事件」流程属性 →「流程事件」写入Sys_FrmEvent执行体走 GenerDBSrcSQL / WebApi / SFProc / EventBase / BuessUnit 等事件列表工具栏提供「前后端外挂」帮助入口产品上承认配置与代码二开并存举例挂接点配置做法外挂做法节点发送前SendWhenSQL 校验金额是否超限FlowEventBase.SendWhen复杂规则 改接收人节点发送成功SendSuccessWebApi 同步 ERP后端外挂写第三方待办流程结束FlowOverAfter过程归档前端外挂提示 后端外挂关外部待办8.5 一句话对照思想在 CCFlow / JFlow 中的落点流程二开事件挂接脚本而不是改发送内核前端外挂WGFlow_*/ OverrideFiles后端外挂FlowEventBase 程序集/包扫描事件配置Sys_FrmEvent GenerDBSrc统一语义SendWhen/SendSuccess/FlowOverAfter等结语驰骋 BPM 对流程二开的态度很明确把流程设计好把业务挂上去挂的方式可以是前端外挂、后端外挂或事件配置——按场景选按团队选但不要改引擎。以 CCFlow / JFlow 为证三种模式不是营销口号而是源码里可运行、可演示、可交付的工程现实。附录关键源码索引便于二次开发主题CCFlow / Vue3 路径示例前端外挂基类Vue3/src/bp/UIEntity/WaiGuaBaseFlow.ts前端外挂 DemoVue3/src/App/Demo/WGFlow_*.ts后端事件基类CCFlow/Components/BP.WF/WF/FlowEventBase.cs后端外挂 DemoCCFlow/Components/BP.App/Demo/F065.cs事件执行入口CCFlow/Components/BP.WF/WF/ExecEvent.cs全局拦截CCFlow/Components/BP.WF/OverrideEvent.cs事件配置实体CCFlow/Components/BP.En30/Sys/FrmEvent.cs管理端事件列表Vue3/src/WF/Admin/FrmLogic/MapData/FrmEvent/GL_Event.ts节点/流程/表单事件清单EvenListNode/EvenListFlow/EvenListFrm本文档属于「.流程引擎BPM设计之」系列侧重设计思想与主张具体 API 以当期产品帮助与源码为准。
延伸阅读

更多相关文章

2026/9/10 6:20:28

第一阶段-第8天-NumPy入门

今日目标 安装并熟悉NumPy理解数组与列表的区别掌握基本的NumPy运算理解向量化的好处 学习内容 1. 安装NumPy pip3 install numpy验证安装: import numpy as np print(np.__version__)2. 创建数组 import numpy as np# 从列表创建 a np.array([1, 2, 3, 4, 5]) pri…

2026/9/8 20:07:49

二维码库:二维码生成与扫描识别库(241)

在鸿蒙(HarmonyOS)原生应用开发中,二维码与条形码的生成、扫描及识别是高频核心场景。鸿蒙生态提供了从系统级服务到跨平台库的丰富方案,帮助开发者快速构建精准的扫码体验。一、 官方核心方案:Scan Kit(统…

2026/9/8 2:18:01

低价订阅plus

🚀 学习工作效率不够?让 AI 成为你的智能助手!无论你是正在赶课设、查资料、改论文、调代码的学生,还是需要写方案、做PPT、整理表格、优化文案的上班族,这里都能找到适合你的 GPT 等热门 AI 产品会员。✅ 梳理课设思路…

2026/9/10 20:04:15

教育范式异化与青年价值重构:六个维度的深度剖析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/10 20:04:15

深度神经网络梯度消失与权重初始化技术解析

1. 梯度消失问题本质解析在深度神经网络训练过程中,梯度消失现象就像水管系统中的水压不足——当网络层数加深时,反向传播的梯度信号会逐层衰减,最终导致浅层参数几乎得不到有效更新。这种现象在Sigmoid、Tanh等饱和激活函数中尤为明显&#…

2026/9/10 20:04:15

Manus独立运营背后:通用AI Agent的产品化路径与落地趋势

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/10 20:04:15

Chart.js饼图开发指南:从基础到高级应用

1. Chart.js 饼图核心功能解析Chart.js作为前端数据可视化领域的轻量级解决方案,其饼图模块通过简洁的API实现了高度定制化的环形数据展示。不同于传统表格或柱状图,饼图特别适合展示构成比例关系,比如电商平台的销售品类占比、项目预算分配或…

2026/9/10 20:04:15

线程安全懒汉式单例:C++与Python的并发实现与陷阱

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/10 19:59:15

Android手势识别开发指南:从基础到高级实现

1. Android手势操作基础解析在移动应用开发中,手势交互是最自然的用户界面操作方式之一。Android系统提供了完整的手势识别框架,让开发者能够轻松实现各种复杂的手势交互。与简单的点击事件不同,手势操作能够识别用户在触摸屏上的连续动作&am…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 0:00:55

目录对比去重实战:用哈希算法精准清理重复文件

我电脑里现在还有一块换了三次机的“数据墓地”硬盘,里面存着2016年以前所有旧笔记本的完整备份。平时不觉得有什么,直到前阵子想把它整理归档,发现同一个安装包、同一批照片、同一份论文草稿,在几个不同的备份目录里反复出现。更…

2026/9/10 0:00:55

Leaflet离线地图完整Demo合集:内网部署与坐标纠偏实战

简介:这是一份面向Web GIS开发者的LeafLet离线地图示例合集,帮助开发者快速掌握离线地图从搭建到交互的完整流程。压缩包共723个文件,大小14.06MB,以319个js脚本、175个html页面和29个css样式文件为主体,配合png/svg图…

2026/9/10 0:00:55

MATLAB读取Rinex 3.02观测文件:多系统GNSS数据解析实战

简介:基于MATLAB开发的Rinex3.02版观测文件(o文件)读取代码包,面向卫星定位导航方向的学习者与研究人员,用于解决新版观测文件的数据解析、历元提取与时间转换问题。压缩包共4个文件,包含两个m脚本、一个19…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码