单据多个字段使用编码规则生成编号

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

单据多个字段使用编码规则生成编号

# 1 业务场景 单据中有多个字段需要使用编码规则生成编号,如单据中的“单据编号”和“业务编号”字段都需要自动生成编号。 ![image-20240125174221408.webp](/download/010037de8dce0b54435b9d1de77d16d0ebd1.webp) # 2 解决方案 **注:凭证字段或其他已包含二开编码规则插件的单据不建议使用方案二,在启动条件包含相同字段时,不可用。** 配置两个编码规则分别给两个编号字段使用: ①正常配置一个默认的编码规则给单据编号使用。 ②配置第二个编码规则设置启动条件给业务编号用。 可使用单据中某个或多个字段作为区分依据,如“是否使用业务编号编码规则”,在编码规则的启动条件中配置该字段。 ![image-20240126182359026.webp](/download/0100e7b83f42425b486ba360f284f7db28f4.webp) ![image-20240126182442513.webp](/download/0100710dbf62a0d241059fc4cf1a0fd650a1.webp) ## 2.1 方案一 自行调用编码规则生成编号接口,把生成的编号赋值给字段。建议在表单插件先预读编号,在保存/提交操作中再实际生成编号。 预读编号(CodeRuleServiceHelper.readNumber),生成单个编号(CodeRuleServiceHelper.getNumber),更多接口方法详情可参考[《编码规则接口介绍》] 此方案处理简单,但如对编号有完整性和连续性要求,需要自行控制编号的回收等逻辑。 ## 2.2 方案二 继承编码规则标准表单插件(kd.bos.form.plugin.CodeRulePlugin)和保存、提交操作插件(kd.bos.business.plugin.CodeRuleOp),重写部分方法。具体可参考以下实现: 表单插件 ```java public class CodeRulePluginDemo extends CodeRulePlugin { @Override protected String getClassName() { //用于区分标准插件 return "CodeRulePluginDemo"; } @Override protected String getBillNoField() { //指定需要生成编号的字段标识 return "businessnumber"; } @Override protected CodeRuleInfo getCodeRuleInfo() { //指定需要使用的编码规则 //设置启动条件中配置的字段符合条件 getModel().beginInit(); getModel().setValue("isusebusinessnumber", true); getModel().endInit(); CodeRuleInfo codeRuleInfo = null; try { codeRuleInfo = CodeRulePluginUtil.getCodeRuleInfoByDynamicObj(getModel().getDataEntity()); } catch (KDException e) { ErrorCode errorCode = e.getErrorCode(); if (errorCode != null && StringUtils.equals(errorCode.getCode(), "CODERULE_VALID_CONDITION_ERROR")) { throw new KDBizException(e.getMessage()); } } //恢复字段值,防止影响另一个编码规则 getModel().beginInit(); getModel().setValue("isusebusinessnumber", false); getModel().endInit(); return codeRuleInfo; } } ``` 操作插件(注意需要注册到保存和提交操作上) ```java public class CodeRuleOpDemo extends CodeRuleOp { @Override protected String getClassName() { //用于区分标准插件 return "CodeRuleOpDemo"; } @Override protected String getBillNoField(BillEntityType billEntityType) { //指定需要生成编号的字段标识 return "businessnumber"; } @Override protected CodeRuleInfo getCodeRuleInfo(DynamicObject dynamicObject) { //指定生成编号需要使用的编码规则 //设置启动条件中配置的字段符合条件 dynamicObject.beginInit(); dynamicObject.set("isusebusinessnumber", true); dynamicObject.endInit(); CodeRuleInfo codeRuleInfo = super.getCodeRuleInfo(dynamicObject); //恢复字段值,防止影响另一个编码规则 dynamicObject.beginInit(); dynamicObject.set("isusebusinessnumber", false); dynamicObject.endInit(); return codeRuleInfo; } @Override protected CodeRuleInfo checkCodeRule(String entityNum, List<CodeRuleInfo> codeRuleList, DynamicObject dynamicObject) { //指定回收编号需要使用的编码规则 //设置启动条件中配置的字段符合条件 dynamicObject.beginInit(); dynamicObject.set("isusebusinessnumber", true); dynamicObject.endInit(); CodeRuleInfo codeRuleInfo = super.checkCodeRule(entityNum, codeRuleList, dynamicObject); //恢复字段值,防止影响另一个编码规则 dynamicObject.beginInit(); dynamicObject.set("isusebusinessnumber", false); dynamicObject.endInit(); return codeRuleInfo; } } ```

单据多个字段使用编码规则生成编号

# 1 业务场景单据中有多个字段需要使用编码规则生成编号,如单据中的“单据编号”和“业务编号”字段都需要自动生成编号。![image-202401...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息