六款 .NET 工作流引擎:二开能力怎么比

发布时间:2026/7/22 19:21:08

六款 .NET 工作流引擎:二开能力怎么比 六款 .NET 工作流引擎二开能力怎么比对比对象Elsa Workflows、Workflow Core、WorkflowEngine.NET、StepWise、CCFlow、Slickflow资料依据各产品公开文档 / GitHub / 官方站点写作原则先统一「二开」定义再按同一维度对照有优势写优势有短板写短板不因场景不同而强行打成「总分第一」一、先说清楚什么叫「流程引擎的二开」1.1 定义本文口径流程二开 流程设计或代码定义完成后在不改引擎内核的前提下用脚本 / 代码 / 配置与引擎交互把业务逻辑挂到固定生命周期点上的过程。典型动作发送前校验、发送后同步第三方、退回拦截、流程结束写台账、自定义活动节点、自定义设计器控件等。对比项改引擎源码流程二开本文范围改动位置发送/退回/调度内核外挂、事件、自定义 Activity/Step、配置执行体升级成本高难合并相对低核心可独立升级职责边界引擎与业务缠在一起引擎管流转二开管业务可交付性难复用可按流程模板 / 模块绑定交付1.2 二开范围纳入 / 不纳入为避免「什么都能叫二开」导致对比失真本文把二开拆成6 个可核对能力面编号能力面含义典型载体D1生命周期挂接发送/完成/退回/结束等时机能否挂业务事件、中间件、Action、钩子D2自定义步骤/活动能否扩展流程「积木块」Custom Activity / Step / ServiceTaskD3前端 / UI 扩展设计器、办理页、按钮、表单交互能否外挂Studio 插件、模板、前端外挂D4配置化集成少写代码能否挂 SQL / WebApi / 过程设计器事件配置、CodeAction、DSLD5人机审批语义扩展待办、会签、退回等业务语义是否可直接挂业务审批模型 事件D6模块化与可升级性扩展是否可独立部署、少改核插件、程序集扫描、Override明确不纳入「二开能力」本身、但会影响选型的因素文末单独提示许可费用、社区活跃度、是否内置表单/组织门户。这些会影响「能不能用二开把项目做完」但不是二开机制本身的强弱。1.3 公平原则阅读说明定位不同不能只比「有没有审批」Elsa / Workflow Core / StepWise 更偏编排CCFlow / Slickflow 更偏 BPMWorkflowEngine.NET 偏可嵌入商业引擎。「能扩展」≠「开箱就是审批系统」例如 Elsa 可用 Bookmark 做人工等待但会签/加签/组织待办通常要自建。CCFlow 章节结合本仓库源码举证其余产品以公开文档为准不臆造未公开能力。StepWise 纳入对比是为防误选它是代码优先的步骤/AI 任务编排框架不是传统 OA/BPM 引擎。二、六款产品定位一览二开语境产品大致定位二开主路径公开资料更像什么Elsa Workflows.NET 通用长流程编排 StudioCustom Activity、Module/Feature 插件、Middleware、Bookmark开发者编排平台Workflow Core轻量嵌入式流程库自定义StepBody、中间件、JSON/YAML DSL库级编排内核WorkflowEngine.NETOptimaJet 可嵌入引擎生产多需商业许可IWorkflowActionProvider、CodeActions、Plugins、Custom Activity 表单商业组件式引擎StepWise代码优先、事件驱动步骤框架[Step]/[DependsOn]方法即步骤WebUI 可视化执行开发/AI 任务编排CCFlow流程 表单 组织一体化 BPM前端外挂 / 后端外挂 / 事件配置三模式中国式审批 / 政企 BPMSlickflowBPMN 风格 .NET 引擎 设计师IExternalService、WebApi、SQL/过程、C# 类库、WorkflowService API标准向嵌入式 BPM 引擎三、二开能力总对照表同一维度评级口径强 产品级、文档/样例完整中 能做但需自建较多弱 基本不覆盖或需从零实现。评级是机制完整性不是「业务场景总分」。能力面ElsaWorkflow CoreWorkflowEngine.NETStepWiseCCFlowSlickflowD1 生命周期挂接强Activity 执行模型 Middleware强Step Workflow/Step Middleware强Action / Condition / Runtime 事件中步骤依赖图非审批事件时钟强节点/流程事件清单产品化强节点 Action / ServiceTaskD2 自定义步骤/活动强官方一级能力强StepBody即扩展单元强Custom Activity Action Provider强方法即 Step本就代码优先中偏强事件/业务单元为主非「画布积木」叙事中偏强ExternalService 多种执行体D3 前端 / UI 扩展中偏强Studio 元数据 / UIHint业务办理页多自建弱基本无产品级办理 UI强设计器模板 / Vue 表单可定制中自带 WebUI偏调试执行非审批工作台强Vue3 前端外挂WGFlow_*中设计师可嵌入业务页多自建D4 配置化集成中表达式/活动组合强SQL/实施配置弱于 BPM中JSON/YAML 引用 Step 类型强方案内 CodeActions 插件弱几乎全是代码强设计器事件 GenerDBSrcSQL/WebApi/过程等强本地类/WebApi/SQL/过程/C# 库D5 人机审批语义扩展中Bookmark/人工等待可自建审批语义需自造弱偏中有 Users 扩展审批要自建中偏强命令/角色/Assignment完整 OA 仍需自建弱非审批模型强审批动作与事件时钟对齐强BPMN 任务 引擎 API表单/组织视版本D6 模块化与可升级性强Module/Feature/NuGet 扩展强库嵌入 DI强Plugin 体系强项目内代码即扩展强业务程序集 / Vue 外挂目录约定不改核强接口 反射服务类一句话读表如果你更关心…相对更贴的产品自定义「流程积木」与云原生编排扩展Elsa、Workflow Core设计器里写 Action / 插件化商业嵌入WorkflowEngine.NET用 C# 方法快速编排可并行步骤 / AIStepWise审批生命周期上挂业务且前端也能挂CCFlowBPMN 节点上挂本地服务 / WebApi / SQLSlickflow四、分引擎二开机制怎么落地公开资料摘要4.1 Elsa Workflows项内容核心扩展点Custom ActivityCodeActivity/Activity/Trigger、Module Feature、Activity Middleware、Studio 元数据人机介入Bookmark 阻塞等待外部系统通过 Resume / HTTP Trigger 恢复官方有 Human-in-the-loop 模式说明二开体验对 .NET 开发者极友好扩展可打成 NuGetStudio 与运行时对齐是关键坦诚短板审批会签/组织待办/表单工作台不是开箱能力多靠自建活动 外部应用V2→V3 无自动迁移扩展要重写适合的二开场景微服务编排、Webhook/长事务、领域自定义活动库。不太适合指望「只配不写」的政企审批实施团队纯配置交付。4.2 Workflow Core项内容核心扩展点继承StepBody/StepBodyAsyncDI 注入IWorkflowMiddleware/IWorkflowStepMiddlewareJSON/YAML DSL 引用 Step 全名人机介入社区有 Users 等人机相关扩展但不是完整 BPM 产品面二开体验极简、嵌入成本低Step 即业务单元学习曲线短坦诚短板几乎没有产品级设计器/表单/待办门户二开 写代码 自建 UI适合嵌入现有系统做状态机/后台编排。不适合指望「设计器 事件配置」完成项目交付。4.3 WorkflowEngine.NETOptimaJet项内容核心扩展点IWorkflowActionProviderAction/Condition、方案内CodeActions、IWorkflowPlugin、Custom Activity含 HTML/SVG 模板、规则提供者等前端扩展设计器模板高度可定制工具栏、表单、画布元素可与 React 等集成二开体验文档完整插件模型清晰CodeActions 可在设计器内编译调试坦诚短板生产许可通常为商业授权源码可见 ≠ 免费商用完整 OA表单/组织/移动仍需自建或另购生态适合要嵌入高质量设计器 Action 扩展的商业项目。选型时必须单独评估许可成本与锁定风险。4.4 StepWise项内容核心扩展点类方法 [Step]/[DependsOn]/[FromStep]引擎自动并行与依赖解析WebUI 可视化执行可对接 MCP / AI二开体验「写方法就是扩展」——对开发者极直接坦诚短板不是 BPM无会签/退回/组织待办等审批事件时钟配置化实施路径弱适合数据分析、批处理、AI Agent 步骤流。误选风险名字像工作流但交付审批系统会从零造轮子。4.5 Slickflow项内容核心扩展点节点 Action本地类ExternalServiceBaseIExternalService、WebApi、SQL、存储过程、C# 类库WorkflowServiceAPIStart/Run/Jump/Withdraw/Sendback 等二开体验BPMN 语义清晰ServiceTask 文档对「二次开发」有明确示例反射约束基类/接口避免乱挂坦诚短板表单/门户/组织完整度依赖产品线版本社区版与商业能力常分层前端「办理页外挂协议」不如 CCFlow 产品化适合要 BPMN 节点级服务调用、以 API 嵌入业务系统。相对弱于 CCFlow 的点前后端统一事件协议、低代码事件配置与表单一体化深度。4.6 CCFlow结合本仓库项内容核心扩展点三种并列模式前端外挂、后端外挂、事件配置详见第五节统一调度服务端ExecEvent全局拦截 →FlowEventBase→FrmEvents/GenerDBSrc → 消息推送二开体验事件名产品化SendWhen/SendSuccess/FlowOverAfter等前端与后端认同一套时钟坦诚短板扩展叙事偏「审批事件挂业务」不是 Elsa 那种「自定义画布 Activity 生态」技术栈与约定需学习WGFlow_、FlowMark、程序集扫描五、CCFlow 三种二开方式结合代码驰骋 BPM 的主张可以概括为流程可以设计出来业务却不能写进引擎内核。同一套事件语义三种写法前端外挂、后端外挂、事件配置。5.1 三种模式总览模式一句话谁写典型载体本仓库前端外挂浏览器侧挂流程脚本前端 / 全栈Vue3/src/bp/UIEntity/WaiGuaBaseFlow.ts、Vue3/src/App/Demo/WGFlow_*.ts、OverrideFiles后端外挂服务端强类型事件类后端BP.WF.FlowEventBase、BP.App/Demo/F065.cs、OverrideEvent事件配置设计器里配执行体实施 / 低代码Sys_FrmEventBP.En30、EventBase/BuessUnitBase、GenerDBSrc运行时分层示意用户点击发送 ├─ ① 前端外挂WGFlow_* / beforeSend ← 可拦截UI 侧 └─ ② HTTP → 流程引擎发送编排 └─ ExecEvent统一调度 ├─ OverrideEvent全局后端拦截 ├─ FlowEventBase流程级后端外挂 ├─ FrmEvents / GenerDBSrc事件配置 └─ PushMsgs消息推送同事件标记 └─ ③ 前端 SendSuccess / afterSend ← 发送成功后的前端副作用5.2 模式一前端外挂意图人还在页面上时做校验、提示、按钮与交互定制。约定类名必须以WGFlow_开头并绑定流程号。protected constructor(classID: string, flowNo: string) { if (classID.includes(WGFlow_) false) { message.warning(外挂类名[ classID ]不符合规范,必须是以 WGFlow_ 开头.); return; } super(classID); this.FlowNo flowNo; }Demo流程 064发送前可返回err...阻断发送发送成功后再做前端副作用。export class WGFlow_064 extends WaiGuaBaseFlow { constructor() { super(WGFlow_064, 064); //注册到 064模板的流程上. } // ... protected override async SendWhen() { if (this.NodeID 6401) { const msg ##### 提示信息 1. 成功激活了/src/App/Demo/WGFlow_064.ts 的 SendWhen事件. 2. 如果return errxxxxxxx 则流程不向下发送. ; return msg; } return ; }工具栏实际调用链见Vue3/src/WF/ToolBar.vue先SendWhen/beforeSend服务端成功后再SendSuccess/afterSend。适合不适合单独承担表单即时校验、按钮定制、成功提示、局部刷新强事务写库、跨系统强一致同步5.3 模式二后端外挂意图进入服务端生命周期后用可调试的强类型代码介入可改跳转节点/接收人可同步第三方。基类约定源码注释原文要点子类重写事件方法与基类交互一个子类必须与一个流程模版绑定FlowMark基类暴露运行时变量辅助复杂逻辑类需进入BP.*.dll才能被反射解析Demopublic class F065 : FlowEventBase { public override string FlowMark { get { return ,065,; } } public override string SendWhen() { if (1 3) return err不符合流程发起条件阻止流程发送。; if (1 1) return 后端外挂 /App/Demo/F065 SendWhen 已经执行成功,节点ID: this.HisNode.NodeID ,WorkID: this.WorkID; // ... }全局级还可改OverrideEvent消息通道、统一策略等属于平台定制层与流程级FlowEventBase分层。适合说明发送成功写第三方待办、ERP 同步SendSuccess中可取SendReturnObjs接受人/到达节点等全公司统一审计走全局 Override而不是每个流程复制粘贴5.4 模式三事件配置意图实施人员在设计器挂 SQL / WebApi / 过程 / 已有事件类 / 业务单元少写专用 DLL。挂接点配置入口执行体常见类型节点事件 / 流程事件 / 表单事件SQL、WebApi、存储过程、EventBase、BuessUnitBase等业务单元基类说明/// 1. 重写该类为业务单元子类. /// 2. 每个业务单元子类可以在流程事件节点时间设置. /// 3. 被继承的子类的必须在BP.*.DLL 里面,才能确保设置时候被映射到. /// 4. 子类在DoIt方法中根据WorkID 的书写业务逻辑.配置侧事件实体BP.En30/Sys/FrmEvent.cs管理端事件列表Vue3/src/WF/Admin/FrmLogic/MapData/FrmEvent/。也可把可复用逻辑写成EventBase子类如BP.App/Demo/Event/EventDemo.cs在配置里按事件源分支处理SendWhen/SendSuccess/FlowOverAfter等。5.5 三种模式如何选型CCFlow 内部场景更推荐原因发送前弹窗校验、字段联动前端外挂反馈即时同步 ERP、改接收人、写台账后端外挂强一致、可调试一条 SQL / 一个 WebApi事件配置实施可配最快全公司统一策略后端全局 Override一次拦截全流程同一SendWhen需要分层允许叠加前端先拦 → 后端再拦 → 配置再执行5.6 CCFlow 二开相关源码索引主题路径前端外挂基类Vue3/src/bp/UIEntity/WaiGuaBaseFlow.ts前端外挂 DemoVue3/src/App/Demo/WGFlow_064.ts办理页调用Vue3/src/WF/ToolBar.vue后端事件基类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业务单元CCFlow/Components/BP.En30/Sys/BuessUnitBase.csEventBase DemoCCFlow/Components/BP.App/Demo/Event/EventDemo.cs六、横向对比同一业务诉求各引擎怎么挂以高频诉求「发送前校验 发送后同步外部系统」为例引擎发送前校验常见做法发送后同步常见做法备注Elsa自定义 Activity / 前置逻辑或阻塞前校验服务后续 Activity 调 Http/消息或中间件需自己定义「发送」语义Workflow CoreStep 内校验失败不Outcome到下一步下一 Step 调外部 API或 Step Middleware全代码WorkflowEngine.NETCondition / CodeAction / Action 参数校验Activity Implementation 中挂 Action设计器可配 CodeActionStepWiseStep 方法内抛错/返回失败后续依赖 Step 调用外部系统无审批「发送」概念CCFlow前端SendWhen和/或后端SendWhen和/或事件配置SendSuccess外挂或 WebApi 事件事件名产品化可叠加Slickflow节点前 Action / 本地服务校验ServiceTask本地类 / WebApi / SQLBPMN 节点属性配置再以「自定义一个可复用的流程积木」为例引擎做法强度Elsa官方 Custom Activity 注册到 Feature强Workflow Core新StepBody DI 注册强WorkflowEngine.NETCustom Activity 模板 Plugin强StepWise新[Step]方法强但粒度是方法CCFlow更多是挂事件/业务单元/自定义表单页而非画布新节点类型生态中审批向SlickflowExternalService / 自定义活动扩展视版本中偏强七、综合判断中肯结论7.1 不要用一张「总分表」掩盖场景场景二开视角的相对更优选择原因一句话微服务/领域编排自定义活动库Elsa或 Workflow Core 更轻Module/Activity 扩展是一等公民嵌入现有系统只要状态机Workflow CoreStep Middleware 足够负担最小要强设计器 Action/插件可接受商业许可WorkflowEngine.NET文档与插件模型成熟AI/并行任务步骤不是审批StepWise代码即工作流政企审批要前端也能挂、实施也能配CCFlow三模式 统一事件时钟BPMN 嵌入节点挂 WebApi/本地服务SlickflowServiceTask 路径清晰7.2 二开机制上的「强项地图」非营销排名维度相对突出者公平说明自定义活动/步骤生态Elsa、Workflow Core、WorkflowEngine.NET、StepWise编排类产品的看家本领设计器内写逻辑 / 插件WorkflowEngine.NETCodeActions Plugin 完整审批事件产品化 前后端同协议CCFlow三模式是产品设计不是事后补丁节点多种执行体类/Api/SQL/过程CCFlow、Slickflow、WorkflowEngine.NETBPM/商业引擎常见能力纯开发者最少概念Workflow Core、StepWise代价是产品面薄7.3 对 CCFlow 的公正边界做得好的把「流程二开」定义清楚并用前端外挂、后端外挂、事件配置三条路径落地事件与消息共用时钟但职责分离本仓库有可运行 DemoWGFlow_064、F065、EventDemo。需要承认的若目标是「像 Elsa 一样沉淀跨项目的自定义 Activity NuGet 生态」CCFlow 不是同一叙事它赢在审批生命周期上的业务挂接与低代码配置而不是通用编排积木市场。7.4 选型前建议自问的三句话我的「流程」是审批待办还是服务编排/任务图二开主力是前端、后端还是实施配置能否接受商业许可或自建表单/组织/移动答完这三句六款产品的二开对比基本就不会选错赛道。八、资料来源便于复核产品主要公开来源ElsaCustom Activities、Plugins Modules、Human-in-the-loop 模式Workflow CoreGetting started、Middleware、GitHubWorkflowEngine.NETActions、Plugins、Custom ActivityStepWiseGitHub、官方文档站SlickflowServiceTask 二开示例、API 说明CCFlow本仓库BP.WF/BP.App/BP.En30/Vue3内部文档《流程二开的三种模式》《流程事件》附录与「改引擎」相关的红线通用建议建议说明业务逻辑优先走扩展点事件 / Action / Step / Activity / 外挂避免直接改发送内核升级与补丁成本会指数上升扩展代码独立程序集/目录便于 CI 与多项目复用前端拦截不能代替服务端校验安全与一致性以服务端事件为准文档定位二开机制对比与选型辅助不是性能测试报告也不是商务招标评分表。具体 API 以各产品当期文档与源码为准。

相关新闻