起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 41889|回复: 38

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

  [复制链接]

37

主题

713

帖子

3310

积分

内部用户

积分
3310
发表于 2012-11-29 10:34:00 | 显示全部楼层 |阅读模式
本帖最后由 jholy 于 2012-11-29 10:41 编辑

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'格式的递增组合编号
  1. public static String createSerialNumberByCurrentDate() {
  2.   String today = new java.text.SimpleDateFormat("yyyyMMdd", java.util.Locale.ENGLISH).format((new java.util.Date()));
  3.   return nextSeqString(today, "00000");
  4. }
复制代码

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'))

    没有做不到,只有想不到^_^

7

主题

27

帖子

131

积分

初级会员

Rank: 2

积分
131
发表于 2017-1-5 10:33:44 | 显示全部楼层

楼主您好,如果你要是真会的话,请写明tempNextSeqString是如何使用的,建议不知道如何使用就不要回答。

251

主题

1027

帖子

1383

积分

金牌会员

Rank: 6Rank: 6

积分
1383
QQ
发表于 2012-11-29 10:43:23 | 显示全部楼层
收藏了

6

主题

295

帖子

988

积分

高级会员

Rank: 4

积分
988
发表于 2012-11-29 16:12:08 | 显示全部楼层
这个帖子好
动脑不费电

论坛不认识milan,学会X5也枉然

53

主题

313

帖子

1138

积分

金牌会员

Rank: 6Rank: 6

积分
1138
QQ
发表于 2012-12-19 23:54:00 | 显示全部楼层
mark一下!

0

主题

2

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2013-1-18 13:47:46 | 显示全部楼层
MARK,之前自己弄了一下,没有写这么详细,不错,tks

197

主题

824

帖子

1889

积分

金牌会员

Rank: 6Rank: 6

积分
1889
QQ
发表于 2013-1-19 09:51:31 | 显示全部楼层
好贴,收藏了
QQ:574178224

1

主题

12

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2013-1-26 15:04:30 | 显示全部楼层
绝对好贴啊

58

主题

142

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
发表于 2013-4-11 21:57:14 | 显示全部楼层
顶,有用哦

3

主题

20

帖子

112

积分

初级会员

Rank: 2

积分
112
发表于 2013-4-16 11:05:06 | 显示全部楼层
好帖子,收藏

20

主题

63

帖子

106

积分

初级会员

Rank: 2

积分
106
QQ
发表于 2013-5-20 10:11:43 | 显示全部楼层
怎么去写尼、 新手报道。 这些写在哪里啊
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-23 18:50 , Processed in 0.101654 second(s), 30 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表