您的位置:首页 > 其它

Bex5自动编号相关函数和用法

2017-02-08 16:15 183 查看
本文中引用的技巧来自于wex5.com(http://bbs.wex5.com/forum.php?mod=viewthread&tid=39632&extra=page%3D1)论坛,

虽然时间有些老,但是非常实用。COPY如下:

1、X5为自动编号提供了一组函数
Integer nextSeq(String key); //按照关键字产生一个自动递增的整型序号
String nextSeqString(String key, String format); //按照关键字和序号格式,产生一个自动递增的组合编号
Integer tempNextSeq(String key); //按照关键字产生一个临时的递增整型序号
String tempNextSeqString(String key, String format); //按照关键字和序号格式,产生一个临时的递增组合编号
String createSerialNumberByCurrentDate(); //产生一个'yyyyMMdd00000'格式的递增组合编号

2、技术实现
所有自动编号的产生,其实依赖于数据库中的SA_KVSequence这张表,这张表只有两个字段(k-string, v-integer)。

Integer nextSeq(String key); //按照关键字产生一个自动递增的整型序号
这个函数会在SA_KVSequence表中创建一行数据k=key、v=1,每次执行v=v+1,获取v做为返回的递增整型序号(1,、2、3、4、...)
String nextSeqString(String key, String format); //按照关键字和序号格式,产生一个自动递增的组合编号
= key + new java.text.DecimalFormat(format).format(nextSeq(key))
这个函数首先基于nextSeq获取key对应的递增序号,然后进行数字格式化,最后与key组合形成自动递增的组合编号

Integer tempNextSeq(String key); //按照关键字产生一个临时的递增整型序号
String tempNextSeqString(String key, String format); //按照关键字和序号格式,产生一个临时的递增组合编号
这两个函数的产生规则与前两个基本相同,但是它们并不会真的在SA_KVSequence表中执行v=v+1操作。
它们只是返回将要产生的下一个序号或编号,但是并不会真的占用这个号。
这两个函数一般用于严格的不允许断号的应用场景,数据新增时先给用户显示一个将要产生的编号,但是在数据保存时会再用前两个函数生成真实的编号。
例如:
假设SA_KVSequence表中 k='AAA'、v=10
执行nextSeq('AAA') 返回11,并且SA_KVSequence表中 k='AAA'、v=11
而执行tempNextSeq('AAA') 虽然同样返回11,但是SA_KVSequence表中 k='AAA'、v=10(不变)

String createSerialNumberByCurrentDate(); //产生一个'yyyyMMdd00000'格式的递增组合编号

public static String createSerialNumberByCurrentDate() {

String today = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.ENGLISH).format((new java.util.Date()));

return nextSeqString(today, "00000");

}

3、应用示例
为概念'OA_LeaveApply'生成自动递增的整型序号
nextSeq('OA_LeaveApply')

为请假申请生成单据号,格式为'QJ'+六位递增序号 = QJ000001
nextSeqString('QJ', '000000')

为请假申请产生单据号,格式为'QJ'+四位年+两位月+五位递增序号 = QJ20121100001
nextSeqString(concat('QJ', dateFormat(currentDate(), 'yyyyMM')), '00000')

为请假申请产生单据号,格式为'QJ-'+机构编码+'-' + 两位年 + 四位递增序号 = QJ-JUSTEP-20120001
nextSeqString(concat('QJ-', currentOrgCode(), '-', dateFormat(currentDate(), 'yyyy')), '0000')

为请假申请产生单据号,格式为'QJ-'+四位年+'-'+六位递增序号(序号不分年度)
concat('QJ-', dateFormat(currentDate(), 'yyyy'), '-', decimalFormat(nextSeq('QJ'), '000000'))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Bex5 自定义主键