编码跳号不用愁-明哥帮你来解忧

每个单据上都有“编号”字段,平台的编码规则模块为其提供自动生成功能。
为单据配置编码规则就意味着赋予单据编号一定的生成规律,即减轻录单时的繁琐, 也起到约束编号的作用。
1 编码跳号的场景介绍
这篇文档会阐述在新增单据过程中遇到的一个特殊问题:
在单据进行保存或提交操作时, 出现校验失败,则编号会丢失并继续取下一个编号。出现此现象的原因是,唯一编号在校验前已经生成,若校验失败, 编号会被废弃。
简单举个例子:
1. 现在我们要操作A单据, 在A单据的保存操作上绑定一个校验逻辑, 校验我们A单据的一个文本字段T不能为空。
2. 新增一张单据时,编号字段显示“金蝶中国-0001”,我们选择不给文本字段T填写任何值。
3. 点击保存操作,会出现提示告诉你,文本字段T不能为空。
4. 此时我们的单据编号字段, 会显示“金蝶中国-0002”, 即产生我们之前描述的“跳号问题”。
图例如下:


2 跳号问题解析
这个模块我们讲三个事情: 为何产生跳号、解决思路、产品层面思考。
2.1 为何产生跳号?
当我们对单据进行保存等操作时, 在苍穹体系中会有如下流程:

目前我们编码规则标准插件, 选择在“校验前”这个时机, 生成唯一的编号。
而校验器工作的时机是在生成编号之后, 所以校验失败且没有成功入库, 则这个编号就会丢弃。
2.2 解决思路
思路一:断号补偿
一般我们的业务中不会用到断号补偿,这是一个很特殊的功能, 它会收集任何丢弃或者删除的编号加以回收利用, 在下次新增时从断号表取出这些编号。
这个功能为什么能解决我们跳号问题呢? 因为校验失败丢弃的编号被回收了,二次使用时是能获取到这个号码的。(如果有并发竞争, 不一定能获得)

思路二:插件组替换
针对跳号问题我们开发了另外一套插件, 同样是刚刚的那个流程图,我们将编号生成时机延后, 在“校验后”才生成唯一编号, 以此来避免校验失败导致的编号丢弃问题。
2.3 产品层面的思考
针对断号补偿
编码跳号不用愁-明哥帮你来解忧
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



