驰骋 BPM(CCFlow/JFlow)四大运行模式与 Flowable/Camunda 技术对比
一、概述
1.1 驰骋 BPM 的产品定位
驰骋 BPM 由 CCFlow(.NET) 与 JFlow(Java) 双平台构成,是一套流程引擎 + 表单引擎 + 低代码平台的一体化 BPM 产品。与 Flowable/Camunda 这类"纯流程引擎"不同,驰骋在引擎之上内置了组织架构、菜单权限、单据(CCBill)、门户、报表等完整企业应用能力。
代码中通过 Platform 枚举区分运行平台:
public enum Platform
{
/// <summary>
/// CCFlow .net平台.
/// </summary>
CCFlow,
/// <summary>
/// JFlow java 平台.
/// </summary>
JFlow
}
1.2 两个维度的"模式"概念(勿混淆)
| 维度 | 配置项 | 含义 |
|---|---|---|
| 部署/组织模式 | CCBPMRunModel(0/1/2/3) |
单机、集团、SaaS、平台应用 |
| 产品使用模式 | 门户/Middleware vs BPM | 中间件模式 vs 全功能 BPM 模式 |
门户说明(Vue3/src/Portal/readme.txt):
- 中间件模式:客户仅使用流程引擎 + 表单引擎,菜单精简(发起、待办、在途、草稿等)。
- BPM 模式:完整菜单体系、权限管理、低代码设计器,可构建独立业务系统。
本文重点分析 四大运行模式(CCBPMRunModel) 的技术实现,并与 Flowable/Camunda 的多租户/组织架构能力对照。
二、四大运行模式定义与配置
2.1 枚举与配置入口
后端枚举定义(BP.Sys.CCBPMRunModel):
public enum CCBPMRunModel
{
/// <summary>
/// 单机版
/// </summary>
Single,
/// <summary>
/// 集团模式
/// </summary>
GroupInc,
/// <summary>
/// 多租户模式
/// </summary>
SAAS,
/// <summary>
/// 平台应用模式
/// </summary>
PASS
}
app.config 配置项:
<!-- 0=单组织,1=集团,2=SAAS,3=平台应用(PASS) -->
<add key="CCBPMRunModel" value="0"/>
| 值 | 模式 | 英文标识 | 典型场景 |
|---|---|---|---|
| 0 | 单机版 | Single | 单一企业、内网 OA、POC 演示 |
| 1 | 集团版 | GroupInc | 集团总部 + 多家子公司共用一套 BPM |
| 2 | 多租户 SaaS | SAAS | 云 BPM 平台,租户数据强隔离 |
| 3 | 平台应用 | PASS | 云平台上的应用托管模式(CCBPMRunModelReal 识别,部分逻辑仍回落到 Single) |
2.2 安装初始化差异
安装时按模式加载不同组织种子数据 SQL:
sqlscript = BP.Difference.SystemConfig.CCFlowAppPath + "WF/Data/Install/SQLScript/Port_Inc_CH_RunModel_" + (int)SystemConfig.CCBPMRunModel + ".sql";
DBAccess.RunSQLScript(sqlscript);
if (SystemConfig.CCBPMRunModel == CCBPMRunModel.Single)
{
BP.Port.Emp empAdmin = new Emp("admin");
BP.Web.WebUser.SignInOfGener(empAdmin);
}
if (SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
{
BP.WF.Dev2Interface.Port_Login("admin", "100", null);
}
if (SystemConfig.CCBPMRunModel == CCBPMRunModel.GroupInc)
{
BP.WF.Dev2Interface.Port_Login("admin", "100", null);
}
- Single:直接以
admin登录,无多组织概念。 - GroupInc / SAAS:以平台组织
100的admin登录,需选择/切换组织。
三、四大模式技术实现对比
3.1 单机版(Single)
核心特征:无 OrgNo 数据隔离,人员编号全局唯一(如 zhangsan)。
后端实现要点:
SystemConfig.CCBPMRunModel == Single时,SQL 查询不加OrgNo条件。WebUser.RootNo对管理员返回"0",表示无组织根节点概念。- 待办统计、流程查询等直接按
FK_Emp过滤。
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
wfSql = " AND A.OrgNo='" + WebUser.OrgNo + "'";
(Single 模式下 wfSql 为空,不加 OrgNo 过滤。)
前端实现要点:
SystemConfig.CCBPMRunModel来自 Cookie/LocalStorage。- 人员选择、表单树、流程树等 SQL 数据源使用 Single 后缀 的全局查询(见
GloWF.ts中*Single系列 SFTable)。 - 中间件门户不展示集团专属菜单(如"管理组织"、“切换部门”)。
对比 Flowable/Camunda:等价于单租户部署,不启用 tenantId。组织架构需自行对接 IDM 或在应用层维护。
3.2 集团版(GroupInc)
核心特征:一套 BPM 实例服务多个法人/子公司,通过 Port_Org + OrgNo 字段实现逻辑隔离,人员编号在组织内唯一。
数据模型(Port_Inc_CH_RunModel_1.sql 种子数据):
Port_Org:组织主表(如100集团平台、ccs驰骋公司、quanyi泉亿公司)。Port_Dept、Port_Station、Port_Emp均带OrgNo字段。- 人员
No在组织内唯一(如yuwen),跨组织可重复。
后端隔离机制:
- 查询过滤:非 Single 模式在流程、人员、部门查询中追加
OrgNo条件。 - 组织管理员:
Port_OrgAdminer表维护二级管理员;WebUser.IsAdmin按OrgNo判断。 - 集团岗责体系(
GroupStationModel配置):0:每套组织独立角色体系(默认)。1:全集团共享一套岗责体系。2:每个部门独立角色体系。
/// <summary>
/// 集团模式下的角色体系
/// @0=每套组织都有自己的角色体系@1=所有的组织共享一套岗则体系.@2=每个部门有自己的角色体系.
/// </summary>
public static int GroupStationModel
- 找人算法(
FindWorker.cs):按直属领导找人时,GroupInc 追加And OrgNo = '@WebUser.OrgNo'。
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.Single)
sql = "SELECT Leader,FK_Dept FROM Port_Emp WHERE No='" + empNo + "'";
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.GroupInc)
sql = "SELECT Leader,FK_Dept FROM Port_Emp WHERE No='" + empNo + "' And OrgNo = '" + WebUser.OrgNo + "'";
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
sql = "SELECT Leader,FK_Dept FROM Port_Emp WHERE No='" + WebUser.OrgNo + "_" + empNo + "'";
前端实现要点:
- 集团版用户菜单增加"管理组织(AdminOnly)"、“切换部门”(
PopMenuUser.ts)。 - 流程查询、单据搜索在
GroupInc下追加组织过滤(SearchFlow.vue、useSearchBill.ts)。 - 菜单、表单树按
OrgNo隔离:OrgNo='@WebUser.OrgNo'。
对比 Flowable/Camunda:
| 能力 | 驰骋 GroupInc | Flowable | Camunda |
|---|---|---|---|
| 多组织 | Port_Org + OrgNo 字段贯穿全表 |
需自建或借助 Flowable Platform | Camunda 8 有 Tenant 概念 |
| 组织切换 | 内置 Port_Login(user, orgNo) |
无内置 | Tenant 切换需自行实现 |
| 流程定义隔离 | WF_Flow 可按组织复制/共享 |
tenantId 隔离部署 |
tenantId 隔离 |
| 岗责体系 | 内置 Port_Station,支持三种集团策略 |
候选组 candidateGroups |
candidateGroups / Identity Service |
驰骋集团版的优势在于组织、岗责、流程、表单在同一产品内闭环;Flowable/Camunda 需额外集成 Identity/Org 模块。
3.3 多租户 SaaS 版(SAAS)
核心特征:面向云 BPM 平台,租户间强隔离,人员主键采用 {OrgNo}_{UserID} 复合编号。
与集团版的关键差异:
| 项目 | GroupInc | SAAS |
|---|---|---|
| 人员编号 | 组织内唯一,如 yuwen |
全局唯一,如 ccs_yuwen |
| UserID 字段 | 可选 | 必须,存真实登录名 |
| 流程实例 | 部分表加 OrgNo | WF_GenerWorkFlow 等强制 OrgNo |
| 登录 | 选组织后登录 | Port_Login("admin", "100", null) 平台管理员 |
后端实现(Emp.cs):
if (value.StartsWith(BP.Web.WebUser.OrgNo + "_") == true)
{
this.SetValByKey(EmpAttr.UserID, value.Replace(BP.Web.WebUser.OrgNo + "_", ""));
}
else
{
this.SetValByKey(EmpAttr.No, BP.Web.WebUser.OrgNo + "_" + value);
}
SAAS 模式下实体 Map 自动注入隐藏条件 OrgNo = @WebUser.OrgNo(Station.cs、Team.cs 等)。
流程统计统一追加 OrgNo:
public static String Check_CCBPMRunModel()
{
String sql = "";
if (BP.Difference.SystemConfig.CCBPMRunModel == CCBPMRunModel.SAAS)
{
sql += " AND A.OrgNo = '" + WebUser.OrgNo + "'";
}
return sql;
}
前端实现要点:
WebUser.CCBPMRunModel == 2时,审核组件走云 Handler:BP.Cloud.HttpHandler.App。- 用户头像路径含
OrgNo前缀。 - 数据源 SQL 使用
*SaaS后缀版本,按OrgNo过滤。
对比 Flowable/Camunda:
- Flowable:企业版支持 Multi-tenancy(
tenantId贯穿引擎表);开源版需应用层隔离。 - Camunda 8:原生多租户(Tenant),与 Zeebe 集群集成。
- 驰骋 SAAS:租户隔离下沉到全产品线(组织、表单、流程、单据、菜单),不仅是引擎表隔离。
驰骋 SaaS 的不足:OrgNo 多以 SQL 字符串拼接实现隔离,需严格防范 SQL 注入;Flowable/Camunda 的 tenantId 在引擎层有框架级保障。
3.4 平台应用模式(PASS)
核心特征:面向云平台应用商店/托管场景,枚举值为 3,CCBPMRunModelReal 返回 PASS,但 CCBPMRunModel 属性将 0 和 3 均映射为 Single 以兼容旧逻辑。
public static CCBPMRunModel CCBPMRunModelReal
{
get
{
int val = BP.Difference.SystemConfig.GetValByKeyInt("CCBPMRunModel", 0);
if (val == 0 ) return CCBPMRunModel.Single;
if (val == 1) return CCBPMRunModel.GroupInc;
if (val == 2) return CCBPMRunModel.SAAS;
return CCBPMRunModel.PASS;
}
}
public static CCBPMRunModel CCBPMRunModel
{
get
{
int val = BP.Difference.SystemConfig.GetValByKeyInt("CCBPMRunModel", 0);
if (val == 0 || val==3) return CCBPMRunModel.Single;
...
}
}
PASS 模式在代码库中落地较少,前端 SystemConfig.ts 甚至未导出 PASS 枚举,属于演进中的模式,与 SaaS 云平台的应用分发场景配套。
对比 Flowable/Camunda:类似 Camunda SaaS 或 Flowable Cloud 的应用市场 + 租户双层模型,但驰骋 PASS 尚未形成与 Flowable Platform 同量级的独立产品线文档。

160

被折叠的 条评论
为什么被折叠?



