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'))
虽然时间有些老,但是非常实用。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'))
相关文章推荐
- 自动生成C# 年月日加流水号的单据号、及日期时间相关函数的用法
- sql server 按照日期自动生成单据编号的函数
- sql server 按照日期自动生成单据编号的函数
- C++中string相关函数用法
- memset()及相关函数用法及注意事项
- HGLOBAL及与其相关的几个函数的用法
- ShellExecute函数相关用法
- NSLayoutConstraint-代码实现自动布局的函数用法说明
- c语言文件操作相关函数的用法
- Oracle group by 及相关函数用法实例详解
- STL中流相关的输入输出符和get函数彻底总结:cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 自定义函数做标识列的例子,不自动重排编号,而是自动补号
- 自定义函数做标识列的例子,不自动重排编号,而是自动补号
- map及其相关函数的用法
- ctype.h包含的相关函数的用法
- strcpy函数用法详细解释和其相关问题
- MySQL自动增加的编号用法
- 自定义函数做标识列的例子,不自动重排编号,而是自动补号
- 自定义函数做标识列的例子,不自动重排编号,而是自动补号(zt)
- 软件版本号定义、自动编号和相关的Visual Studio插件