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

NocoBase 序列字段(Sequence Field)完整指南:业务编号规则配置、生成原理与实战用法 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 typestring、integer以实际序列配置为准页面组件通常自动生成配置编号规则后使用筛选支持按编号精确查询或文本筛选排序是否适合排序取决于编号规则校验依赖序列规则通常保持唯一从源码结构看客户端接口定义 interface.tsx 中明确设置了filterable.operators string即序列字段默认按字符串操作符进行筛选并在「Unique」配置项中以复选框形式提供唯一性约束开关服务端SequenceField.dataType固定返回DataTypes.STRING见 sequence-field.ts这印证了「常见存储类型为 string」的默认行为。序列规则Sequence Rules详解序列字段的核心是规则patterns编号由一条或多条规则拼接生成。配置界面中的「Sequence rules」项允许你组合以下四种规则类型定义见 interface.tsx规则类型界面名称参数说明string固定文本Fixed textvalue文本内容必填固定前缀/后缀如SO-、CN-integer自增Autoincrementdigits位数默认 4范围 1~10、start起始值默认 1、cycle重置周期按位数补零递增的数字段如0001date日期Dateformat日期格式默认YYYYMMDD取日期字段格式化后的值randomChar随机字符Random characterlength长度默认 6范围 1~32、charsets字符集可多选数字、小写字母、大写字母、符号随机字符段适合验证码类编号一个典型的组合示例是「固定文本 日期 自增」生成形如SO-20240101-0001的订单号。在配置界面中你可以增删规则并调整顺序最终编号即按顺序拼接各规则生成的值。integer规则的cycle重置周期配置项在 SequenceRulesConfigureField.tsx 中提供了以下预置选项也可以选择「Customize」自定义 cron 表达式选项cron 表达式不重置No reset—每天Daily0 0 * * *每周一Every Monday0 0 * * 1每月Monthly0 0 1 * *每年Yearly0 0 1 1 *序列字段的默认规则为一条integer规则参数为digits: 4, start: 1即生成0001、0002这样的四位自增编号。编号生成原理源码级解析序列字段的实现集中在插件nocobase/plugin-field-sequence的 sequence-field.ts 中核心要点如下1. 规则注册表Registry服务端通过sequencePatterns注册表统一注册了string、integer、date、randomChar四种 Pattern每种 Pattern 至少实现generate单条生成、batchGenerate批量生成、getLength、getMatcher正则匹配片段四个方法。创建字段时如果patterns为空或使用了未注册的规则类型、参数校验不通过构造器会直接抛出错误——这一点在 sequence-field.test.ts 中有明确测试用例覆盖without any pattern will throw error。2. 编号状态表sequences递增计数不依赖业务表本身而是存放在一张系统共享表sequences中定义见 sequences.ts字段包括collection所属数据表、field所属字段、key规则键、current当前计数值bigInt类型、lastGeneratedAt最近生成时间。每条「数据表 字段 key」对应一行记录计数器在生成编号的事务内完成查询、自增与保存从而保证并发下的递增唯一性。3. 生命周期 HookSequenceField在bind()中注册了四个钩子beforeValidate→validate当字段配置为inputable允许手工输入且要求match必须匹配规则时手工输入的值必须符合规则拼接出的正则否则抛出校验错误beforeCreate→setValue单条创建时按规则逐个生成并拼接编号beforeBulkCreate→setGroupValue批量创建时一次性推进计数器并批量赋值避免逐条生成带来的性能损耗afterBulkCreate→cleanHook清理批量钩子标记。4. 自增与重置逻辑integer规则每次生成时读取sequences表中的current执行current 1若超过base^digits - 1则回到start若配置了cyclecron 表达式则通过cron-parser计算下一个周期时间点当记录时间跨过周期边界时自动从start重新开始。测试用例如 default start from 0, digits as 1, no cycle验证了默认行为连续创建两条记录编号依次为0、1。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),仅供参考