多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

NocoBase 更新人字段(updatedBy)完全指南:自动记录最后更新用户

NocoBase 更新人字段(updatedBy)完全指南:自动记录最后更新用户 NocoBase 更新人字段updatedBy完全指南自动记录最后更新用户【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase更新人Updated by是 NocoBase 中的系统预设字段用于在每条记录被修改时自动写入最后更新用户是审计追踪、责任界定与工作流通知的基础设施。本文基于 NocoBase 官方文档与仓库源码系统讲解更新人字段的适用场景、创建配置、字段特性、编辑与删除注意事项并结合前端接口定义与后端数据层实现说明其底层工作方式与最佳实践。读完本文你将掌握如何正确配置和使用更新人字段并理解它与普通用户关系字段的本质区别。介绍什么是更新人字段在 NocoBase 中更新人Updated by字段用于自动记录最后更新一条记录的用户。它通常由预设字段preset field生成——即在你新建数据表时系统可以随表自动带出的一组系统字段createdBy、updatedBy、createdAt、updatedAt等也可以在「Configure fields」页面手动添加。更新人字段适合以下四类诉求审计谁修改了这条数据责任追踪记录的最后维护人是谁筛选按更新人筛选记录工作流条件将最后更新人作为通知对象或判断条件。注意如果你要表达的是业务负责人处理人审批人这类业务语义的用户建议单独创建用户关系字段而不是复用更新人字段。更新人表达的是谁操作了数据这一系统事实而非谁负责这条业务。适用场景更新人字段在业务系统中的典型用法包括查看最后维护人详情区块中展示最后修改人快速定位数据变更责任人按更新人筛选记录筛选区块中按更新人过滤数据例如查看我最近改过哪些单审计谁修改了数据结合更新记录留痕追溯数据变更过程工作流中通知最后更新人将更新人作为通知对象实现谁改的谁跟进的闭环。创建配置在数据表的「Configure fields」页面中点击「Add field」选择「更新人」即可创建更新人字段。创建时涉及的核心配置如下配置说明Field interface字段的界面类型。更新人对应updatedBy决定页面中如何录入和展示。Field display name字段在界面中显示的名称比如「更新人」「最后修改人」。建议使用业务人员能直接理解的名称。Field name字段标识名称用于 API、关系字段、权限、工作流等内部引用。创建后通常不再修改只支持字母、数字和下划线并且必须以字母开头。Field type字段在数据层的类型。更新人通常是指向用户表的belongsTo关系字段。Default value默认值。新增记录时如果用户没有填写可以自动带出默认值。Validation rules系统自动维护通常不需要人工校验。Description字段说明。适合写字段含义、填写要求、数据来源或维护人。:::warning 注意 字段名创建后会被页面区块、权限、工作流和 API 引用。创建前先确认命名避免后续修改带来配置调整成本。 :::源码视角updatedBy 界面接口的默认形态从前端源码可以确认更新人字段的默认配置。在 packages/core/client/src/collection-manager/interfaces/updatedBy.ts 中UpdatedByFieldInterface的声明如下name updatedBy归入systemInfo系统信息分组组内排序为 4isAssociation true是一个关联字段默认type: belongsTo、target: users、foreignKey: updatedById——即它本质是指向用户表users的 belongsTo 关系外键为updatedById默认 UI Schema 使用AssociationField组件、x-read-pretty: true只读展示因为该值由系统自动写入展示字段为用户的nicknameavailableTypes [belongsTo]可选的数据层类型仅belongsTo一种。同时在集合模板定义 packages/core/client/src/collection-manager/templates/types.ts 中可以看到createdBy?: boolean与updatedBy?: boolean两个预设字段开关印证了更新人通常由预设字段生成的说法——新建集合时即可选择是否随表带出该字段。字段特性更新人字段的默认行为如下特性说明默认 Field interfaceupdatedBy。默认 Field typebelongsTo。可选 Field typebelongsTo。页面组件系统自动写入页面通常以用户展示组件呈现。筛选支持按用户筛选。排序通常不按更新人排序。校验由系统自动写入。源码视角数据层如何自动写入更新人的自动写入在数据层由两类机制共同完成belongsTo 关系与外键命名更新人是 belongsTo 关系字段。在 packages/core/database/src/fields/belongs-to-field.ts 中外键默认按camelCase(字段名_目标主键)规则生成updatedBy 用户表主键id→updatedById与前端接口定义完全一致。这样每条记录上都会持久化一个updatedById列。上下文context自动取值系统预设字段的自动写入通过上下文字段机制实现。在 packages/core/database/src/fields/context-field.ts 中可以看到字段通过beforeCreate、beforeBulkCreate以及beforeUpdate钩子在记录创建/更新时从请求上下文中取出当前用户并写入字段值createOnly选项控制是否仅在创建时写入。从源码结构可以推断updatedBy的取值正是挂载在更新钩子上因此只有更新记录时才会刷新为最后更新用户而创建时写入的值由创建人字段负责。源码视角系统字段在数据模板中被排除在 packages/core/server/src/middlewares/data-template.ts 中服务端在生成数据模板时会主动过滤createdAt、updatedAt、createdBy、createdById、updatedById、updatedBy等系统字段。这印证了这些字段由系统维护、不应作为业务输入项的设计原则。编辑配置创建后点击字段右侧的「Edit」可以编辑更新人字段配置。编辑字段主要用于调整字段在 NocoBase 中的展示和使用方式比如修改显示名称、说明、默认值、校验规则或字段专属配置。如果字段来自主数据库中已经同步的表编辑时通常是在做字段映射——把数据库字段映射为 NocoBase 的 Field type 和 Field interface。配置允许编辑说明Field display name是修改字段在界面中的显示名称不改变字段标识名称。Field name否字段标识名称创建后通常不能在编辑表单中修改。Field interface条件支持主数据库字段或同步字段在字段映射时可以调整。调整后会影响页面输入、展示和校验方式。Field type条件支持主数据库字段或同步字段在字段映射时可以调整。调整前需要确认已有数据能否按新类型使用。Default value是调整新增记录时的默认值。Validation rules是调整字段校验规则。Description是补充字段含义、填写要求、数据来源或维护人。:::warning 注意 切换 Field type 或 Field interface 不等于简单改一个显示名称。它会影响字段的存储方式、输入组件、校验规则、筛选条件和工作流变量使用方式。已有数据较多时先确认数据格式是否匹配。 :::删除字段点击字段右侧的「Delete」可以删除更新人字段。主数据库中还可以勾选多个字段后批量删除。删除主数据库中新建的更新人字段时通常会同时删除数据库中的真实列及该列已有数据。删除从数据库同步或外部数据源映射出的字段时影响范围取决于对应数据源和字段来源。:::danger 警告 删除字段可能影响页面区块、表单、筛选、权限、工作流、API、导入导出和已有数据。删除前先确认字段是否仍被业务配置引用。 :::页面配置使用更新人字段适合在审计、筛选和工作流中使用场景用途表格区块展示最后更新人。筛选区块按更新人筛选记录。详情区块查看最后维护人。工作流作为通知对象或条件字段。由于更新人字段是isAssociation true的 belongsTo 关联字段在 API 返回中会同时包含外键updatedById与关联对象updatedBy因此无论是页面区块还是工作流变量都可以通过关系路径取到用户信息如昵称nickname。其前端展示在表格、看板Kanban等区块中还会自动开启文本省略ellipsis见 updatedBy.ts 中的schemaInitialize逻辑避免长昵称撑破列宽。与创建人、业务用户关系的区别维度更新人updatedBy创建人createdBy业务用户关系字段语义谁最后修改了记录谁创建了记录业务负责人、处理人、审批人等写入方式系统自动写入系统自动写入业务人员手动选择/填写典型用途审计、筛选、通知权限只看我创建的、审计业务流转、责任归属底层类型belongsTo → users外键updatedByIdbelongsTo → users外键createdById用户关系字段需自行配置创建人字段的详细说明可参考 创建人字段文档业务负责人等场景应使用 关系字段。相关链接字段 — 了解字段的作用、分类和映射逻辑普通表 — 在普通表中创建和管理字段创建人 — 自动记录创建用户关系字段 — 创建业务负责人等用户关系参考实现文件前端界面接口定义packages/core/client/src/collection-manager/interfaces/updatedBy.ts集合模板预设字段开关packages/core/client/src/collection-manager/templates/types.tsbelongsTo 关系字段与外键生成packages/core/database/src/fields/belongs-to-field.ts上下文自动写入机制packages/core/database/src/fields/context-field.ts数据模板对系统字段的过滤packages/core/server/src/middlewares/data-template.ts【免费下载链接】nocobaseNocoBase is an open-source AI no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表