前言

编号在各类系统中都会存在,同时它还会根据业务场景的不同,会有不同的生成规则。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类的属性

XAF Number(编号)的更多相关文章

  1. ASP.NET 文件上传类 简单好用

    调用: UploadFile uf = new UploadFile(); /*可选参数*/ uf.SetIsUseOldFileName(true);//是否使用原始文件名作为新文件的文件名(默认: ...

  2. MySQL基础之第17章 MySQL日志

    17.1.日志简介 二进制日志错误日志通用查询日志慢查询日志 17.2.二进制日志 二进制日志也叫作变更日志(update log),主要用于记录数据库的变化情况.通过二进制日志可以查询MySQL数据 ...

  3. Java多线程技术学习笔记(二)

    目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...

  4. PLSQL Developer软件使用大全

    PLSQL Developer软件使用大全 第一章 PLSQL Developer特性 PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发.如今,有越来越 ...

  5. Oracle银行存取钱系统

    Oracle银行存取钱系统 /* 银行系统 要求: 1.创建一个用户信息表(userinfo).一个交易信息表(deal) 2.用户信息表字段:用户编号.用户名称.密码.余额 交易信息表字段:编号.交 ...

  6. ASP.NET Core WebApi中使用FluentValidation验证数据模型

    原文链接:Common features in ASP.NET Core 2.1 WebApi: Validation 作者:Anthony Giretti 译者:Lamond Lu 介绍 验证用户输 ...

  7. Mybatis的学习1

    ORM 关系数据库需要按对象来处理,出现ORM设置,列对应类的属性,行对应对应类的实例,也就是每一行对应一个新的实例,对应类是需要实现序列化(implements Serializable  - im ...

  8. sql server 日志文件结构及误操作数据找回

    一. 概述 在sql server 里有数据文件.mdf和日志文件.ldf,日志文件是sqlserver数据库的另一个重要组成部分,日志文件记录了所有事务以及每个事务对数据库所做的修改.为了提高数据库 ...

  9. 嵌入式开发之hi3519---GPIO 按键驱动

    摸索了一个星期,终于把海思HI3515开发板的按键中断程序搞出来了,hi3515的核心芯片与网上例子较多的s3c之类的有一些区别,以至于浪费了好些时间去琢磨.管脚配置方式不一样,中断的使用情况也不一样 ...

  10. jquery-jtemplates.js模板应用

    jquery-jtemplates.js下载地址:https://gitee.com/nelsonlei/jquery-jtemplates.jsMoBanYingYong <!DOCTYPE ...

随机推荐

  1. 阿里天池实验室简明教程以及Docker安装使用[一]

    1.天池notebook简介和使用 天池实验室是基于PAI DSW探索版开发的,PAI DSW (Data Science Workshop)是为算法开发者量身打造的云天池实验室是基于PAI DSW探 ...

  2. 解决: DECODER_ERROR_CLASSES += (brotli.error,) ttributeError: module ‘brotli‘ has no attribute ‘error‘

    解决: DECODER_ERROR_CLASSES += (brotli.error,) ttributeError: module 'brotli' has no attribute 'error' ...

  3. 4.5 C++ Boost 文件目录操作库

    Boost 库是一个由C/C++语言的开发者创建并更新维护的开源类库,其提供了许多功能强大的程序库和工具,用于开发高质量.可移植.高效的C应用程序.Boost库可以作为标准C库的后备,通常被称为准标准 ...

  4. Mygin上下文之sync.Pool复用

    sync.Pool 的作用 先看看官方文档怎样说的吧,我截取了官方文档的第一句. // A Pool is a set of temporary objects that may be individ ...

  5. 制作包含最新更新的Windows 10 LTSC 2021 ISO

    介绍 在制作桌面云windows 模板的时候,一般需要安装最新的更新.更新安装过程非常耗时,并且安装更新会导致桌面模板的磁盘空间膨胀.制作出的模板会占用很大的磁盘空间.如果不安装更新,模板大小约5G. ...

  6. Web入门:JavaScript文字动画

    欢迎来的我的小院,恭喜你今天又要涨知识了! 案例内容 利用JavaScript实现文字逐步展现的动画效果. 演示 学习 <!DOCTYPE html> <html lang=&quo ...

  7. 文心一言 VS 讯飞星火 VS chatgpt (193)-- 算法导论14.3 1题

    一.用go语言,写出作用于区间树的结点且在 〇(1) 时间内更新 max 属性的过程 LEFT-ROTATE 的伪代码. 文心一言: 以下是一个简单的LEFT-ROTATE的伪代码,它对一个二叉搜索树 ...

  8. 使用KVM克隆用于Oracle DB的主机

    首先,通过现有的vm1「在上篇文章 使用KVM创建OEL虚拟机 已创建」克隆出一个vm,名字叫做db1,然后修改一些配置,使其更适用于Oracle DB的主机. 1.通过克隆vm1生成db1 2.解决 ...

  9. TDBLookupComboboxEh 一些设置项,自己总结

    注意:如果top_seller_nick有重复的值的时候,keyfield 也为top_seller_nick的话,就会造成,选中最下面的那个阿里巴巴的,默认也是第一个天猫的各项值. 因为选后是根据k ...

  10. C语言程序设计之字符串处理

    C语言程序设计-字符串处理 第一题:回文数判断 问题描述] 回文是正读和倒读都一样的句子.读入一个最大长度不超过50个字符的句子,判断其是否是回文. [输入形式] 输入一个最大长度不超过50个字符的句 ...