功能说明:
正常情况下我们的数据库一般都会有一个自增长主键(Oracle数据库除外)作为数据新增、修改、删除的查找依据。 但是,如果我们把它作为一些业务数据的关联字段的话,会有些不妥。比如入库单号、出库单号、订单号等等。可能平常使用感觉不到什么问题,但是如果遇到一些系统升级、系统备份转移等场景时,这个时候自增长列就会成为我们崩溃的麻烦点。而且自增长列不具备可识别性,如果我们在一些序号前后加一些字母的话,这样我们就能一眼看到这个单据的类型。这时候,我们需要在表中另外添加一个用于关联业务数据的编号。而这个编号每个人设计的又不会一样,为了满足绝大多数人的需求,自动编号模块诞生了。
自动编号模块可以让我们以最简单的方式,设计出最灵活的自动编号,并且在本平台中可以保证编号的唯一性。
为了实现自动编码的灵活性和可扩展性,这部分的逻辑是单独拎出来处理的。目前可以支持单机生成自动编码、利用Server服务端生成自动编码,还可以搭建WEBAPI来生成自动编码(这个也是为了以后系统支持BS作的准备)。三种方式处理逻辑一致。为了解决同时申请大量编号时的性能问题,特地设计了一个ReturnedAutoID返回对象。以一个精妙的设计方式,让编号申请的性能得到提高,来回服务器之间的数据传输负担大量减轻。因为我们最后是根据ReturnedAutoID返回对象在客户端重新计算生成相应的编号的。这里面的详细内容待后面的开发指南我们再作详细介绍。
规范名称:自增长编号的名称,方便自己分辨此编号的作用。
示例:设置好自增长的格式后,这里会生成一个编号的格式示例。
废号重用类型:
Never:绝不重复。像自增长、GUID类型的都是绝不重复的类型。
ByOrder:按照顺序,也跟Never一样,表示不重复。不怎么常用,可以忽略。
Day:每天流水码都会从1重新开始。
Week:每周流水码都会从1重新开始。
Month:每月流水码都会从1重新开始。
Year:每年流水码都会从1重新开始。
CuttomGroup:自定义分组。这主要是针对一些希望根据具体的分组进行流水码生成的场景。通过“设置明细”表中的“是否分组”列配合,我们可以针对指定部分的值内容进行分组流水码生成。
分类:这个分类是方便自己管理大量的自增长数据规范。
描述:对自增长编号的一个补充描述,能让自己更清楚地辨别此数据规范的作用。
需要回收废号:暂时作废,没有启用。
生成编号时机:
AfterDataRowAdded:在新增行的时候即会生成。这样做的好处是,如果此编号是关联字段的话,子表如果有新增的话,会正常带出此编号信息,能够有效的保存数据。坏处是如果中间有放弃某些新增数据的话,就会导致编号中间出现断号。
BeforeSave:在保存表的时候生成。这样做的好处就是可以解决断号的问题。有人可能会觉得,如果中间有人删除单据的话,是不是还会有断号呀?这时候我们可以结合逻辑删除,这样就可以保证没有断号了。
固定字符:这里可以设置任何字符,方便组成一个有意义的自动编号。
日期格式:
流水码:流水码都是从1开始的,这里设置的仅仅是流水码的字符长度。
自增长:自增长跟GUID这两种参数比较特殊,它们自成一种示例,不能跟其他参数一起使用。这里的自增长效果跟数据库内部的自增长列生成的数据是类似的,都是连续增长的长整数,但是没有自动设置为主键及唯一索引。所以在数据迁移过程中是不存在麻烦的。
GUID:V1.5版本新增的一个自动编号类型。此类型会自动生成一个GUID值(36位长度),在某些场合比自增长列更适合。由于此编号的特殊性,我们同一个项目可共享同一个GUID自动编码。
表达式:这里的表达式其实就是表达公式,我们在生成自动编码前会先计算出表达公式中的值,并将值返回传递给服务器,让这个值作为其中一个参数来生成最终的自动编码。此类型适合生成编号时机在“BeforeSave”时使用。
字段:这里的字段就是我们在生成自动编码时,会以当前行指定列中的数据作为参数来生成最终的自动编码。此类型适合生成编号时机在“BeforeSave”时使用。
操作说明:
1.设置了相应的格式参数后,得点击向左这个按钮,才会最终采用此格式参数。
2.可以结合示例上下调整参数的顺序。
自动编码自从引进了表达公式功能后,基本满足了我们绝大多数场景的自动编码要求:连号的、不连号的,新增时生成的、保存时生成的,根据条件生成编号……你能想象得到的自动编码,这里基本可以完成。