如何在Skyve应用中创建自动生成编号并设置初始值
Skyve自动生成业务编号设置初始值实现方法
存量数据迁移场景下,给Skyve的document-number-pattern设置编号初始值有两种可直接落地的方案,核心目标是让新生成的编号流水号大于存量数据的最大编号,避免唯一标识冲突:
- 方案1:直接操作内置序列表设置
Skyve默认把所有文档编号的流水计数存在平台内置的ADM_Sequence数据表中,每条编号规则对应一条记录,核心字段含义:sequenceName:对应编号规则的唯一标识,命名规则固定为模块名.文档名.编号属性名,比如业务请求模块的requestNumber字段,对应名称一般为crm.Request.requestNumbernextNumber:下一次生成编号时使用的流水号数值
存量数据全量导入完成后,先统计出存量request编号里的最大流水号数值,直接执行SQL把对应记录的nextNumber更新为「最大存量流水号 + 1」即可。
参考SQL示例:
如果你的编号规则带年份、月份这类时间前缀,UPDATE ADM_Sequence SET nextNumber = 1024 WHERE sequenceName = 'crm.Request.requestNumber';nextNumber仅对应前缀后面的流水号部分,不需要把前缀的年份数值算进序列值里 - 方案2:通过官方API在迁移脚本中设置
如果是写Java迁移逻辑,不需要直接操作数据库,调用Skyve内置的DocumentNumberPattern工具类方法即可完成初始值设置:
该方法会自动更新序列表的对应值,后续业务流程触发编号生成时,会直接从你设置的初始值开始累加。// 第一步:查询存量数据中request编号的最大流水号 int maxLegacySerialNum = /* 自行实现持久化查询,提取存量编号里的数字流水部分即可 */; // 第二步:重置对应编号规则的序列值,参数依次为模块名、文档名、编号属性名、初始流水值 DocumentNumberPattern.resetSerial("crm", "Request", "requestNumber", maxLegacySerialNum + 1);
踩坑提示:
resetSerial方法仅适合在一次性迁移脚本中执行,不要在日常业务逻辑里调用,否则会打乱序列计数导致编号重复。设置完成后建议手动生成一条测试request数据,确认编号符合预期、和存量数据连续再切流上线。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

