更新数据组件
更新数据组件(DbUpdate)用于按条件更新实体对象中已有记录。
概述
更新数据组件按上游传入的记录与字段值批量更新目标实体。它先选择「操作对象」,再勾选需要更新的「更新字段」;执行时依据上游数据确定待更新记录,并写入所选字段。
组件支持「跳过操作权限校验」,并可通过「输出到最终结果」返回更新结果。
配置项
| 配置项 | 说明 |
|---|---|
| 操作对象 | 要更新的实体对象,必填 |
| 更新字段 | 需要更新的字段,可多选,来自操作对象的字段列表 |
| 跳过操作权限校验 | 开启后不校验当前用户对目标对象 的操作权限 |
| 输出到最终结果 | 开启后该组件结果作为接口返回值 |
执行流程
使用场景
- 状态流转后回写主表字段
- 审批通过后更新单据状态
- 根据计算结果批量修正数据
下一步
属性明细
以下内容面向技术实现与 AI 检索,说明更新数据组件的节点元数据。
节点元数据
更新数据组件由 FlowCmpType.DbUpdate 标识:
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
type | string | 组件类型 | 固定为 "DbUpdate" |
MetaObjectId | string(GUID) | 目标实体对象 | 缺省取当前接口所属对象 |
UpdateFields | string | 更新字段编码列表 | 逗号分隔,例 "Status,Remark" |
SkipOperationPermission | string(bool) | 是否跳过操作权限校验 | "true" / "false" |
IsFinalResult | string(bool) | 是否输出到最终结果 | "true" / "false" |
order | string | 同级排序 | 例:"3" |
元数据存储示例
{
"ID": "update1",
"type": "DbUpdate",
"MetaObjectId": "3f9c0b2e-2d3a-4e6f-9c11-0f7a5b8d2e10",
"UpdateFields": "Status,Remark",
"SkipOperationPermission": "false",
"IsFinalResult": "false",
"order": "3"
}
字段数据源
「更新字段」下拉通过 POST /api/DataSource/GetMetaFieldDataSource 获取,请求时带 extend.IncludeLookup = "true",因此可选中关联(lookup)字段。切换操作对象后该下拉会重新请求。
服务端执行逻辑
本组件在服务端的实现类为 DbUpdateComponentManager,组件类型为 FlowComponentTypeEnum.DbUpdate。本节说明服务端如何解析节点配置、取数、校验、做行级权限过滤与落库。
执行时机与场景
- 流程引擎分两个阶段调用组件:保存/发布时进入校验阶段(
_VerifyAsync),运行期进入执行阶段(_ExecuteAsync)。 - 组件基类为
TriggerComponentManagerBase(继承InterfaceComponentManagerBase)。进入任阶段前会先做通用处理:节点IsDisabled为"true"时直接跳过;每次进入递增RecursionDeep,超过 100 抛ProcessCycleOrNodeMoreThanLimit。 - 当链路运行在对象触发器场景时(上下文中存在追踪标记
_TriggerNodeCollector),ExecuteAsync会额外记录该节点的耗时与成功/失败。
输入数据来源
节点配置全部取自 context.CurrentNode.Meta,所有 meta 值均以字符串形式存储。本组件读取的 key 为 MetaObjectId、UpdateFields、IsFinalResult、SkipOperationPermission;type、IsDisabled 由基类读取。
待更新数据按以下优先级解析:
- 上游结果优先:
context.CmpResult为List<ObjectData>时直接使用; - 否则回退请求数据:
context.Request深克隆后的Request.List。
两者都为空时执行 ExecuteNextAsync(空操作)。与写入组件不同,更新要求每条记录都带 Id。