跳到主要内容

数据翻译组件

数据翻译组件(DataTranslate)用于对实体对象的多语言字段执行翻译或还原,把存储值转换为当前语言展示,或把展示值写回为可存储的翻译键。

概述​

启用多语言的实体,其文本字段在库中通常存储为「翻译键 + 各语言译文」的结构。数据翻译组件按所选动作对目标对象的字段做转换:

动作值(Action)说明
翻译Translate将存储的翻译键转换为当前语言的展示文本(缺省)
还原ReTranslate将展示文本还原为可存储的翻译键

组件需要先选择「操作对象」确定转换作用于哪个实体的字段。

配置项​

配置项说明
操作对象要转换的实体对象,必填
类型转换动作,必填,缺省为「翻译」
输出到最终结果开启后该组件结果作为接口返回值

类型取值​

界面名称值(Action)说明
翻译Translate存储值 → 当前语言展示文本
还原ReTranslate展示文本 → 存储值

使用场景​

  • 接口返回多语言字段时需要输出当前语言文本
  • 写入前把展示文本还原成翻译键

下一步​

属性明细​

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

节点元数据​

数据翻译组件由 FlowCmpType.DataTranslate 标识。所有节点 meta 值均以字符串存储(布尔、数字、数组等在元数据中同样以字符串形式保存)。

属性名类型含义取值/存储值
typestring组件类型固定为 "DataTranslate"
MetaObjectIdstring(GUID)目标实体对象缺省取当前接口所属对象
Actionstring转换动作"Translate"(缺省)/ "ReTranslate"
IsFinalResultstring(bool)是否输出到最终结果"true" / "false"
IsDisabledstring(bool)是否禁用该节点"true" / "false"
orderstring同级排序例:"12"

元数据存储示例​

{
"ID": "translate1",
"type": "DataTranslate",
"MetaObjectId": "3f9c0b2e-2d3a-4e6f-9c11-0f7a5b8d2e10",
"Action": "Translate",
"IsFinalResult": "true",
"order": "12"
}

服务端执行逻辑​

本节说明 DataTranslateComponentManager 在服务端的真实执行过程。组件继承自 TriggerComponentManagerBase,接口链路与实体触发器链路均会执行。

执行时机与场景​

  • 执行入口为 _ExecuteAsync,对上游传入的数据集合执行字段转换,执行后调用 ExecuteNextAsync 继续下游。
  • 基类执行前读取 IsDisabled,为 "true" 时跳过本组件。
  • 组件不对数据库发起查询,只做内存中的字段值转换。

数据来源​

按优先级确定待转换的数据集合:

  1. 上游组件结果 context.CmpResult:当其为 List<ObjectData> 时优先使用(优先级最高)。
  2. 请求体 context.Request.List:上游未产生结果时,深克隆请求体中的 list。

双双为空(null 或 0 条)时直接执行下游,不做任何转换。

转换动作​

按节点 Action 分派:

Action调用说明
ReTranslatedataSourceApp.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 数据权限过滤。