如何修复BOTP的关联关系原创
金蝶云社区-陈来珍
陈来珍
15人赞赏了该文章 8,565次浏览 未经作者许可,禁止转载编辑于2022年04月14日 18:11:16
summary-icon摘要由AI智能服务提供

本文描述了在使用苍穹系统中,由于手工录入或引入的单据与源单缺乏关联关系,导致无法支持联查、反写等问题,特别是在业务拆单时反写规则失效。为解决此问题,本文提出了在采购申请单下推生成采购订单时,根据物料类型拆分生成同一单据采购订单分录,并在保存时修复关联关系并触发反写的方案。具体实现包括为单据添加关联字段、配置转换和反写规则、实现修复关联关系的逻辑等步骤。最终实现了下推、反写及下查功能,确保关联关系修复成功。

关键词:Botp、业务拆单、关联关系的修复

一、需求背景

    下游单据是手工录入、或者引入的,与源单没有关联关系,不支持联查、反写。或者在进行业务单据的拆单的时候生成的新单据或者新分录行的时候,苍穹系统配置的反写规则无法生效,无法进行正常的反写以及上查下查等,需要进行关联关系的修复。本案例是对采购申请单下推生成采购订单的时候,需要根据采购申请单的采购分录上物料字段是否是同一个类型(分类)的物料,拆分生成同一个单据的一个采购订单分录上。在采购订单保存时修复关联关系并触发反写。

业务拆单需求背景:https://vip.kingdee.com/article/253166127671170816

1.png

2.png

二、思路与方案

     为目标单据(采购订单)添加一个单据头字段,记录下推的源单(采购申请单)的单据编号,为目标单据的订单分录添加一个字段,记录关联的源单行数;上面两个字段值都由转换规则配置映射过来。最后在目标单据保存操作后修复关联关系并再次调用保存触发反写。

三、实现过程

1、采购订单添加关联字段

3.png

①上游关联单据编号-文本类型:记录源单单据编号的字段名:据此确定每张单据的源单

②是否已修复关联关系-复选框:在保存后调用的修复关联关系的逻辑,需要再才调用保存,才能触发反写规则设置的保存时即反写的条件并触发反写。该字段是为了避免死循环设置的字段,在修复关联关系时设置为开启(true)

③上游关联分录行-整数:记录源单单据体关联的分录行号

2、配置转换规则和反写规则

(1)转换规则

4.png

5.png

(2)反写规则:已申请数量=已申请数量+采购数量

6.png

超额设置:

7.png

3、修复关联关系逻辑实现

public class OderSaveOperationPlugIn extends AbstractOperationServicePlugIn {
    //保存操作执行完毕,事务提交之后,触发此事件;保存关联关系的修复
        @Override
    public void afterExecuteOperationTransaction(AfterOperationArgs e) {
       if (e.getOperationKey().equals("save")) {
           DynamicObject[] ordDataEntities = e.getDataEntities();
           for (DynamicObject ordObj : ordDataEntities) {
              if (ordObj.getBoolean("sunp_iffixrowlink")) {
//保存后修复关联关系,修复关联关系的时候需要保存,所以修复关联关系一次之后的保存不进入修复关联关系,否则死循环。
                  continue; }
              /**上游单据-采购申请单:sunp_reqbill_demo,采购申请单关联单据体标识:sunp_reqentryentity 
               * 下游单据-采购订单单据标识:sunp_order_demo,订单分录关联的单据体标识:sunp_ordentryentity
               */
              //手动修复关联关系帮助类
              AutoFixLinkHelp autoFixLinkHelp = new AutoFixLinkHelp();
              //采购订单单据主键值
              Object pkId = ordObj.get("id");
              //下游单据头上,记录源单单据编号的字段名:sunp_srcbillno据此确定每张单据的源单
              autoFixLinkHelp.fixRowLink("sunp_order_demo", "sunp_ordentryentity", "sunp_reqbill_demo", "sunp_srcbillno", "sunp_reqentryentity", "sunp_linkrow", pkId);
           }
       }
       super.afterExecuteOperationTransaction(e);
    }
}

4、AutoFixLinkHelp是关联关系修复的一个帮助类,代码详情查看附件代码

四、实现效果

1、点击下推,显示下推成功(转换规则设置了自动保存,会触发上面的修复关联关系的逻辑)

8.png

2、点击刷新,可以看到反写的已申请数量的值反写成功

9.png

3、点击下查

(1)可以成功下查,说明关联关系修复成功

10.png

可以看到,上游关联单据编号;是否已修复关联关系;上游关联分录行记录了源单(采购申请单的一些关联信息),实际应用中可以隐藏调用这些字段。

11.png

五、开发环境版本

COSMICV4.0.010.0

六、参考资料

【开发平台】指导手册

学习成长中心

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