对账中心扩展开发指导

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

对账中心扩展开发指导

1.  业务背景


从多个客户的在线反馈和提单诉求来看,采购企业和供应商均可通过对账中心发起对账。一方发起,另一方确认。可按收货或者入库对账。现场项目经常需要在对账中心增加扩展字段。典型客户需求如下:

- 对账中心需要能按合同号查询入库单、对账中心需要显示入库单关联的合同号;

- 对账中心需要能按工厂采购员查询入库单、对账中心需要显示工厂采购员关联的合同号;

- 商品采购没有物料编码、只有商品编码,对账中心需要能按商品编码查询入库单、对账中心需要显示商品编码关联的合同号,并且携带到对账单中。

因此,基于上面场景,我们可以看出对于对账中心的主要扩展场景有:

- 对账中心查询条件增加字段,并在对账中心显示

- 对账中心中新增字段,并携带到对账单

针对这两个场景,我们做了两个开发案例。


2.  二次开发案例



2.1  对账中心查询条件增加字段


2.1.1 业务场景简介

对账中心需要根据合同号过滤对账单,并且在对账中心显示入库单关联的合同号

2.1.2 简要实现方案

1. 在对账中心页面(pur_checkcenter)增加字段采购合同(pcbillno)。路径:供应商协同云-采购协同-对账中心

2. 元数据入库明细对账(pur_handcheck)的分录物料明细(materialentryentity3)和全部物料明细(allmaterialentry)分别加上字段:pcbillno3pcbillno4

在分录materialentryentity3中添加的字段,需要加上后缀3,在allmaterialentry分录添加的字段,需要带上后缀4。可以参考原有的分录字段。

3. 新建一个java类,实现接口 IpurHandCheckSupport(采购方)或者 IScpHandCheckSupport(供应商方)

/**
 * 扩展 IPurHandCheckSupport 接口实现
 */
public class HandCheckSupportImpl implements IPurHandCheckSupport {
    
}


并且把这个 java 类注册到配置工具-->业务扩展-->业务扩展插件中。具体如下图:

新增的时候需要注意,采购端和供应商端需要分别实现 kd.sdk.scm.pur.extpoint.IPurHandCheckSupportkd.sdk.scm.scp.extpoint.IScpHandCheckSupport,除了接口不同之外,其他都相同,后续文档都以采购端为例,供应商端操作同理。

4. 在创建的 java 类中实现 IpurHandCheckSupport 接口的方法: getExtendParams

/**
 * 对账中心新增查询条件的标识列表
 */
@Override
public List<String> getExtendParams() {
    List<String> fields=new ArrayList<>();
    fields.add("pcbillno");
    return fields;
}


5. 实现接口方法:getParamsMap

/**
 * 设置查询条件内容,用于携带到对账中心页面
 * 把单据pur_checkcenter新增的条件携带到新打开的单据pur_handcheck上
 *
 * @param extendParams 对账中心pur_checkcenter
 * @return
 */
@Override
public Map<String, Object> getParamsMap(Map<String, Object> extendParams) {
    Map<String, Object> filterMap = new HashMap<>(5);
    String pcbillno3 = (String) extendParams.get("pcbillno3");
    filterMap.put("pcbillno3", pcbillno3);
    String pcbillno4 = (String) extendParams.get("pcbillno4");
    filterMap.put("pcbillno4", pcbillno4);
    return filterMap;
}


6. 实现接口方法:getFilterMap

/**
 * 从上述 getParamsMap 的返回结果携带到入库明细对账的 paramsMap 数据,在查询数据的时候,转换成查询条件
 *
 * @return
 */
@Override
public Map<String, Map<String, Object>> getFilterMap(
        Map<String, Object> paramsMap, String entityKey) {
    Map<String, Map<String, Object>> filterMap = new HashMap<>(5);
    
    Object pcbillno3 = paramsMap.get("pcbillno3");
    Object pcbillno4 = paramsMap.get("pcbillno4");
    
    if (pcbillno3 != null) {
        Map<String, Object> filter3 = new HashMap<>(1);
        filter3.put(QCP.equals, pcbillno3);
    }
    if (pcbillno4 != null) {
        Map<String, Object> filter4 = new HashMap<>(1);
        filter4.put(QCP.equals, pcbillno4);
    }
    
    return filterMap;
}


2.2  在对账中心显示字段,并将字段携带到对账单上面


2.2.1 业务场景简介

在客户化开发的过程中,可能会有现场需要在对账中心增加需要显示的字段,并且讲字段携带到对账单上面。

2.2.2 简要实现方案

1. 元数据修改:

- 元数据入库明细对账(pur_handcheck)的分录物料明细(materialentryentity3)和全部物料明细(allmaterialentry)分别加上字段:pcbillnoloccur。在分录 materialentryentity3 中添加的字段,需要加上后缀3,在 allmaterialentry 分录添加的字段,需要带上后缀4。可以参考原有的分录字段。

- 对账单元数据 pur_check 的分录增加字段 pcbillnoloccur

2. 新建一个 java 类,实现接口 IpurHandCheckSupport(采购方)或者 IScpHandCheckSupport(供应商方),并且把这个 java 类注册到 配置工具-->业务扩展-->业务扩展插件中。

新增的时候需要注意,采购端和供应商端需要分别实现 kd.sdk.scm.pur.extpoint.IPurHandCheckSupportkd.sdk.scm.scp.extpoint.IScpHandCheckSupport ,除了接口不同之外,其他都相同,后面都已采购端来写文档,供应商端替换接口后对照实现。

3. 实现接口方法:getEntityExtendFieldsMap

/**
 * 单据与查询字段列表的集合,用于检查校验对应单据(如采购入库单扩展新增了单据头 loccur,
 * 分录 pcbillno 字段)需要查询的字段范围,是可选实现方法;
 * 返回单据新增字段列表,key为单据标识,值为新增字段列表,格式与getExtendFields返回的内容格式一致。
 * @return
 */
@Override
public Map<String, List<String>> getEntityExtendFieldsMap() {
    List<String> extFields = new ArrayList<>();
    // 内容与 getExtendFields 的一致
    List<String> extendField = getExtendFields();
    if (extendField!=null && !extendField.isEmpty()){
        extFields.addAll(extendField);
    }
    Map<String,List<String>> extFieldsMap = new HashMap<>();
    //Key为单据,值为需要查询的字段列表
    extFieldsMap.put(PurMetaDataConstant.PUR_RETURN,extFields);
    return extFieldsMap;
}


4. 实现接口方法: getExtendFields

/**
 * 单据新增字段列表,如采购入库单扩展新增了单据头 loccurr ,
 * 分录 pcbillno 字段,用于拼凑 ksql 的查询字段
 * @return
 */
@Override
public List<String> getExtendFields(){
    List<String> fields = new ArrayList<>();
    // 单据头上的字段:字段名 别名
    fields.add("loccurr loccurr");
    // 单据分录上的字段:分录名.字段名 别名
    fields.add("materialentry.pcbillno pcbillno");
    return fields;
}


5. 实现接口方法:putCheckHeadFields

/**
 * 设置对账单单据头内容
 * @param checkHeadDetail
 * @param sourceDetail
 * @return
 */
@Override
public DynamicObject putCheckHeadFields(DynamicObject checkHeadDetail, DynamicObject sourceDetail) {
    Object tempField = sourceDetail.get("loccurr3");
    checkHeadDetail.set("loccurr",tempField);
    return checkHeadDetail;
 }


6. 实现接口方法:putCheckEntryFields

/**
 * 设置对账单分录内容,需要携带到对账单分录的数据处理
 * @param checkEntryDetail
 * @param sourceDetail
 * @return
 */
@Override
public DynamicObject putCheckEntryFields(DynamicObject checkEntryDetail,DynamicObject sourceDetail){
    Object tempField = sourceDetail.get("pcbillno3");
    checkEntryDetail.set("pcbillno",tempField);
    return checkEntryDetail;
}



2.3  在对账中心汇总显示字段,并将根据字段拆单


2.3.1 业务场景简介

在客户化开发的过程中,可能会有现场需要在对账中心根据二开字段拆单的情况比如仓库,并且将字段携带到对账单上面,字段携带按照2.2实现。

2.3.2 简要实现方案

1. 新建一个java类,实现接口IpurHandCheckSupport(采购方)或者IScpHandCheckSupport(供应商方),并且把这个java类注册到 配置工具-->业务扩展-->业务扩展插件中。具体如下图:

2. 实现接口方法:

/**
 * Map.key 单据体表示
 * Map.value 方法 getExtendFields 添加的字段
 *
 * @return
 */
@Override
public Map<String, List<String>> getEntityExtendFieldsMap() {
    List<String> extFields = new ArrayList<>();
    List<String> extendField = getExtendFields();
    if (extendField != null && !extendField.isEmpty()) {
        extFields.addAll(extendField);
    }
    Map<String, List<String>> extFieldsMap = new HashMap<>();
    extFieldsMap.put("scp_instock", extFields);
    extFieldsMap.put("scp_receipt", extFields);
    extFieldsMap.put("scp_return", extFields);
    return extFieldsMap;
}
@Override
public List<String> getExtendFields() {
    List<String> fields = new ArrayList<>();
   //单据分录上的字段:分录名.字段名  别名
    fields.add("materialentry.warehouse kdtest_warehouse");
    fields.add("materialentry.warehouse warehouse");
    return fields;
}
@Override
public List<String> removeCheckGroups() {
    List<String> fields = new ArrayList<>();
    //单据头上的字段:字段名别名
    //fields.add("taxtype");
    return fields;
}
@Override
public Map<String, List<String>> getExtendCheckGroups() {
    List<String> extFields = new ArrayList<>();
    extFields.add("materialentry.warehouse kdtest_warehouse");
    Map<String, List<String>> extFieldsMap = new HashMap<>();
    //key为单据,值为需要查询的字段列表
    extFieldsMap.put(PurMetaDataConstant.PUR_INSTOCK, extFields);
    return extFieldsMap;
}


对账中心扩展开发指导

1. 业务背景从多个客户的在线反馈和提单诉求来看,采购企业和供应商均可通过对账中心发起对账。一方发起,另一方确认。可按收货或者入库...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息