四大菜单与三大处理器-驰骋BPM与Flowable-Camunda-Activiti任务交互层对比

四大菜单与三大处理器:驰骋 BPM 与 Flowable / Camunda / Activiti 的任务交互层对比

分享定位:一次面向研发与架构同学的技术分享稿,聚焦「用户怎么进入流程、怎么办理、怎么查看」。
原文依据JFlow Wiki《菜单与功能页面》
代码依据:本仓库 CCFlow/Components/BP.WF(.NET)、JFlow/jflow-core(Java)、Vue3/src/WF(前端)
对比对象:Activiti、Flowable、Camunda(三者同属 BPMN 2.0 执行语义一脉,下文合称「Activiti 系」时会单独指出差异)
评价原则:场景匹配优先,不做「谁全面更好」的笼统结论。


0. 先说结论(分享开场 30 秒版)

BPM 产品对用户暴露的第一层界面,通常就是:

用户意图驰骋 BPM 产品化命名Activiti 系常见落地
我能发起什么发起菜单Startable Process Definitions
我要办什么待办菜单Task Query / Tasklist
我参与过、还在跑的在途菜单Involved / Started Process Instances
让我知晓、不参与决策抄送菜单无标准一等公民,需扩展或外挂

驰骋把上述能力沉淀为 四大菜单 + 三大处理器,并给出稳定 API 与页面入口;Activiti / Flowable / Camunda 把能力沉在 引擎任务/执行/历史查询 API,交互页多由业务方或 Tasklist / Cockpit / Operate 等运维/任务产品补齐。

差异本质不是「有没有待办」,而是:

  • 驰骋:任务交互层是产品内核,表单、工具栏、抄送、在途撤销/催办与流程引擎一体交付。
  • Activiti 系:流程执行层是产品内核,任务交互层通常需要二次组装(尤其是中国式审批语义)。

1. Wiki 原文在讲什么

原文把 BPM 前端交互抽象成两层:

1.1 四大流程菜单

  1. 发起 —— 当前人可启动的流程列表
  2. 待办 —— 别人(或设备)发给我、需要我处理的工作
  3. 在途 —— 我参与过、流程未结束、且当前待办不在我身上
  4. 抄送 —— 让我知晓,但我不干涉流转决策

每个菜单背后是一份列表数据;列表可由 API 获取,前端可自绘风格。

1.2 三大处理器

处理器上游菜单职责
工作处理器发起 / 待办办理:工具栏 + 表单区 + 审核组件
工作查看器在途(及已完成查看)查看进展:催办、撤销发送、打印、轨迹
抄送处理器抄送知晓:打印、轨迹等只读类操作

菜单决定「进哪张列表」,处理器决定「打开后能干什么」。

1.3 菜单与处理器的对应关系

发起/待办 ──► 工作处理器(MyFlow)──► 发送 / 退回 / 移交 / 加签 …
在途/完成 ──► 工作查看器(MyView)──► 催办 / 撤销 / 打印 / 轨迹
抄送     ──► 抄送处理器(MyCC) ──► 打印 / 轨迹(默认不改流转)

2. 驰骋 BPM 在代码里如何落地

CCFlow(.NET)与 JFlow(Java)功能等价;以下以本仓库 CCFlow 路径举例,JFlow 有同名 API。

2.1 四大菜单 ↔ 列表 API

Wiki 给出的映射如下:

菜单API代码位置
发起BP.WF.Dev2Interface.DB_GenerCanStartFlowsOfDataTable / DB_StarFlowsCCFlow/Components/BP.WF/Dev2Interface.cs
待办BP.WF.Dev2Interface.DB_GenerEmpWorksOfDataTable同上
在途BP.WF.Dev2Interface.DB_GenerRuning同上
抄送BP.WF.Dev2Interface.DB_CCList同上

待办实现直接查询 WF_EmpWorks(由 WF_GenerWorkFlowWF_GenerWorkerList、抄送等组装的待办视图),并支持授权待办 UNION

        public static DataTable DB_GenerEmpWorksOfDataTable(string userNo,
            int nodeID = 0, string wfstate = null, string domain = null, string flowNo = null, string isRead = null, string orderBy = "ADT")
        {
            // ...
            if (BP.WF.Glo.IsEnableTaskPool == true)
                sql = "SELECT  A.*, null as Auther, null as AutherName FROM WF_EmpWorks A WHERE A.WFState >1 AND  TaskSta=0 AND A.FK_Emp='" + userNo + "' " + whereSQL + readSQL;
            else
                sql = "SELECT  A.*, null as Auther, null as AutherName FROM WF_EmpWorks A WHERE A.WFState >1 AND A.FK_Emp='" + userNo + "' " + whereSQL + readSQL;

抄送则读写 WF_CCList,与流程实例 WF_GenerWorkFlow 关联:

        public static DataTable DB_CCList(string domain = null, string fk_flow = null)
        {
            // ...
            ps.SQL = "SELECT a.MyPK,A.Title,A.FlowNo as FK_Flow,A.FlowName,A.WorkID,'' as Doc,A.RecEmpNo as Rec,A.RecEmpName as RecName,A.RDT,A.FID,A.NodeIDCC AS FK_Node,A.NodeIDCCName AS NodeName,B.WFSta,A.Sta,A.NodeIDCC,A.NodeIDCCName,B.AtPara FROM WF_CCList A, WF_GenerWorkFlow B WHERE A.CCTo=" + BP.Difference.SystemConfig.AppCenterDBVarStr + "CCTo AND B.WorkID=A.WorkID AND A.Sta >=0  ORDER BY RDT DESC ";

发起侧通过开始节点访问规则视图(如 V_FlowStarterBPM)决定「谁能启动哪条流程」,不是简单的「部署即人人可启」。

2.2 三大处理器 ↔ 页面入口

处理器H5 入口(Wiki)Vue3 路由(本仓库)后端入口
工作处理器/WF/MyFlow.htm?FK_Flow=…&WorkID=…&FK_Node=…Vue3/src/WF/MyFlow.vue + wf.tsHttpHandler/WF_MyFlow.csMyFlow_Init / InitToolBar
工作查看器/WF/MyView.htm?…Vue3/src/WF/MyView.vue对应 MyView Handler
抄送处理器/WF/MyCC.htm?…Vue3/src/WF/MyCC.vue对应 MyCC Handler

前端菜单列表页也已产品化,例如:

    {
      path: 'GL/Start',
      name: 'GLStart',
      component: () => import('/@/WF/views/GenerList.vue'),
      meta: { title: '发起', EnName: 'GL_Start' },
    },
    {
      path: 'GL/TodoList',
      name: 'GLTodoList',
      component: () => import('/@/WF/views/GenerList.vue'),
      meta: { title: '待办', EnName: 'GL_Todolist' },
    },
    // ...
    {
      path: 'GL/Running',
      name: 'GLRunning',
      component: () => import('/@/WF/views/GenerList.vue'),
      meta: { title: '在途', EnName: 'GL_Runing' },
    },

工作处理器内部三块结构(与 Wiki 一致):

  1. 工具栏:发送、退回、移交、加签等运行控制(WF_MyFlow.InitToolBar
  2. 表单区:CCForm / 嵌入式表单 / 树表单等
  3. 审核组件:意见与审核信息展示

待办打开处理器时,Wiki 强调四个关键参数:Title / WorkID / FK_Flow / FK_Node(另有 FID 用于分合流/子线程)。这与 Activiti 系的 taskId + processInstanceId 定位方式不同——驰骋更偏「节点 + 工作 ID」导航。

2.3 在途的业务语义(值得单独强调)

Wiki 对「在途」给出三个条件:

  1. 我经手过(含我发起、我审批)
  2. 流程未完成
  3. 当前待办不在我身上

在途页常见操作:

  • 撤销发送:把已发出工作按规则取回
  • 催办:通知当前待办人(Flow_DoPress
  • 打印 / 轨迹图

这套语义在中国审批系统里出现频率很高;在纯 BPMN 引擎里通常要组合「历史活动查询 + 自定义权限 + 自定义操作服务」。

2.4 扩展菜单(Wiki 后半段)

除四大菜单外,原文还列出:我的关注、授权待办、批处理、任务池、取回审批、草稿、挂起等。它们同样挂在 Dev2Interface 的列表/操作 API 上,属于同一交互层产品包,而不是零散脚本。


3. Activiti / Flowable / Camunda:同一问题怎么解

Activiti、Flowable、Camunda 同源(Activiti 拆分后形成 Flowable;Camunda 早期 fork Activiti,Camunda 8 转向 Zeebe)。对「菜单 + 处理器」这一层,它们的共同点多于差异。

3.1 能力映射(概念对照)

驰骋概念ActivitiFlowableCamunda 7 / 8
发起列表RepositoryService + startable 权限类似 + IdentityLinkC7:StartProcessInstance;C8:Operate/Tasklist + Zeebe client
待办列表TaskService.createTaskQuery().taskAssignee / taskCandidate…同左,API 更完整C7:TaskService;C8:Tasklist / user tasks
在途(我参与未结束)HistoryService + Runtime 组合过滤同左C7:历史/运行查询;C8:Operate 查询
抄送无标准模型无标准模型(可用 identity link / 自定义表)无标准模型(常见自建抄送表或消息)
工作处理器自研 Task Form UIFlowable Task App / 自研Camunda Forms / Tasklist / 自研
工作查看器自研 + Cockpit(偏运维)Admin App / 自研Cockpit / Operate(偏运维与排障)
表单一体弱(外挂为主)Flowable Forms(能力有限)Camunda Forms / 外挂

3.2 三者之间的细微差别(公平说明)

维度ActivitiFlowableCamunda
产品定位开源引擎内核开源 BPM 套件(引擎+部分应用)流程编排与运维产品线更完整(C7→C8)
任务应用成熟度低,多为自研中,有 Task/Admin 应用高,Tasklist / Cockpit / Operate
表单外挂为主有 Forms,复杂审批仍常外挂Forms + 外部 UI 常见
中国审批语义(退回重走、会签、加签、抄送)均需扩展均需扩展均需扩展
标准合规 / 云原生编排BPMN 执行BPMN 执行C7 BPMN;C8 Zeebe 更偏高吞吐编排
嵌入业务系统成本需自建菜单与页面可部分复用官方 App,定制仍重官方组件更全,但仍是「任务/运维视角」

要点:在「四大菜单」这一产品抽象上,Activiti / Flowable / Camunda 并没有与驰骋一一对应的开箱菜单包;它们提供的是可查询的任务与实例模型。

3.3 典型 API 形态对比(伪代码级)

驰骋:一个菜单 ≈ 一个列表 API

发起 = DB_GenerCanStartFlowsOfDataTable(user)
待办 = DB_GenerEmpWorksOfDataTable(user)
在途 = DB_GenerRuning(user)
抄送 = DB_CCList()
打开办理 = MyFlow?FK_Flow&WorkID&FK_Node

Activiti 系:一个菜单 ≈ 多次查询 + 业务拼装

发起 = repositoryService.createProcessDefinitionQuery()
        .startableByUser(user).latestVersion().list()
待办 = taskService.createTaskQuery()
        .taskAssignee(user)  // 还要并 candidateUser / candidateGroup
        .list()
在途 = historyService.createHistoricProcessInstanceQuery()
        .involvedUser(user).unfinished().list()
        // 再排除「当前 assignee 是我」的实例 —— 需业务过滤
抄送 = 自定义表 / 自定义 identity link / 消息中心
打开办理 = 自研 Task Page(taskId) + 外挂表单

因此:引擎能力并不缺「查任务」,缺的是 「在途三条件」「抄送一等公民」「处理器三件套」这类产品约定


4. 实现差异拆解(分享正文重点)

4.1 交互层是产品还是框架

维度驰骋 CCFlow/JFlowActiviti / Flowable / Camunda
菜单模型产品级固定抽象(四大菜单)无统一「四大菜单」规范
页面模型MyFlow / MyView / MyCC 固定角色Task UI / 运维台 / 自研页
集成方式列表 API + 页面 URL/路由嵌入REST/Java API + 自建前端
表单与处理器同屏,一等公民多数项目外挂业务表单
工具栏动作节点按钮配置驱动(发送/退回/…)完成任务 + Listener/Delegate 扩展

4.2 数据模型差异如何影响菜单实现

  • 驰骋:待办围绕 WF_GenerWorkerList / WF_EmpWorks,字段已冗余标题、节点名、人员名,列表 SQL 可直出。
  • Activiti 系:待办围绕 ACT_RU_TASK(或 C8 user task),标题/业务字段常在变量或外部业务表,列表往往要二次拼装。

这导致:

  • 驰骋更适合「领导要看列表、顾问能写 SQL、实施要快上线」的交付模式。
  • Activiti 系更适合「引擎标准执行、业务数据严格外置、微服务拆分」的架构模式。

4.3 「在途」与「抄送」:最容易被低估的差异

能力驰骋Activiti 系
在途三条件产品定义清晰,API 直接返回需 History + Runtime + 业务过滤
在途撤销 / 催办查看器内置操作需自定义命令与权限模型
抄送WF_CCList + MyCC 处理器非 BPMN 标准概念,各自实现

若选型评审只对比「能不能 complete task」,会低估这一层工作量。

4.4 处理器内部:办理页到底交付了什么

驰骋工作处理器默认交付:

  • 流程运行控制(工具栏)
  • 表单呈现与字段权限
  • 审核意见组件

Activiti 系默认交付:

  • 任务认领 / 完成 / 委派等引擎动作
  • 表单与审核 UI 多数自建
  • 运维观察更多在 Cockpit / Operate,不等于业务「工作查看器」

二者都正确,但交付边界不同。


5. 优缺点对照(尽量去掉感情色彩)

5.1 驰骋 BPM(四大菜单 + 三大处理器路线)

优势

  • 交互层抽象稳定,嵌入门户成本低(API + 现成页面)。
  • 表单、抄送、在途操作与办理页一体,中国审批场景交付路径短。
  • 列表字段面向业务可读,实施与报表友好。

代价 / 约束

  • 自研流程模型,BPMN 标准互操作、模型交换不是强项。
  • 执行语义与 Activiti 系 Token/Gateway 体系不同,跨引擎人才经验不能直接复用。
  • 超高并发、云原生编排、复杂服务编排场景,需要额外架构评估。

5.2 Activiti / Flowable / Camunda

优势

  • BPMN(及 Camunda 8 编排)标准清晰,全球生态与资料多。
  • 任务、执行、历史、作业、事件模型完整,适合深度定制引擎行为。
  • Camunda 在运维可观测、Flowable 在开源套件完整度上各有积累。

代价 / 约束

  • 「发起/待办/在途/抄送 + 办理/查看/抄送页」通常要项目组自己产品化。
  • 中国特色审批(退回策略、加签、会签权重、抄送处理器)普遍要扩展。
  • 表单与组织模型往往另建系统,总体集成面更大。

5.3 Activiti、Flowable、Camunda 三者怎么选(仅就交互层)

若你的重点是…更常见选择
只要轻量引擎内核,UI 全自研Activiti 或 Flowable Engine
开源套件 + 可接受部分官方 AppFlowable
强运维台、流程平台化、后续云原生编排Camunda
中国政企审批门户快速嵌入、表单一体驰骋 CCFlow/JFlow

6. 选型建议(分享收尾用)

可以用三个问题做快速判断:

  1. 你要买的是「办理体验产品」还是「流程执行引擎」?

    • 前者更贴近驰骋的四大菜单 / 三大处理器。
    • 后者更贴近 Activiti / Flowable / Camunda。
  2. 抄送、在途撤销/催办、节点工具栏、表单字段权限,是不是刚需?

    • 是:优先评估驰骋开箱能力。
    • 否、且以服务编排/标准 BPMN 为主:优先评估 Activiti 系。
  3. 团队现有技能在哪?

    • 熟悉 .NET/Java + 国内实施交付:驰骋上手路径短。
    • 熟悉 BPMN、Listener、外部 Task、云原生:Activiti 系更顺。

混合架构也常见:人审门户用驰骋交互层,或业务审批用驰骋;长流程服务编排用 Camunda/Flowable。关键是不要在同一条审批链上混用两套待办语义。


7. 附录

7.1 Wiki 原文 API / URL 速查

发起: Dev2Interface.DB_GenerCanStartFlowsOfDataTable()
待办: Dev2Interface.DB_GenerEmpWorksOfDataTable()
在途: Dev2Interface.DB_GenerRuning()
抄送: Dev2Interface.DB_CCList()

H5:
  发起/待办办理: /WF/MyFlow.htm?FK_Flow=001[&WorkID=&FK_Node=]
  查看器:       /WF/MyView.htm?FK_Flow=001&WorkID=…
  抄送处理器:   /WF/MyCC.htm?FK_Flow=001&WorkID=…

现成列表页: /WF/Start.htm, /WF/Todolist.htm, /WF/Runing.htm, /WF/CC.htm

7.2 本仓库关键文件索引

主题路径
列表与操作 APICCFlow/Components/BP.WF/Dev2Interface.cs
工作处理器后端CCFlow/Components/BP.WF/HttpHandler/WF_MyFlow.cs
工作者/待办模型CCFlow/Components/BP.WF/WF/GenerWorkerList.cs
Vue 办理/查看/抄送Vue3/src/WF/MyFlow.vueMyView.vueMyCC.vue
四大菜单路由Vue3/src/router/routes/modules/wf.ts
Java 等价实现JFlow/jflow-core/.../Dev2Interface.java

7.3 参考链接


8. 一句话收束

驰骋把「发起、待办、在途、抄送」做成了可嵌入的产品契约;Activiti / Flowable / Camunda 把「任务、执行、历史」做成了可组合的引擎契约。
选谁,取决于你缺的是交互产品,还是标准执行引擎——两者解决的是相邻但不同的问题。

内容概要:本文针对离网光伏直流微网中存在的功率供需失衡问题,提出一种基于光伏最大功率点跟踪(MPPT)锂离子储能系统双向削峰填谷协同控制的抑制机制。通过在Simulink中构建完整的光伏储能直流系统仿真模型,涵盖PV光伏阵列、Boost DC-DC变换器、负载、双向DC-DC变换器及锂离子电池系统,实现对系统能量流动的精确建模动态调控。研究核心在于协调MPPT高效捕捉光伏出力储能系统快速响应负荷波动的能力,提升系统在光照强度变化和负载突变等动态工况下的运行稳定性供电质量,有效缓解因光伏出力间歇性负荷不确定性引发的母线电压波动和能量损耗问题。该方法为离网微网的能量管理提供了理论支持仿真验证平台。; 适合人群:具备电力电子、新能源系统或自动控制等相关专业知识背景,从事微电网、光伏储能系统研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于离网型直流微网能量管理系统的设计优化;②支撑高比例可再生能源接入场景下的稳定运行控制策略研究;③为MPPT储能协同控制策略提供仿真验证手段;④适用于科研项目攻关、学术论文复现实际控制系统开发。; 阅读建议:建议结合Simulink仿真模型控制算法代码同步学习,重点关注MPPT算法实现、双向DC-DC变换器的控制逻辑以及储能系统充放电策略的设计细节,宜在不同工况下进行仿真实验参数调试,以深入掌握系统的动态响应特性控制性能。
内容概要:本文提出了一种基于神经网络的数据驱动迭代学习控制(ILC)算法,专门针对具有未知动态模型和重复作业特征的非线性单输入单输出(SISO)离散时间系统,应用于无人车路径跟踪控制问题,并配套提供了完整的Matlab代码实现。该方法巧妙融合了神经网络强大的非线性逼近能力迭代学习控制在重复任务中不断提升精度的优势,能够在缺乏精确系统数学模型的情况下,通过多次运行迭代自主优化控制输入序列,显著提高路径跟踪的准确性鲁棒性。文章不仅展示了核心算法的设计实现,还列举了涵盖机器学习、深度学习、图像处理、路径规划、电力系统优化等多个前沿科研领域的技术资源,凸显其在智能控制系统仿真科研创新中的广泛适用性和实用价值。; 适合人群:具备自动控制理论、机器人学或智能系统相关背景,正在从事科研或工程开发工作的研究生、科研人员及技术研发工程师;熟悉Matlab/Simulink编程环境者将更易于上手和深入理解。; 使用场景及目标:①应用于无人车、移动机器人等在重复轨迹任务下的高精度路径跟踪控制,特别适用于系统模型难以精确建模但任务周期性重复的实际场景;②作为数据驱动型智能控制算法的教学实验平台,帮助研究人员深入理解神经网络ILC的协同机制,推动先进控制策略的自主创新;③为科研工作者提供可复现的算法范例,加速控制理论研究成果的验证转化,提升科研效率。; 阅读建议:建议结合所提供的Matlab代码逐模块分析算法实现流程,重点剖析神经网络如何ILC框架集成以实现误差补偿控制律更新,并尝试在不同路径场景下调试参数以观察控制性能变化,同时可参考文中提及的其他技术方向拓展研究思路,实现跨领域融合创新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

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

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

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

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

打赏作者

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

抵扣说明:

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

余额充值