本文介绍了在苍穹系统中设置单据编码的两种方法。一种是通过配置编码规则并在代码中调用接口生成编号,另一种是使用插件完成编码生成,利用分布式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.作为单据编号使用.而这个规则会随着插件迁移而迁移,如果存在迁移应用的时候不会受限于平台,也不用再去新系统配一遍编码规则.
推荐阅读
您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!
请选择打赏金币数 *