数据翻译组件
数据翻译组件(DataTranslate)用于对实体对象的多语言字段执行翻译或还原,把存储值转换为当前语言展示,或把展示值写回为可存储的翻译键。
概述
启用多语言的实体,其文本字段在库中通常存储为「翻译键 + 各语言译文」的结构。数据翻译组件按所选动作对目标对象的字段做转换:
| 动作 | 值(Action) | 说明 |
|---|---|---|
| 翻译 | Translate | 将存储的翻译键转换为当前语言的展示文本(缺省) |
| 还原 | ReTranslate | 将展示文本还原为可存储的翻译键 |
组件需要先选择「操作对象」确定转换作用于哪个实体的字段。
配置项
| 配置项 | 说明 |
|---|---|
| 操作对象 | 要转换的实体对象,必填 |
| 类型 | 转换动作,必填,缺省为「翻译」 |
| 输出到最终结果 | 开启后该组件结果作为接口返回值 |
类型取值
| 界面名称 | 值(Action) | 说明 |
|---|---|---|
| 翻译 | Translate | 存储值 → 当前语言展示文本 |
| 还原 | ReTranslate | 展示文本 → 存储值 |
使用场景
- 接口返回多语言字段时需要输出当前语言文本
- 写入前把展示文本还原成翻译键
下一步
属性明细
以下内容面向技术实现与 AI 检索,说明数据翻译组件的节点元数据。
节点元数据
数据翻译组件由 FlowCmpType.DataTranslate 标识。所有节点 meta 值均以字符串存储(布尔、数字、数组等在元数据中同样以字符串形式保存)。
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
type | string | 组件类型 | 固定为 "DataTranslate" |
MetaObjectId | string(GUID) | 目标实体对象 | 缺省取当前接口所属对象 |
Action | string | 转换动作 | "Translate"(缺省)/ "ReTranslate" |
IsFinalResult | string(bool) | 是否输出到最终结果 | "true" / "false" |
IsDisabled | string(bool) | 是否禁用该节点 | "true" / "false" |
order | string | 同级排序 | 例:"12" |
元数据存储示例
{
"ID": "translate1",
"type": "DataTranslate",
"MetaObjectId": "3f9c0b2e-2d3a-4e6f-9c11-0f7a5b8d2e10",
"Action": "Translate",
"IsFinalResult": "true",
"order": "12"
}
服务端执行逻辑
本节说明 DataTranslateComponentManager 在服务端的真实执行过程。组件继承自 TriggerComponentManagerBase,接口链路与实体触发器链路均会执行。
执行时机与场景
- 执行入口为
_ExecuteAsync,对上游传入的数据集合执行字段转换,执行后调用ExecuteNextAsync继续下游。 - 基类执行前读取
IsDisabled,为"true"时跳过本组件。 - 组件不对数据库发起查询,只做内存中的字段值转换。
数据来源
按优先级确定待转换的数据集合:
- 上游组件结果
context.CmpResult:当其为List<ObjectData>时优先使用(优先级最高)。 - 请求体
context.Request.List:上游未产生结果时,深克隆请求体中的list。
双双为空(null 或 0 条)时直接执行下游,不做任何转换。
转换动作
按节点 Action 分派:
Action | 调用 | 说明 |
|---|---|---|
ReTranslate | dataSourceApp.ReTranslateAsync(list, metaObjectId, metaFields) | 展示文本 → 可存储的翻译键 |
| 其他(含缺省) | dataSourceApp.TranslateAsync(list, metaObjectId, metaFields) | 存储值 → 当前语言展示文本 |
除 ReTranslate 外的一切取值都走翻译分支,即 Action 缺省时行为为「翻译」。
输出与上下文
| 输出项 | 内容 |
|---|---|
context.CmpResult | 转换后的 List<ObjectData> |
context.DicParam["BizDataIds"] | 结果记录的 _id,逗号拼接 |
context.DicParam["MetaObjectCode"] | 对象编码 |
context.DicParam["MetaObjectId"] | 对象 ID |
当 IsFinalResult="true" 时,写入 context.TransferResult.List / .Total,并赋值 context.Result = ResponseResult<List<ObjectData>>.Success(list).Total(list.Count)。
性能与限制
- 仅对内存数据做字段级转换,无数据库访问、无分页。
- 组件递归深度上限 100,超过抛出异常。
异常与校验
校验阶段(_VerifyAsync):
| 场景 | 异常 |
|---|---|
MetaObjectId 为空 | OperationObjectNotFound |
| 对象不存在 | MetaObjectNotFoundById |
组件不校验数据操作权限(Query / Insert 等),也不进行 MOU 数据权限过滤。