NocoBase 序列字段(Sequence Field)完整指南:业务编号规则配置、生成原理与实战用法
2026/9/15 12:43:25 网站建设 项目流程

NocoBase 序列字段(Sequence Field)完整指南:业务编号规则配置、生成原理与实战用法

【免费下载链接】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

序列(Sequence)是 NocoBase 中用于生成业务编号的字段类型,适合订单号、合同号、工单号、申请单号等需要可读规则编号的场景。本文以 docs/docs/cn/data-sources/field-sequence/index.md 为核心,结合plugin-field-sequence插件的源码与测试,讲解字段的创建、规则配置、底层生成原理与页面使用方式,帮助你快速落地一套可维护的业务编号体系。

什么是序列字段

在 NocoBase 中,序列(Sequence)用于生成业务编号。它和数据库主键有本质区别:

  • 序列字段面向业务展示和人工识别,编号带有前缀、日期、自增数字等可读规则,例如SO-20240101-0001
  • 主键(如 Snowflake ID、UUID、Nano ID)只承担内部唯一标识职责,不追求可读性。

如果业务只需要内部唯一标识、不需要可读规则,应优先使用 Snowflake ID;如果需要人工可读、可按规则检索的编号,则使用序列字段。

适用场景

序列字段适合以下业务场景:

  • 订单号、合同号
  • 工单号、申请单号
  • 资产编号、设备编号
  • 带前缀、日期或递增规则的编号

创建序列字段

在数据表的「Configure fields」页面中,点击「Add field」,选择「序列」即可创建序列字段。

创建时涉及以下配置项:

配置说明
Field interface字段的界面类型。序列对应sequence,决定页面中如何录入和展示。
Field display name字段在界面中显示的名称,比如「订单编号」「合同编号」「工单号」。建议使用业务人员能直接理解的名称。
Field name字段标识名称,用于 API、关系字段、权限、工作流等内部引用。创建后通常不再修改,只支持字母、数字和下划线,并且必须以字母开头。
Field type字段在数据层的类型。序列字段的存储类型取决于序列规则,常见为string
Default value默认值。新增记录时,如果用户没有填写,可以自动带出默认值。
Validation rules通常由系统按规则生成,不需要人工校验。
Description字段说明。适合写字段含义、填写要求、数据来源或维护人。

注意:字段名创建后会被页面区块、权限、工作流和 API 引用。创建前先确认命名,避免后续修改带来配置调整成本。

字段特性

序列字段的默认行为如下:

特性说明
默认 Field interfacesequence
默认 Field typestring
可选 Field typestringinteger,以实际序列配置为准
页面组件通常自动生成,配置编号规则后使用
筛选支持按编号精确查询或文本筛选
排序是否适合排序取决于编号规则
校验依赖序列规则,通常保持唯一

从源码结构看,客户端接口定义 interface.tsx 中明确设置了filterable.operators = 'string',即序列字段默认按字符串操作符进行筛选,并在「Unique」配置项中以复选框形式提供唯一性约束开关;服务端SequenceField.dataType固定返回DataTypes.STRING(见 sequence-field.ts),这印证了「常见存储类型为 string」的默认行为。

序列规则(Sequence Rules)详解

序列字段的核心是规则(patterns):编号由一条或多条规则拼接生成。配置界面中的「Sequence rules」项允许你组合以下四种规则类型(定义见 interface.tsx):

规则类型界面名称参数说明
string固定文本(Fixed text)value(文本内容,必填)固定前缀/后缀,如SO-CN-
integer自增(Autoincrement)digits(位数,默认 4,范围 1~10)、start(起始值,默认 1)、cycle(重置周期)按位数补零递增的数字段,如0001
date日期(Date)format(日期格式,默认YYYYMMDD取日期字段格式化后的值
randomChar随机字符(Random character)length(长度,默认 6,范围 1~32)、charsets(字符集,可多选:数字、小写字母、大写字母、符号)随机字符段,适合验证码类编号

一个典型的组合示例是「固定文本 + 日期 + 自增」生成形如SO-20240101-0001的订单号。在配置界面中,你可以增删规则并调整顺序,最终编号即按顺序拼接各规则生成的值。

integer规则的cycle(重置周期)配置项在 SequenceRulesConfigureField.tsx 中提供了以下预置选项,也可以选择「Customize」自定义 cron 表达式:

选项cron 表达式
不重置(No reset)
每天(Daily)0 0 * * *
每周一(Every Monday)0 0 * * 1
每月(Monthly)0 0 1 * *
每年(Yearly)0 0 1 1 *

序列字段的默认规则为一条integer规则,参数为digits: 4, start: 1,即生成00010002这样的四位自增编号。

编号生成原理:源码级解析

序列字段的实现集中在插件@nocobase/plugin-field-sequence的 sequence-field.ts 中,核心要点如下:

1. 规则注册表(Registry):服务端通过sequencePatterns注册表统一注册了stringintegerdaterandomChar四种 Pattern,每种 Pattern 至少实现generate(单条生成)、batchGenerate(批量生成)、getLengthgetMatcher(正则匹配片段)四个方法。创建字段时如果patterns为空,或使用了未注册的规则类型、参数校验不通过,构造器会直接抛出错误——这一点在 sequence-field.test.ts 中有明确测试用例覆盖("without any pattern will throw error")。

2. 编号状态表sequences:递增计数不依赖业务表本身,而是存放在一张系统共享表sequences中(定义见 sequences.ts),字段包括:collection(所属数据表)、field(所属字段)、key(规则键)、current(当前计数值,bigInt类型)、lastGeneratedAt(最近生成时间)。每条「数据表 + 字段 + key」对应一行记录,计数器在生成编号的事务内完成查询、自增与保存,从而保证并发下的递增唯一性。

3. 生命周期 HookSequenceFieldbind()中注册了四个钩子:

  • beforeValidatevalidate:当字段配置为inputable(允许手工输入)且要求match(必须匹配规则)时,手工输入的值必须符合规则拼接出的正则,否则抛出校验错误;
  • beforeCreatesetValue:单条创建时按规则逐个生成并拼接编号;
  • beforeBulkCreatesetGroupValue:批量创建时一次性推进计数器并批量赋值,避免逐条生成带来的性能损耗;
  • afterBulkCreatecleanHook:清理批量钩子标记。

4. 自增与重置逻辑integer规则每次生成时读取sequences表中的current,执行current + 1,若超过base^digits - 1则回到start;若配置了cycle(cron 表达式),则通过cron-parser计算下一个周期时间点,当记录时间跨过周期边界时自动从start重新开始。测试用例(如 "default start from 0, digits as 1, no cycle")验证了默认行为:连续创建两条记录,编号依次为01

5. 手工录入的计数器回填integer规则的update方法在手工输入编号且命中规则时,会用输入值回填计数器(只有更大的值才会更新current),并支持overwrite强制覆盖,保证后续自动生成不会产生重复编号。

编辑序列字段

创建后,点击字段右侧的「Edit」可以编辑序列字段配置。编辑字段主要用于调整字段在 NocoBase 中的展示和使用方式,比如修改显示名称、说明、默认值、校验规则或字段专属配置。

如果字段来自主数据库中已经同步的表,编辑时通常是在做字段映射——把数据库字段映射为 NocoBase 的 Field type 和 Field interface。

配置允许编辑说明
Field display name修改字段在界面中的显示名称,不改变字段标识名称。
Field name字段标识名称创建后通常不能在编辑表单中修改。
Field interface条件支持主数据库字段或同步字段在字段映射时可以调整。调整后会影响页面输入、展示和校验方式。
Field type条件支持主数据库字段或同步字段在字段映射时可以调整。调整前需要确认已有数据能否按新类型使用。
Default value调整新增记录时的默认值。
Validation rules调整字段校验规则。
Description补充字段含义、填写要求、数据来源或维护人。

注意:切换 Field type 或 Field interface 不等于简单改一个显示名称。它会影响字段的存储方式、输入组件、校验规则、筛选条件和工作流变量使用方式。已有数据较多时,先确认数据格式是否匹配。

删除序列字段

点击字段右侧的「Delete」可以删除序列字段。主数据库中还可以勾选多个字段后批量删除。

  • 删除主数据库中新建的序列字段时,通常会同时删除数据库中的真实列及该列已有数据;
  • 删除从数据库同步或外部数据源映射出的字段时,影响范围取决于对应数据源和字段来源。

警告:删除字段可能影响页面区块、表单、筛选、权限、工作流、API、导入导出和已有数据。删除前先确认字段是否仍被业务配置引用。

页面配置与使用

序列字段适合在业务编号和人工检索场景中使用:

场景用途
创建记录自动生成业务编号。
表格区块展示、搜索和筛选编号。
详情区块作为记录的可读标识。
工作流和通知在审批、通知中引用业务编号。

结合序列字段「支持文本筛选」「可作为可读标识」的特性,建议在表格区块中为编号列开启筛选,方便业务人员按编号快速定位记录;在工作流节点中引用编号变量,让审批通知带上可读的单号,提升协作效率。

相关文档

  • 字段 — 了解字段的作用、分类和映射逻辑
  • 普通表 — 在普通表中创建和管理字段
  • 单行文本 — 手工维护业务编号
  • Snowflake ID — 使用内部主键 ID

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询