Skip to main content

数据源组件

数据源组件(DbDataSource)用于动态生成下拉选项数据,支持实体、人员、组织、身份、角色、数据字典、静态数据与中国行政区划等多种类型。

概述​

数据源组件负责「取选项」:根据所选的数据源类型查询对应的数据集合,返回可供下拉框、选择器等使用的选项列表(通常为 label / value 结构)。它既可以在流程中把数据源结果输出给后续组件,也可以配合表达式完成级联取值。

不同类型的数据源拥有各自的专属配置项,组件会根据所选类型动态显示对应的字段。生成的选项也可被前端的下拉、搜索、表单选择等场景复用(详见 系统内置数据源)。

配置项​

配置项说明
数据源类型选择数据源种类,必填,决定下方显示的专属字段
数据结构「组织数据源」「中国行政区划」等类型下配置,列表或树形
响应方式查询结果的返回方式

数据源类型取值​

界面名称值(DsType)说明
实体数据源0按实体对象取数(缺省)
人员数据源1取人员选项
组织数据源2取组织选项
身份数据源3取身份选项
角色数据源4取角色选项
数据字典5取数据字典项
静态数据源9使用配置的静态 JSON 作为选项
中国行政区划10取行政区划数据

数据结构取值​

仅「组织数据源」与「中国行政区划」显示:

界面名称值(DataStructure)说明
列表0平铺列表(缺省)
树形1层级树形结构

响应方式取值​

界面名称值(ResponseMode)说明
分页0分页返回(缺省)
不分页1返回全部匹配数据
响应匹配数据(不分页)2返回全部匹配数据,不分页

各类型专属配置​

实体数据源(DsType = 0)​

配置项说明
操作对象取数的实体对象,必填
显示字段用作选项名称的字段,必填
默认条件筛选条件,使用基础 / 高级模式,默认过滤已删除数据
排序选项的默认排序规则

人员数据源(DsType = 1)​

配置项说明
用户过滤类型人员范围过滤,必填,取值 0 / 1
用户显示格式人员名称的展示格式,必填,取值 0~7
默认条件筛选条件,支持基础 / 高级模式

用户显示格式取值(服务端据此拼接 label):

值(UserDisplayType)说明
0跟随系统用户显示格式(缺省)
1姓名
2邮箱
3工号
4姓名(工号)
5姓名(邮箱)
6手机号
7姓名(手机号)

组织数据源(DsType = 2)​

配置项说明
组织过滤类型组织范围过滤,必填,取值 0~3
组织类型过滤指定的组织类型,可多选
数据结构列表 / 树形

组织过滤类型取值:

值(OrganizationFilterType)说明
0全部组织(缺省)
1仅 MOU 权限内的组织(启用)
2MOU 权限内的组织 + 所处组织及下级组织(启用)
3所处组织及下级组织(启用)

身份 / 角色数据源(DsType = 3 / 4)​

身份数据源配置「身份类型」:

值(ProfileType)说明
0全部身份(缺省)
1业务身份(排除系统预置身份)

数据字典数据源(DsType = 5)​

配置项说明
数据字典要取数的数据字典,必填

静态数据源(DsType = 9)​

静态数据源直接填写 JSON 数组作为选项,缺省模板:

[
{ "label": "Title 1", "value": "value1" },
{ "label": "Title 2", "value": "value2" }
]

中国行政区划(DsType = 10)​

配置项说明
行政区划层级返回的行政层级范围,必填,缺省为「省级」
数据结构列表 / 树形

行政区划层级取值:

值(ChinaAdministrativeDivisionDataSourceType)说明
provinces_municipalities_counties_street省 / 市 / 县 / 街道
provinces_municipalities_counties省 / 市 / 县
provinces_municipalities省 / 市
provinces省(缺省)
municipalities直辖市

使用场景​

  • 表单 / 视图中的下拉选项
  • 级联数据加载
  • 关联对象的选项查询
  • 规则或脚本中取辅助数据

下一步​

属性明细​

以下内容面向技术实现与 AI 检索,说明数据源组件的节点元数据。

所有节点 meta 的取值均以字符串形式存储,数值、布尔值也以字符串表达(如 "0"、"true")。

节点元数据​

数据源组件由 FlowCmpType.DbDataSource 标识:

属性名类型含义取值/存储值
typestring组件类型固定为 "DbDataSource"
DsTypestring数据源类型"0"(缺省)、"1"~"5"、"9"、"10"
MetaObjectIdstring(GUID)实体数据源的操作对象仅 DsType = 0 使用
DisplayFieldstring显示字段编码仅 DsType = 0 使用
DefaultFilterstring(JSON)高级模式条件DsType = 0 / 1 使用
BasicFilterstring(JSON)基础模式条件DsType = 0 / 1 使用
ConditionModestring条件编辑模式"basic"(缺省)/ "advanced"
Sortstring(JSON)排序规则仅 DsType = 0 使用
UserFilterTypestring用户过滤类型DsType = 1,"0"(缺省)/ "1"
UserDisplayTypestring用户显示格式DsType = 1,"0"(缺省)~"7"
OrganizationFilterTypestring组织过滤类型DsType = 2,"0"(缺省)~"3"
OrganizationCategorystring组织类型编码列表DsType = 2,逗号分隔
ProfileTypestring身份类型DsType = 3,"0"(缺省)/ "1"
DataDictionaryIdstring(GUID)数据字典主键DsType = 5
JsonScriptstring(JSON)静态数据DsType = 9,JSON 数组字符串
ChinaAdministrativeDivisionDataSourceTypestring行政区划层级DsType = 10
DataStructurestring数据结构DsType = 2 / 10,"0"(缺省)/ "1"
ResponseModestring响应方式"0"(缺省)/ "1" / "2"
IsFinalResultstring(bool)是否输出到最终结果"true" / "false"
orderstring同级排序例:"10"

元数据存储示例​

实体数据源:

{
"ID": "ds1",
"type": "DbDataSource",
"DsType": "0",
"MetaObjectId": "3f9c0b2e-2d3a-4e6f-9c11-0f7a5b8d2e10",
"DisplayField": "Name",
"ConditionMode": "basic",
"DataStructure": "0",
"ResponseMode": "0",
"order": "10"
}

静态数据源:

{
"type": "DbDataSource",
"DsType": "9",
"JsonScript": "[{\"label\":\"是\",\"value\":\"1\"},{\"label\":\"否\",\"value\":\"0\"}]"
}

服务端执行逻辑​

执行时机与场景​

数据源组件继承自 TriggerComponentManagerBase,既可运行在平台接口链路中把选项结果传递给下游组件,也可运行在实体触发器链路中(触发链路会额外做节点级执行追踪)。它不写入业务数据,只负责「产出一组选项」。

组件在启动阶段做结构校验,在执行阶段按类型分派到对应数据源服务取数,因此不同类型走的是彼此独立的查询实现。

输入参数(meta 键)​

组件从 context.CurrentNode.Meta 读取以下键,全部按字符串比较:

meta 键使用类型说明
DsType全部缺省 "0"
MetaObjectId0实体对象主键
DisplayField0显示字段编码,Trim 后不可为空
DefaultFilter / BasicFilter0、1两类条件各自存储,互不覆盖
ConditionMode0、1"basic" 读 BasicFilter,"advanced" 读 DefaultFilter
Sort0排序字典 JSON
UserFilterType1"1" 时按 MOU 部门过滤
UserDisplayType1决定 label 拼接格式
OrganizationFilterType2组织范围
OrganizationCategory2组织分类编码,逗号分隔
ProfileType3"1" 时排除系统预置身份
DataDictionaryId5数据字典主键
JsonScript9静态选项 JSON 数组
ChinaAdministrativeDivisionDataSourceType10行政层级
DataStructure2、10"1" 走树形服务
ResponseMode全部"2" 返回全部匹配数据
IsFinalResult全部是否写入最终结果

此外,执行期还读取请求端的 request.Label、request.Value、request.Condition、request.Sort,以及组织服务的 request.Extend 中的 TranslatePah、NameIncludeCode、count。

执行步骤​

_VerifyAsync:按 DsType 分派校验。

  • 0:必须存在 MetaObjectId,且能查到对象;DisplayField 不可为空。
  • 1:UserFilterType 不可为空。
  • 2:OrganizationFilterType、DataStructure 均不可为空。
  • 9:JsonScript 不可为空,且必须能反序列化为 List<LabelValue>。
  • 10:DataStructure 不可为空。
  • 其它值:抛「数据源类型配置无效」。

校验通过后进入下游节点的校验链。

_ExecuteAsync:取请求的深拷贝(为空时使用 Current = 1、PageSize = 20 的默认请求),以 PageSize 作为 limitCount,按 DsType 调用对应服务:

内置数据源类型​

DsType服务类返回的选项形态
0EntityDataSourceService{ label: 显示字段值, value: "_id" }
1UserDataSourceService{ label: 按 UserDisplayType 拼接, value: 用户ID, extend: { UserMainIdentity } }
2OrganizationDataSourceService / OrganizationTreeDataSourceService列表:{ label: ParseTitle, value: 组织ID, extend: { Path } };树形:带 children
3ProfileDataSourceService{ label: 身份名称, value: 身份ID }
4RoleDataSourceService{ label: 角色名称, value: 角色ID }
5DictionaryDataSourceService数据字典 items 反序列化得到的 { label, value } 列表
9组件内联JsonScript 反序列化得到的 { label, value } 列表
10ChinaAdministrativeDivisionDataSourceService / ChinaAdministrativeDivisionTreeDataSourceService列表:扁平化 { label, value };树形:带 children

各服务返回的选项统一为 LabelValue 结构,字段为 label、value、extend、children;value 一律为字符串,实体/人员/组织/身份/角色类型下即为对应记录的 _id。

关键实现要点:

  • 实体数据源:条件优先级为 FilterOverride 最高;否则依次叠加默认条件(按 ConditionMode 解析)、label 模糊匹配(对显示字段 Contains)、request.Condition、context.AndFilter,再叠加 MOU 数据权限(查询阶段)。ResponseMode = "2" 时把 Current 置 1、PageSize 置 int.MaxValue、limitCount 置 0,返回全部匹配数据。仅当 ResponseMode = "0"(分页)且结果不足 limitCount 时,会再补一批已启用数据以「让下拉可选项更多」。最终经 TranslateAsync 翻译后仅保留显示字段与 _id。
  • 人员数据源:非翻译场景下以 name/email/number/phone 模糊匹配,UserFilterType = "1" 追加当前用户 MOU 部门过滤;对系统默认用户与匿名用户有特殊处理。翻译 / 反向翻译场景(TranslateSignal / ReTranslateSignal)按当前用户主标识(邮箱 / 工号 / 手机号)精确匹配,且强制 ResponseMode = "1"。
  • 组织 / 行政区划:当上下文包含翻译或反向翻译信号时,强制走列表服务,忽略 DataStructure;否则 DataStructure = "1" 走树形服务。组织树在树形转换中按 OrganizationFilterType 逐节点判定权限,有权限的节点其所有下级默认可见。行政区划树数据来自 DsFiles/ChinaAdministrativeDivisionData.json,按层级裁剪或扁平化。

输出与上下文​

  • 结果写入 context.CmpResult(类型 List<LabelValue>),供下游组件(脚本、条件分支等)取用。
  • 当 IsFinalResult = "true" 时:
    • context.TransferResult.LabelValues = result,context.TransferResult.Total = result.Count;
    • context.Result = ResponseResult<List<LabelValue>>.Success(result).Total(result.Count)。
  • 组件不向 context.DicParam 写入对象上下文(ChameleonMetaObjectId 等由其它数据操作组件设置)。

权限校验​

  • 实体数据源通过 CombineDataPermissionFilterAsync(..., MouPermissionStageEnum.Query) 把 MOU 数据权限拼入查询条件。
  • 人员数据源 UserFilterType = "1" 时使用当前用户 MOU 组织列表过滤 department。
  • 组织数据源按 OrganizationFilterType 取 MOU / 自身组织范围。
  • 翻译与反向翻译场景跳过权限拼接,仅按 label / value 精确取数。

性能、批次与限制​

  • 默认请求分页为 PageSize = 20(CommonRequestModel 为空时兜底)。
  • 实体数据源分页模式下为保证下拉体验,会在结果不足时补数至 limitCount。
  • 组织服务支持通过 request.Extend.count = "-1" 明确要求返回全部数据。
  • 行政区划数据首次加载后静态缓存在进程内(LoadDataSource),后续请求返回克隆副本。
  • 翻译 / 反向翻译会把 PageSize 调整为待翻译值的数量,避免逐一查询。

异常与校验​

场景提示
实体数据源未配置操作对象操作对象未找到
实体对象不存在按 ID 未找到对象
未配置显示字段未设置显示字段
人员数据源未配置用户过滤类型人员过滤类型配置错误
组织数据源未配置过滤类型 / 数据结构组织过滤类型 / 组织结构配置错误
静态数据源脚本为空或非法 JSONJSON 数据源脚本错误
区域数据源未配置数据结构组织结构配置错误
DsType 为未知值数据源类型配置无效
行政区划数据文件缺失数据源文件不存在

选项数据源​

各类型下拉通过对应数据源接口获取,例如:GetMetaObjectDataSource、GetOrganizationCategoryDataSource、GetDataDictionaryDataSource。