对账中心扩展开发指导

1. 业务背景
从多个客户的在线反馈和提单诉求来看,采购企业和供应商均可通过对账中心发起对账。一方发起,另一方确认。可按收货或者入库对账。现场项目经常需要在对账中心增加扩展字段。典型客户需求如下:
- 对账中心需要能按合同号查询入库单、对账中心需要显示入库单关联的合同号;
- 对账中心需要能按工厂采购员查询入库单、对账中心需要显示工厂采购员关联的合同号;
- 商品采购没有物料编码、只有商品编码,对账中心需要能按商品编码查询入库单、对账中心需要显示商品编码关联的合同号,并且携带到对账单中。
因此,基于上面场景,我们可以看出对于对账中心的主要扩展场景有:
- 对账中心查询条件增加字段,并在对账中心显示
- 对账中心中新增字段,并携带到对账单
针对这两个场景,我们做了两个开发案例。
2. 二次开发案例
2.1 对账中心查询条件增加字段
2.1.1 业务场景简介
对账中心需要根据合同号过滤对账单,并且在对账中心显示入库单关联的合同号
2.1.2 简要实现方案
1. 在对账中心页面(pur_checkcenter)增加字段采购合同(pcbillno)。路径:供应商协同云-采购协同-对账中心

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




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


新增的时候需要注意,采购端和供应商端需要分别实现 kd.sdk.scm.pur.extpoint.IPurHandCheckSupport 和kd.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)分别加上字段:pcbillno 和 loccur。在分录 materialentryentity3 中添加的字段,需要加上后缀3,在 allmaterialentry 分录添加的字段,需要带上后缀4。可以参考原有的分录字段。
- 对账单元数据 pur_check 的分录增加字段 pcbillno 和 loccur 。
2. 新建一个 java 类,实现接口 IpurHandCheckSupport(采购方)或者 IScpHandCheckSupport(供应商方),并且把这个 java 类注册到 配置工具-->业务扩展-->业务扩展插件中。
新增的时候需要注意,采购端和供应商端需要分别实现 kd.sdk.scm.pur.extpoint.IPurHandCheckSupport 和kd.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 , * 分录 pcbi
对账中心扩展开发指导
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



