NocoBase 数据表字段自动编码(Sequence)插件实战:基于规则组合的日期、数字与文本编码生成
发布时间:2026/10/11 1:50:17 锦皓数字建站
插件实战:基于规则组合的日期、数字与文本编码生成`)
低代码后端前端人工智能AI 应用工作流自动化【免费下载链接】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点击查看免费下载NocoBase 内置的「数据表字段自动编码」nocobase/plugin-field-sequence插件允许在数据表上定义一个sequence自动编码类型字段按配置的规则自动生成业务编码规则支持固定文本、日期、自增数字与随机字符的自由组合。本文将以该插件为对象完整讲解四种规则类型及其参数、字段级选项输入校验、唯一约束、底层实现原理与数据修复机制并结合仓库源码与测试用例给出可直接复用的配置示例帮助读者在订单号、工单号、客户编号等场景中快速落地。插件概览内置、免费、默认未启用根据插件元信息见 docs/docs/cn/plugins/nocobase/plugin-field-sequence/index.md 与 package.json包名nocobase/plugin-field-sequence中文显示名为「数据表字段自动编码」定位builtIn内置插件且isFree免费无需商业授权editionLevel: 0默认状态defaultEnabled: false即插件内置但默认不启用需在插件管理页面手动启用后字段配置中才会出现「自动编码Sequence」字段类型能力描述根据配置的规则自动生成编码支持日期、数字、文本的组合字段归类在字段类型界面中属于advanced高级分组排序靠前order: 3字段类型标识为sequence存储类型为字符串DataTypes.STRING。该插件同时提供服务端实现src/server/与两套客户端实现src/client/与src/client-v2/客户端负责字段配置界面服务端负责真正的编码生成逻辑二者通过patterns规则数组这一统一的数据结构衔接。规则类型详解编码由「规则序列」拼接而成一个自动编码字段的核心配置是patterns——一个有序的规则数组。字段值 依次拼接每条规则生成的结果。服务端通过sequencePatterns注册表Registry管理各规则类型的实现见 sequence-field.ts客户端配置界面中同一份规则列表由 sequence.tsx 与 SequenceRulesConfigureField.tsx 渲染。当前插件内置四种规则类型客户端 UI 中分别显示为「固定文本」「自增」「日期」「随机字符」规则类型typeUI 名称用途关键参数string固定文本常量前缀/后缀value文本内容必填integer自增递增序号digits位数、start起始值、cycle重置周期cron、key内部计数键、base进制date日期日期片段format格式默认YYYYMMDD、field取值的日期字段默认createdAtrandomChar随机字符随机片段length长度132默认 6、charsets字符集number/lowercase/uppercase/symbol固定文本string按配置原样输出字符串常量。服务端实现直接返回options.value其校验要求value为非空字符串sequence-field.ts。典型用途是编码前缀如SO-、RF。日期date取记录的日期字段默认createdAt可用field指定其他日期字段按format格式化输出。格式语法与 Day.js 一致例如YYYYMMDD、YYYY-MM-DD、YYYYMM等默认YYYYMMDD。测试用例 sequence-field.test.ts 验证了默认格式、自定义字段与自定义格式三种情况。自增integer编码中最核心的规则负责生成递增序号参数如下digits输出位数默认 1客户端 UI 限制 110不足位数的数值会用0左侧补齐start起始值默认 0客户端 UI 下限为 0首个值为startbase进制默认 10支持自定义进制输出cycle重置周期用 cron 表达式描述例如每日重置0 0 * * *、每周一0 0 * * 1、每月0 0 1 * *、每年0 0 1 1 *到周期边界后序号重新从start开始key内部计数键用于在sequences系统表中唯一标识“该字段、该计数段”的当前值。生成规则源码 sequence-field.ts 的integer.generate读取sequences表中该collection field key对应的记录无记录时取start有记录时取current 1但不得小于start即计数器不能倒退若新值超过base^digits - 1的上限则回绕到start若配置了cycle则用 cron-parser 解析上次生成时间判断当前是否已进入下一个周期若是则从start重新计数将结果转为base进制字符串并按digits左侧补零同时把current与lastGeneratedAt写回sequences表。测试中「默认从 0 开始、1 位、无周期」「digits: 2, start: 9生成09、10」「按天周期跨日重置」「同一字段多个自增规则互不干扰」等场景均被覆盖可作为理解参数行为的依据。随机字符randomChar生成指定长度的随机字符串可选字符集为数字number、小写字母lowercase、大写字母uppercase、符号symbol实际字符为!#$%^*_-。UI 限制长度 132 且至少选择一种字符集服务端校验会在length 1或未选择字符集时抛错。字段级选项输入与校验行为除patterns外自动编码字段还支持以下字段级选项选项类型说明inputable布尔是否允许在创建/编辑时手工输入编码值关闭时字段值完全由系统生成用户提交的值会被忽略match布尔仅在inputable开启时有效UI 联动隐藏开启后手工输入的值必须匹配规则拼接出的正则否则校验报错unique布尔字段唯一约束防止编码重复inputable与match的联合行为有测试用例逐项验证inputable: false即使提交了自定义值也会被覆盖为自动生成值inputable: true, match: false接受任意输入原样保存inputable: true, match: true输入必须匹配规则正则否则创建/更新被拒绝sequence_pattern_not_match校验错误输入值合法时若其数值大于当前计数器还会顺带推进sequences表的current保证后续自动生成不会产生重复编号见integer.batchGenerate与integer.update实现。可视化配置添加、排序与参数编辑在字段配置界面的「高级」分组中选择「自动编码」后会出现「序列规则」配置表格对应 SequenceRulesConfigureField.tsx添加规则点击「添加规则」新增一行默认规则为自增digits: 4, start: 1与defaultValue一致类型切换每行可下拉切换规则类型切换后参数自动填充该类型的默认值拖动排序通过拖拽手柄调整规则顺序——编码结果会随之改变例如日期 自增与自增 日期产出不同格式参数配置点击「配置」打开抽屉按类型展示参数表单自增规则的数字与起始值存在联动起始值上限 10^digits - 1周期预设重置周期提供「不重置 / 每日 / 每周一 / 每月 / 每年 / 自定义」快捷选项对应的 cron 值分别为null、0 0 * * *、0 0 * * 1、0 0 1 * *、0 0 1 1 *自定义时直接编辑 cron 表达式删除规则行尾删除按钮移除该规则。配置完成后字段值按「规则顺序拼接」生成。例如三条规则依次为固定文本A、日期YYYYMMDD、自增4 位、从 1 开始、每日重置生成结果形如A202610100001。服务端实现原理字段钩子与 sequences 系统表自动编码不是一个“计算列”而是在数据写入时通过 ORM 字段钩子真实写入的字符串字段。字段类型注册与生命周期管理位于 Plugin.tsdb.registerFieldTypes({ sequence: SequenceField })向数据库层注册sequence字段类型SequenceField继承自nocobase/database的Field在bind()中挂载四个钩子sequence-field.tsbeforeValidate → validate校验手工输入是否匹配规则beforeCreate → setValue逐条规则生成并拼接编码beforeBulkCreate → setGroupValue批量创建如导入时一次性推进计数器避免逐条读取导致的重复afterBulkCreate → cleanHook清理批量钩子的跳过标记。计数状态存放在系统集合sequences中collections/sequences.ts表结构字段为collection所属数据表、field所属字段、key计数段键、current当前值、lastGeneratedAt上次生成时间。该表标记为系统数据dataCategory: system、共享shared: true并配置了迁移规则与备份恢复规则。配套生命周期处理字段保存时fields.beforeSave为缺少key的自增规则自动分配随机键02^16 之间并确保每个key在sequences表中存在对应记录字段删除时fields.afterDestroy清理该字段在sequences表中的所有计数记录字段定义变更如调整digits、更换key时通过match()正则匹配已生成的历史值来保持计数的连续性测试用例「生成后变更规则」验证了这一点。代码级配置示例通过集合定义创建自动编码字段除可视化配置外也可以在集合定义中直接声明该字段以下片段与 sequence-field.test.ts 中的定义方式一致db.collection({ name: orders, fields: [ { type: sequence, name: orderNo, patterns: [ { type: string, options: { value: SO } }, // 固定前缀 { type: date, options: { format: YYYYMMDD } }, // 日期片段 { type: integer, options: { digits: 4, start: 1, cycle: 0 0 * * *, key: 1 } }, ], inputable: true, match: true, unique: true, }, ], });连续创建记录后orderNo依次为SO202610100001、SO202610100002……次日重置为SO202610110001。需要注意patterns中至少需要一条规则且规则类型必须已注册否则字段定义阶段即会抛错构造函数中的校验逻辑客户端定义时自增规则的key由服务端在字段保存时自动生成手动配置时应保证同一字段内多个自增规则使用不同key。数据修复repair 命令重建计数当sequences表的current与业务数据不一致例如被手工改小、批量导入乱序、历史数据未走钩子时插件提供了修复机制应用启动流程中的repair事件Plugin.ts会扫描已有记录通过match()解析每条记录中的自增片段取每个计数段的最大值重建current。修复逻辑要点对应 sequence-field-migration.test.ts 的验证场景优先按createdAt无则回退到自增主键倒序定位最新有效记录再以秒为粒度分批回溯避免全表扫描支持同字段多个自增规则、带cycle的周期计数仅取当前周期最大值、字段本身作为主键、字符串主键等边界情况修复后新记录不会与既有编码冲突测试断言修复后新增记录编号延续最大值。该机制常用于升级导入的历史数据、纠正被异常改动的计数器、以及老版本数据迁移仓库中还保留有早期版本补充key的迁移脚本 20221207022250-sequence-field-key.ts。适用场景与使用建议单据编号固定前缀 日期 自增配合cycle实现按日/月/年重置是最典型的组合防篡改/防重复开启unique并结合inputable match允许人工指定编号但强制校验格式批量导入插件对beforeBulkCreate做了批量化处理批量创建时计数不会错乱多对多中间表、同表多序列字段均有测试覆盖随机码段需要邀请码、兑换码等不可预测片段时加入randomChar规则。使用前提请在 NocoBase 插件管理中启用该插件内置但默认未启用字段值一经生成即为普通字符串可参与筛选、排序与唯一性约束但不会随规则修改而自动重算。小结「数据表字段自动编码」插件用「规则数组 拼接生成」的模型把固定文本、日期、自增、随机字符四种片段组合成任意业务编码并通过sequences系统表持久化计数、通过字段钩子在写入时自动生成、通过repair机制保证计数与历史数据一致。读者可依据本文的规则参数表与配置示例在 NocoBase 中快速搭建属于自己的自动编码字段。如需继续深入可阅读仓库中的核心实现 sequence-field.ts、插件装配逻辑 Plugin.ts以及两组测试用例 sequence-field.test.ts 与 sequence-field-migration.test.ts。赞分享低代码后端前端人工智能AI 应用工作流自动化【免费下载链接】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点击查看免费下载相关推荐NocoBase 序列字段Sequence Field完整指南业务编号规则配置、生成原理与实战用法NocoBase 序列字段Sequence Field完整指南业务编号规则配置、生成原理与实战用法 序列Sequence是 NocoBase 中用于生低代码后端前端人工智能AI 应用工作流自动化form-extractor-prototype数据验证表单字段校验规则自动生成form extractor prototype数据验证表单字段校验规则自动生成 痛点传统表单验证的重复劳动 还在手动为每个表单字段编写验证规则吗面对复杂后端人工智能AI 应用NocoBase 日期时间字段实践指南从数据表格式设置到源码级实现NocoBase 日期时间字段实践指南从数据表格式设置到源码级实现 NocoBase 的日期时间字段用于承载日期、时间与日期时间三类业务数据其展示格式既可以低代码后端前端人工智能AI 应用工作流自动化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。