平台之上有表单、流程、大屏,平台之外有关系库与开放接口。本文介绍一种数据源组件的分层做法:连接归连接、定义归定义,并说明该设计适用与不适用的边界。
数据源是该引擎平台中面向业务应用的统一数据组件。单据、实体、流程、门户等上层应用不直接对接第三方系统,而是通过数据源完成数据读取、下拉展示、结果集查询与业务过程调用。
其核心使命可以概括为:
应用层(流程 / 表单 / 大屏 / 低代码)
↕
数据源(枚举 / 字典 / 查询 / 过程)
↕
外部系统(本机库 / 关系数据库 / WebApi)这与官方概念文档中的数据源结构图一致:数据源是应用与外部系统之间的桥梁,将异构的数据获取方式收敛为统一的四类能力。
前端工程采用「树表一体管理页 + 实体定义 + 向导创建 + 后端执行」的分层结构:
前端模块源码目录
├── TreeEns_DBSrc.ts ← 管理入口:左侧树 + 右侧列表
└── FrmLogic/
├── SFDBSrc/ ← 数据源连接(根节点)
│ ├── SFDBSrc.ts ← 基础实体
│ ├── SFDBSrcLocal.ts ← 本机数据源
│ ├── SFDBSrcSQL.ts ← 关系数据库数据源
│ ├── SFDBSrcWebApi.ts ← WebApi 数据源
│ └── GPN_*.ts ← 新建向导
├── SFTable/ ← 字典
├── SFSearch/ ← 查询
├── SFProc/ ← 过程
├── SysEnum/ ← 枚举(仅本机数据源)
└── Sync/ ← 数据同步(基于查询结果落地)对应前端实体 继承 PageBaseTreeEns,是数据源管理的唯一入口页:
层级 | 含义 | 实现方式 |
|---|---|---|
一级节点 | 数据源实例 | 从 平台系统表 表加载,如 local、各 SQL/WebApi 连接 |
二级节点 | 能力分类 | 运行时虚拟构造,非数据库记录 |
右侧列表 | 具体配置项 | 按节点类型切换不同实体集合与列定义 |
每个数据源下固定挂载四类(本机额外含枚举):
数据源(SFDBSrc)
├── 字典(SFTable) nodeID: {srcNo},SFTable
├── 查询(SFSearch) nodeID: {srcNo},Search
├── 过程(SFProc) nodeID: {srcNo},Proc
├── 枚举(SysEnum) nodeID: local,Enums(仅本机)
└── 数据同步(Sync) nodeID: {srcNo},SyncGetDtls(nodeID) 根据节点后缀分发到不同实体,动态调整列与工具栏按钮;BtnClick 统一处理新建、编辑、删除、属性维护等操作,并通过 EnName 参数路由到具体编辑表单。
模块 | 实体类 | 数据表 | 职责 |
|---|---|---|---|
数据源 | 对应前端实体 | 平台系统表 | 连接信息、类型、WebApi 结果转换模式 |
字典 | 对应前端实体 | 平台系统表 | 下拉/树形选项数据定义 |
查询 | 对应前端实体 | 平台系统表 | 参数化结果集查询 |
过程 | 对应前端实体 | 平台系统表 | 参数化执行与返回 |
枚举 | SysEnumMain | 平台系统表 | 整型/字符串常量集合 |
同步 | Sync | 平台系统表 | 将查询结果同步到表或实体 |
所有子能力通过 FK_SFDBSrc(或 DBSrcNo)关联到父数据源;多租户场景下辅以 OrgNo 隔离。
以字典为例,对应前端实体 是统一抽象,具体实现按接入方式拆分:
实现类 | 适用场景 |
|---|---|
对应前端实体 / 对应前端实体 | SQL 编号名称 / 树结构字典 |
对应前端实体 / 对应前端实体 | WebApi 字典 |
EnTableNoName / EnTableTree | 平台实体字典 |
对应前端实体 / 对应前端实体 / 对应前端实体 | 类、Handler、JS 等扩展方式 |
查询(对应前端实体 / 对应前端实体)、过程(对应前端实体 / 对应前端实体)同样遵循此模式。
新建时,对应前端实体 根据数据源类型选择向导:
GPN_LocalGPN_DBSrcSQLGPN_DBSrcWebApi配置完成后,运行时由后端 BP.Sys.* 服务执行:
前端实体.GenerData / BSEntity.DoMethodReturnJSON
↓
后端 BP.Sys.SFTable / SFSearch / SFProc
↓
按 FK_SFDBSrc 选择连接 → 执行 SQL / 调用 WebApi
↓
返回 JSON → 表单下拉 / Pop 填充 / 流程事件表达式支持系统变量与参数占位,例如:
~@Key~、~@WebUser.No~(SQL 字典)@Token、@WebUser.No、@WorkID(WebApi 路径与 POST 体)数据源能力被表单、流程等模块引用式消费,而非硬编码:
UIBindKey 绑定枚举或字典编号AddSln 将返回列智能映射到表单字段(对应前端实体)以下定义与官方数据源文档保持一致。
类型 | 说明 | 典型用途 |
|---|---|---|
本机数据源 | 该引擎默认数据库,local 为内置编号 | 枚举、系统字典、平台内表数据 |
关系数据库数据源 | 通过连接串访问外部 RDBMS | ERP、历史库、报表库 |
WebApi 数据源 | 通过 HTTP 协议与参数获取数据 | 第三方 SaaS、微服务、开放接口 |
用户定义的命名常量集合,由一组整型或字符串键值组成。
0=女、1=男;政治面貌 0=群众、1=团员、2=党员MapAttr.UIBindKey 引用,防止破坏已发布表单用于下拉框、级联选择、树形选择的数据结构。
结构 | 字段要求 | 示例 |
|---|---|---|
编码字典 | 编号 + 名称 | 城市、角色类型、产品类型 |
树结构字典 | 编号 + 名称 + 父节点编号 | 部门、菜单、分类 |
支持无参/有参;有参时通过 SelectStatement 中的占位符实现级联,如按省份过滤城市。
输入参数,返回结果集。
类型 | 说明 | 示例 |
|---|---|---|
实体查询(单行) | ResultNum = 1 | 按客户编号取客户详情 |
集合查询(多行) | ResultNum = 0 | 人员列表、车辆台账、客户关系表 |
支持参数定义(对应前端实体)、返回列定义(对应前端实体)及与表单字段的映射方案。
输入参数,执行并返回结果,侧重「动作」而非「读取」。
以已配置的查询为数据来源,按规则写入:
GPE_AutoSync)场景 | 说明 |
|---|---|
表单下拉字段 | 性别、状态、审批结果等固定选项 |
流程条件判断 | 按枚举值分支 |
列表显示翻译 | 将存储值转为可读标签 |
大屏图例 / 状态色 | 配合 EnableColor 做可视化区分 |
特点:值域稳定、变更少、无需访问外部系统,适合本机维护。
场景 | 说明 |
|---|---|
表单下拉框 | 部门、岗位、产品类型 |
级联下拉 | 省 → 市 → 区,一级选项驱动下一级 SQL/API |
树形选择器 | 组织架构、产品分类 |
接收人规则 | 流程按部门/角色字典解析处理人 |
外部主数据 | 通过 WebApi 字典对接第三方编码表 |
特点:选项来自业务主数据,可能随组织、权限、上下文变化;支持动态参数。
场景 | 说明 |
|---|---|
Pop 弹窗选择 | 从客户/物料库中选一条或多条 |
装载填充 | 选客户后自动带出地址、联系人 |
从表填充 | 主表选订单,从表加载明细行 |
实体查询 | 根据单号加载一条完整业务记录 |
大屏 / 报表数据源 | 多行集合查询驱动图表与列表 |
数据同步源 | Sync 模块的数据输入 |
特点:面向读,返回结构化数据集;实体查询与集合查询分别服务「详情回填」与「列表展示」。
场景 | 说明 |
|---|---|
流程节点事件 | 审批通过后调用 ERP 过账接口 |
流程结束事件 | 触发库存扣减、积分变更 |
表单按钮 | 保存前校验、作废、密码修改 |
与外部系统写操作 | 创建第三方工单、注销账户 |
特点:面向写/执行,强调副作用与事务性操作;参数通常来自表单字段或流程上下文。
请假流程
├── 枚举:请假类型(事假/病假/年假)
├── 字典:申请人部门(树结构,本机 SQL)
├── 查询:年假余额(实体查询,按工号返回剩余天数)
└── 过程:同步考勤系统(WebApi POST,流程结束时调用)流程、表单、大屏只需认识「枚举 / 字典 / 查询 / 过程」四类接口,无需关心底层是 SQL 还是 HTTP。更换对接方式时,多数情况下只需调整数据源配置,上层绑定关系可保持不变。
对应前端实体 管理连接,对应前端实体 / 对应前端实体 / 对应前端实体 管理业务语义。同一 ERP 连接下可配置 dozens 个字典与查询,避免连接信息重复维护。
通过 EnName + 独立实体类(如 对应前端实体、对应前端实体)实现编辑表单的差异化,公共字段收敛在基类实体,扩展新型接入时模式可复制。
统一支持 ~@Key~、@WebUser.No、@Token、@WorkID 等占位符,使级联、权限过滤、流程上下文传递可在配置层完成,减少定制代码。
AddSln 可自动映射到表单字段FK_Val),加速表单设计OrgNo 贯穿字典、查询、过程、同步;枚举在集团/SAAS 模式下支持组织隔离与共享策略。
二级节点(字典/查询/过程等)并非数据库记录,而是由 TreeEns_DBSrc.Init 动态 push 生成,nodeID 采用 {srcNo},{Type} 字符串拼接。
includes('SFTable') 等字符串判断中,扩展新分类需改多处编辑入口依赖实体 AtPara.EnName 字段定位具体表单类,缺失时报「数据错误」。
ItemType外部系统的码表只能通过字典(WebApi/SQL)模拟,无法使用枚举的轻量配置与颜色能力。
SQL 语句、API 路径、POST JSON、参数别名需同时掌握,对实施人员要求较高。
TestParas 用例(现有能力可进一步产品化)Sync 强依赖 对应前端实体 作为数据源,无法直接从字典或过程同步。
部分 GetDtls 分支存在连续两次 Retrieve 调用(如过程、查询节点),属于可优化的实现细节。
对于实施团队:枚举管常量、字典管选项、查询管数据集、过程管动作——按此分工配置,即可覆盖绝大多数表单与流程的数据交互需求。对于架构评审:优势在于抽象统一与低代码亲和;代价在于配置复杂度与 UI 层虚拟树的可维护性,需在文档、测试工具与类型注册方面持续加强。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。