对账中心扩展开发指导
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 , * 分录 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; }
对账中心扩展开发指导
本文2024-09-22 23:54:50发表“云星瀚知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-xinghan-136085.html