凭证业务流程自定义校验器

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:1

凭证业务流程自定义校验器

目前凭证常用业务操作都提供了内置的标准校验功能,以确保数据流转的合法性。如凭证提交、复核等都有相关的业务校验。如用户存在个性需求需要二开,本案例供开发人员参考: * 需求目标:凭证分录指定科目(示例科目-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 * 自定义类代码编写,实现第二点的接口 * 停服部署验证

凭证业务流程自定义校验器

目前凭证常用业务操作都提供了内置的标准校验功能,以确保数据流转的合法性。如凭证提交、复核等都有相关的业务校验。如用户存在个性需求需...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息