前言
编号在各类系统中都会存在,同时它还会根据业务场景的不同,会有不同的生成规则。XAF提供了一个编号生成助手(DistributedIdGeneratorHelper),它能在多并发的情况下,生成一个可递增的唯一编号,它完全可以满足一般场景的需求,但在一些特殊场景下,我们还需要对其进行扩展,如为了保持编号的连续性,我们需要对废弃的编号进行回收再使用。下面是参考了Xafair编号生成的思路,再结合DistributedIdGeneratorHelper生成编号原理,创建一个了XAFNumbers模块,它可以通过配置的方式完成编号的生成,并自动赋值给对应的属性。
示例
示例1
示例2
示例3
配置
-
Numbers是在IModelApplication下的,它下面可以包含多个Number,每一个Number都是一个编号定义。
-
Number是编号定义,下面是它的主要参数
-
AllowRetrieve 是否回收编号,默认为false,为true时,删除BO后,会自动回收编号,也可以调用API回收编号
-
KeyTemplate Key用于对编号进行分组,当Template中用到了日期或BO中的属性,都需要对KeyTemplate进行定义
-
Template 编号的模板,使用了String.Format,<INDEX>表示当前索引值,<NOW>表示当前时间
-
StartValue 编号的开始值
-
Step 编号每次递增的值
-
-
NumberLink是用于链接BO类与属性,每个Number可以包含多个NumberLink,下面是它的主要参数
-
ApplyStrategy 应用编号的策略(时机),它的值为AfterCreate(创建后)或OnSave(保存时)
-
ModelClass 将编号应用到的BO类
-
Property 将编号应用到BO类的属性
-