苍穹开发中使用编码规则的一点建议原创
金蝶云社区-DC_W
DC_W
4人赞赏了该文章 1,540次浏览 未经作者许可,禁止转载编辑于2021年11月24日 10:40:16
summary-icon摘要由AI智能服务提供

本文介绍了在苍穹系统中设置单据编码的两种方法。一种是通过配置编码规则并在代码中调用接口生成编号,另一种是使用插件完成编码生成,利用分布式ID服务生成全局唯一ID,并给出了示例代码。后者具有灵活性高、不受限于平台等优点。

众所周知,在苍穹中要设置单据编码,可以在编码规则中配置:路径:【系统云】-【配置工具】-【业务规则】-【编码规则】

然后,在代码里面使用对应的苍穹接口控制:


1.根据实体获取编码规则接口名:getCodeRuleByEntityID

生成编号(会消耗流水号或者消耗断号)接口名:getNumber 这个接口会根据指定实体,实体对象信息,受控组织ID,生成合适的编号。调用后会导致最大号加1,或者导致断号记录被消耗(当前编码规则的应用规则为“不允许断号”时,才会消耗断号表的记录)


2.读取编码(只是获取一个即将使用的编码,但不消耗流水号)接口名:readNumber 这个接口会根据指定实体,实体对象信息,受控组织ID,生成合适的编号。调用后最大号不变,断号记录也不会被消耗。


但实际上,配置编码规则比较麻烦以及不够灵活,可以使用插件完成编码生成:

使用分布式ID服务,提供生成环境内全局唯一ID:全局唯一、趋势有序、高性能、高可靠

kd.bos.id.ID接口:

tatic long genLongId()

static long[] genLongIds(int count)


static String genStringId()

static String[] genStringIds(int count)


static String toStringId(long id)

static long toLongId(String id) 


// 获取创建ID的时间,可用于判断数据生成的大致时间。

static Date getCreateTime(long id)

static Date getCreateTime(String id)


示例代码:


    @Override
    public void afterCreateNewData(EventObject e) {
        String stringId = ID.longTo36Radix(ID.genLongId());
        String id = DATEFORMAT.format(LocalDateTime.now()) + "_" + stringId;
        this.getModel().setValue(BILL_NUMBER, id);
    }

这里采用日期和生成的分布式ID组合而成,具体可以根据需求自行组合ID.作为单据编号使用.而这个规则会随着插件迁移而迁移,如果存在迁移应用的时候不会受限于平台,也不用再去新系统配一遍编码规则.



图标赞 4
4人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0