凭证业务流程自定义校验器
目前凭证常用业务操作都提供了内置的标准校验功能,以确保数据流转的合法性。如凭证提交、复核等都有相关的业务校验。如用户存在个性需求需要二开,本案例供开发人员参考:
* 需求目标:凭证分录指定科目(示例科目-1001现金)的分录金额不能超过10000元,否则给出提示不可提交
* 需求分析:
* 凭证提交阶段,进行凭证分录相关属性的检查
* 实现思路:
* 找到凭证提交服务,分析标准校验器的注册流程
* 关键代码
* *com.kingdee.eas.fi.gl.app.voucher.VoucherServiceFactory* 凭证服务工厂类,找到凭证提交服务(凭证业务服务工厂,其他凭证业务操作如反审核、反过账等也可从此处查找)
* *com.kingdee.eas.fi.gl.app.voucher.VoucherServiceFactory#getSubmitVoucherService* 获取凭证提交服务,标准凭证(冲销凭证、自动分摊凭证等不属于标准凭证)提交返回类型为*com.kingdee.eas.fi.gl.app.voucher.SubmitStandradVoucherService*, 该服务实现了*com.kingdee.eas.fi.gl.app.voucher.ISubmitVoucherService#submitVoucher* 方法,分析关键步骤
* *com.kingdee.eas.fi.gl.app.voucher.AbstractSubmitBaseVoucherService#initVoucherValidator* 初始化凭证校验器
* *com.kingdee.eas.fi.gl.app.voucher.SubmitStandradVoucherService#initVoucherValidator* 初始化凭证提交校验器,标准代码内置了凭证头、分录、分录辅助账3层数据校验,并提供了从数据库中获取配置的校验器,这种模式是给二开或关联模块提供的开发入口
* *com.kingdee.eas.fi.gl.validator.VoucherValidatorFactory#getVoucherValidator(ctx, this.getClass().getName(), validator)* 参数2指定了调用服务的全限定类名*com.kingdee.eas.fi.gl.app.voucher.SubmitStandradVoucherService*
* *com.kingdee.eas.fi.gl.validator.VoucherValidatorFactory#queyValidatorCollection* 数据库查询,指定了校验器的调用者为服务调用的全限定类名,通过Validator实体发起查询,通过*com.kingdee.eas.fi.gl.validator.AbstractValidatorInfo#getBOSType*定位注册表实体的BOSType为 8B863EF3
* *com.kingdee.eas.fi.gl.validator.VoucherValidatorFactory#populateValidatorCollection* 对扩展的校验器基于注册表的校验类型进行分类,区分校验部位:
* *com.kingdee.eas.fi.gl.validator.IVoucherBaseValidator* 凭证头
* *com.kingdee.eas.fi.gl.validator.IVoucherEntryValidator* 分录
* *com.kingdee.eas.fi.gl.validator.IVoucherAssistRecordValidator* 辅助账
* *com.kingdee.eas.fi.gl.app.voucher.AbstractSubmitBaseVoucherService#validatorVoucher* 校验凭证,针对凭证头、分录、辅助账分别进行校验
* 通过上一步骤分析后即可注册一个校验器,进行测试验证
* 校验器注册到分录级别,作用于凭证提交,注册表脚本如下:
* *insert into T_gl_validator(FID, FCallClassName, FValidatorInterface, FValidatorClassName)
values(newBosID('8B863EF3'), 'com.kingdee.eas.fi.gl.app.voucher.SubmitStandradVoucherService', 'com.kingdee.eas.fi.gl.validator.IVoucherEntryValidator', 'com.kingdee.eas.fi.gl.validator.EntryLocalAmountValidator')*
* **bosid函数生成的指定实体FID**
* **指定该校验器的调用者,此处为凭证提交服务**
* **指定校验部位,此处为凭证分录**
* **需要编写的java类的全限定类名,该类需实现指定校验部位 IVoucherEntryValidator 接口**
* 编写自定义类(**注意:二开或者领域依赖请放置在总账以外的路径**)
* ```java
package com.kingdee.eas.fi.gl.validator;
public class EntryLocalAmountValidator implements IVoucherEntryValidator {
@Override
public void validate(Context ctx, BaseVoucherInfo voucherInfo, BaseVoucherEntryInfo entryInfo)
throws BOSException, EASBizException {
// 凭证分录指定科目(示例科目-1001现金)的分录金额不能超过10000元
if ("1001".equals(entryInfo.getAccount().getNumber())
&& entryInfo.getLocalAmount().compareTo(new BigDecimal("10000.00")) > -1) {
throw new BOSException("1001 科目金额不能超过10000.00");
}
}
}
```
* 效果![downloadfile.webp](/download/010040334d9ccab74ed884834094e76cffa5.webp)
* 总结基本流程
* 确认校验器的调用者,凭证提交阶段 SubmitStandradVoucherService
* 确认校验器级别,凭证头还是分录等,IVoucherEntryValidator
* 编写注册表脚本 T_gl_validator
* 自定义类代码编写,实现第二点的接口
* 停服部署验证
凭证业务流程自定义校验器
目前凭证常用业务操作都提供了内置的标准校验功能,以确保数据流转的合法性。如凭证提交、复核等都有相关的业务校验。如用户存在个性需求需...
点击下载文档
本文2024-09-22 18:24:27发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-100571.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章