如何修复BOTP的关联关系原创
金蝶云社区-陈来珍
陈来珍
15人赞赏了该文章 6408次浏览 未经作者许可,禁止转载编辑于2022年04月14日 18:11:16

关键词: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