六款 .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 / ServiceTask
D3前端 / UI 扩展设计器、办理页、按钮、表单交互能否外挂Studio 插件、模板、前端外挂
D4配置化集成少写代码能否挂 SQL / WebApi / 过程设计器事件配置、CodeAction、DSL
D5人机审批语义扩展待办、会签、退回等业务语义是否可直接挂业务审批模型 + 事件
D6模块化与可升级性扩展是否可独立部署、少改核插件、程序集扫描、Override

明确不纳入「二开能力」本身、但会影响选型的因素(文末单独提示):许可费用、社区活跃度、是否内置表单/组织门户。这些会影响「能不能用二开把项目做完」,但不是二开机制本身的强弱。

1.3 公平原则(阅读说明)

  1. 定位不同,不能只比「有没有审批」:Elsa / Workflow Core / StepWise 更偏编排;CCFlow / Slickflow 更偏 BPM;WorkflowEngine.NET 偏可嵌入商业引擎。
  2. 「能扩展」≠「开箱就是审批系统」:例如 Elsa 可用 Bookmark 做人工等待,但会签/加签/组织待办通常要自建。
  3. CCFlow 章节结合本仓库源码举证;其余产品以公开文档为准,不臆造未公开能力。
  4. 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前端外挂 / 后端外挂 / 事件配置 三模式中国式审批 / 政企 BPM
SlickflowBPMN 风格 .NET 引擎 + 设计师IExternalService、WebApi、SQL/过程、C# 类库、WorkflowService API标准向嵌入式 BPM 引擎

三、二开能力总对照表(同一维度)

评级口径: = 产品级、文档/样例完整; = 能做但需自建较多; = 基本不覆盖或需从零实现。评级是机制完整性,不是「业务场景总分」。

能力面ElsaWorkflow CoreWorkflowEngine.NETStepWiseCCFlowSlickflow
D1 生命周期挂接强(Activity 执行模型 + Middleware)强(Step + Workflow/Step Middleware)强(Action / Condition / Runtime 事件)中(步骤依赖图,非审批事件时钟)(节点/流程事件清单产品化)强(节点 Action / ServiceTask)
D2 自定义步骤/活动(官方一级能力)StepBody 即扩展单元)(Custom Activity + Action Provider)(方法即 Step,本就代码优先)中偏强(事件/业务单元为主,非「画布积木」叙事)中偏强(ExternalService + 多种执行体)
D3 前端 / UI 扩展中偏强(Studio 元数据 / UIHint,业务办理页多自建)弱(基本无产品级办理 UI)(设计器模板 / Vue 表单可定制)中(自带 WebUI,偏调试执行,非审批工作台)(Vue3 前端外挂 WGFlow_*中(设计师可嵌入,业务页多自建)
D4 配置化集成中(表达式/活动组合强,SQL/实施配置弱于 BPM)中(JSON/YAML 引用 Step 类型)(方案内 CodeActions + 插件)弱(几乎全是代码)(设计器事件 + GenerDBSrc:SQL/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
审批生命周期上挂业务,且前端也能挂CCFlow
BPMN 节点上挂本地服务 / WebApi / SQLSlickflow

四、分引擎:二开机制怎么落地(公开资料摘要)

4.1 Elsa Workflows

内容
核心扩展点Custom Activity(CodeActivity / Activity / Trigger)、Module & Feature、Activity Middleware、Studio 元数据
人机介入Bookmark 阻塞等待;外部系统通过 Resume / HTTP Trigger 恢复;官方有 Human-in-the-loop 模式说明
二开体验对 .NET 开发者极友好;扩展可打成 NuGet;Studio 与运行时对齐是关键
坦诚短板审批会签/组织待办/表单工作台不是开箱能力,多靠自建活动 + 外部应用;V2→V3 无自动迁移,扩展要重写

适合的二开场景:微服务编排、Webhook/长事务、领域自定义活动库。
不太适合指望「只配不写」的:政企审批实施团队纯配置交付。

4.2 Workflow Core

内容
核心扩展点继承 StepBody / StepBodyAsync;DI 注入;IWorkflowMiddleware / IWorkflowStepMiddleware;JSON/YAML DSL 引用 Step 全名
人机介入社区有 Users 等人机相关扩展,但不是完整 BPM 产品面
二开体验极简、嵌入成本低;Step 即业务单元,学习曲线短
坦诚短板几乎没有产品级设计器/表单/待办门户;二开 = 写代码 + 自建 UI

适合:嵌入现有系统做状态机/后台编排。
不适合:指望「设计器 + 事件配置」完成项目交付。

4.3 WorkflowEngine.NET(OptimaJet)

内容
核心扩展点IWorkflowActionProvider(Action/Condition)、方案内 CodeActionsIWorkflowPlugin、Custom Activity(含 HTML/SVG 模板)、规则提供者等
前端扩展设计器模板高度可定制(工具栏、表单、画布元素);可与 React 等集成
二开体验文档完整,插件模型清晰;CodeActions 可在设计器内编译调试
坦诚短板生产许可通常为商业授权(源码可见 ≠ 免费商用);完整 OA(表单/组织/移动)仍需自建或另购生态

适合:要嵌入高质量设计器 + Action 扩展的商业项目。
选型时必须单独评估:许可成本与锁定风险。

4.4 StepWise

内容
核心扩展点类方法 + [Step] / [DependsOn] / [FromStep];引擎自动并行与依赖解析;WebUI 可视化执行;可对接 MCP / AI
二开体验「写方法就是扩展」——对开发者极直接
坦诚短板不是 BPM:无会签/退回/组织待办等审批事件时钟;配置化实施路径弱

适合:数据分析、批处理、AI Agent 步骤流。
误选风险:名字像工作流,但交付审批系统会从零造轮子。

4.5 Slickflow

内容
核心扩展点节点 Action:本地类(ExternalServiceBase + IExternalService)、WebApi、SQL、存储过程、C# 类库;WorkflowService API(Start/Run/Jump/Withdraw/Sendback 等)
二开体验BPMN 语义清晰;ServiceTask 文档对「二次开发」有明确示例;反射约束基类/接口,避免乱挂
坦诚短板表单/门户/组织完整度依赖产品线版本(社区版与商业能力常分层);前端「办理页外挂协议」不如 CCFlow 产品化

适合:要 BPMN + 节点级服务调用、以 API 嵌入业务系统。
相对弱于 CCFlow 的点:前后端统一事件协议、低代码事件配置与表单一体化深度。

4.6 CCFlow(结合本仓库)

内容
核心扩展点三种并列模式:前端外挂、后端外挂、事件配置(详见第五节)
统一调度服务端 ExecEvent:全局拦截 → FlowEventBaseFrmEvents/GenerDBSrc → 消息推送
二开体验事件名产品化(SendWhen / SendSuccess / FlowOverAfter 等);前端与后端认同一套时钟
坦诚短板扩展叙事偏「审批事件挂业务」,不是 Elsa 那种「自定义画布 Activity 生态」;技术栈与约定需学习(WGFlow_FlowMark、程序集扫描)

五、CCFlow 三种二开方式(结合代码)

驰骋 BPM 的主张可以概括为:

流程可以设计出来,业务却不能写进引擎内核。
同一套事件语义,三种写法:前端外挂、后端外挂、事件配置。

5.1 三种模式总览

模式一句话谁写典型载体(本仓库)
前端外挂浏览器侧挂流程脚本前端 / 全栈Vue3/src/bp/UIEntity/WaiGuaBaseFlow.tsVue3/src/App/Demo/WGFlow_*.ts、OverrideFiles
后端外挂服务端强类型事件类后端BP.WF.FlowEventBaseBP.App/Demo/F065.csOverrideEvent
事件配置设计器里配执行体实施 / 低代码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 err@xxxxxxx 则流程不向下发送.
      `;
      return msg;
    }
    return '';
  }

工具栏实际调用链见 Vue3/src/WF/ToolBar.vue(先 SendWhen / beforeSend,服务端成功后再 SendSuccess / afterSend)。

适合不适合单独承担
表单即时校验、按钮定制、成功提示、局部刷新强事务写库、跨系统强一致同步

5.3 模式二:后端外挂

意图:进入服务端生命周期后,用可调试的强类型代码介入;可改跳转节点/接收人,可同步第三方。

基类约定(源码注释原文要点):

  1. 子类重写事件方法与基类交互
  2. 一个子类必须与一个流程模版绑定FlowMark
  3. 基类暴露运行时变量辅助复杂逻辑
  4. 类需进入 BP.*.dll 才能被反射解析

Demo:

    public 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、存储过程、EventBaseBuessUnitBase

业务单元基类说明:

    /// 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.cs
EventBase 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设计器可配 CodeAction
StepWiseStep 方法内抛错/返回失败后续依赖 Step 调用外部系统无审批「发送」概念
CCFlow前端 SendWhen 和/或后端 SendWhen 和/或事件配置SendSuccess 外挂或 WebApi 事件事件名产品化,可叠加
Slickflow节点前 Action / 本地服务校验ServiceTask:本地类 / WebApi / SQLBPMN 节点属性配置

再以「自定义一个可复用的流程积木」为例:

引擎做法强度
Elsa官方 Custom Activity + 注册到 Feature
Workflow CoreStepBody + 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 的公正边界

做得好的:把「流程二开」定义清楚,并用前端外挂、后端外挂、事件配置三条路径落地;事件与消息共用时钟但职责分离;本仓库有可运行 Demo(WGFlow_064F065EventDemo)。

需要承认的:若目标是「像 Elsa 一样沉淀跨项目的自定义 Activity NuGet 生态」,CCFlow 不是同一叙事;它赢在审批生命周期上的业务挂接与低代码配置,而不是通用编排积木市场。

7.4 选型前建议自问的三句话

  1. 我的「流程」是 审批待办,还是 服务编排/任务图
  2. 二开主力是 前端、后端,还是实施配置
  3. 能否接受 商业许可自建表单/组织/移动

答完这三句,六款产品的二开对比基本就不会选错赛道。


八、资料来源(便于复核)

产品主要公开来源
ElsaCustom ActivitiesPlugins & ModulesHuman-in-the-loop 模式
Workflow CoreGetting startedMiddlewareGitHub
WorkflowEngine.NETActionsPluginsCustom Activity
StepWiseGitHub官方文档站
SlickflowServiceTask 二开示例API 说明
CCFlow本仓库 BP.WF / BP.App / BP.En30 / Vue3;内部文档《流程二开的三种模式》《流程事件》

附录:与「改引擎」相关的红线(通用建议)

建议说明
业务逻辑优先走扩展点事件 / Action / Step / Activity / 外挂
避免直接改发送内核升级与补丁成本会指数上升
扩展代码独立程序集/目录便于 CI 与多项目复用
前端拦截不能代替服务端校验安全与一致性以服务端事件为准

文档定位:二开机制对比与选型辅助,不是性能测试报告,也不是商务招标评分表。具体 API 以各产品当期文档与源码为准。

内容概要:本文系统研究了基于CNN-SVM的卷积神经网络与支持向量机融合的数据分类预测方法,聚焦其在工业故障识别中的应用,提供了完整的Matlab代码实现。通过CNN提取输入数据的深层空间特征,再由SVM进行高精度分类,充分发挥两者优势,有效提升了故障识别的准确性、鲁棒性与泛化能力。该方法特别适用于处理电力系统、机械设备等领域的高维、非线性、强噪声监测数据,在变压器故障诊断、轴承缺陷识别等场景中具有重要应用价值。文档还整合了机器学习、深度学习、图像处理、路径规划、电力系统优化等多个前沿科研方向的技术资源,配套大量Matlab/Simulink仿真案例与Python代码,全面支持科研复现与工程实践。; 适合人群:具备一定编程基础,熟练掌握Matlab或Python语言,从事电气工程、自动化、人工智能、机械故障诊断等相关领域研究的研发人员及高校研究生; 使用场景及目标:① 实现工业设备的状态监测与多类别故障分类;② 深入理解CNN与SVM融合模型的设计原理与工程实现细节;③ 借助所提供的丰富算法案例展科研复现、模型优化与系统仿真验证; 阅读建议:建议按照文档目录结构系统化学习,结合百度网盘提供的完整代码资源进行动手实践,重点关注CNN特征提取层与SVM分类器之间的数据接口设计与参数调优策略,同时可延伸学习文中涉及的其他智能算法及其在电力系统、信号处理等领域的交叉应用,全面提升科研创新能力
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驰骋低代码、工作流、表单引擎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值