引入的应收应付单据如何与上游建立关联关系
业务场景:XXX集团公司,下游单据是通过api接口引入的,与源单没有关联关系,现希望能构建上下游单据的关联关系并能正常触发标品的反写规则。(以引入应付单与入库单建立关联为例)
实现分析:在afterImportData方法中创建关联子实体行数据,此方法在引入字段值填写完毕,保存之前触发,构建完关系后即可在保存时正常触发反写规则。(根据平台介绍的实现方式实现)
调用时机:
代码示例:
/**
* @param targetBill 目标单据
* @param srcTableDefine 源单单据体表格定义:包含了源单标识、单据体标识、tableid
* @param targetTableDefine 目标单单据体表格定义:包含了源单标识、单据体标识、tableid
* @param srcBillIdKey 源单id标识
* @param srcBillEntryIdKey 源单分录id标识
*/
private void createLinkEntity(DynamicObject targetBill, TableDefine srcTableDefine, TableDefine targetTableDefine, String srcBillIdKey, String srcBillEntryIdKey) {
//源单实体表格编码
Long srcTableId = srcTableDefine.getTableId();
// 拼接处关联子实体标识:如果是单据头下的lk子表,固定使用billhead_lk;如果是单据体下的lk子表,用单据体标识+lk
String lkEntryKey = targetTableDefine.getEntityKey() + "_lk";
//引入单据的分录
DynamicObjectCollection targetEntrys = targetBill.getDynamicObjectCollection(targetTableDefine.getEntityKey());
for (DynamicObject entry : targetEntrys) {
DynamicObjectCollection linkRows = entry.getDynamicObjectCollection(lkEntryKey);
if (!linkRows.isEmpty()) {
continue;
}
//创建一条_lk子实体上数据,记录源单内码
DynamicObject linkRow = new DynamicObject(linkRows.getDynamicObjectType());
linkRows.add(linkRow);
// 在lk行中,记录源单分录表格编码、源单内码、源单分录内码
linkRow.set(lkEntryKey + "_stableid", srcTableId); // 源单分录表格编码:以此标识源单类型及单据体
linkRow.set(lkEntryKey + "_sbillid", entry.getString(srcBillIdKey)); // 源单内码
linkRow.set(lkEntryKey + "_sid", entry.getString(srcBillEntryIdKey)); // 源单分录行内码
}
}
注意事项 :
表头.源单类型:记录上游单据的单据类型
分录.源单id:关联生成时,上游单据的单据id
分录.源单分录id:关联生成时,上游单据的单据分录id
如果调用api接口引入前就可以知道上下游单据分录对应关系,那么调用引入接口时需要将上面三个字段引入。
如果现场记录行关系的字段为其他字段,那么也需要在afterImportData中根据现场业务找到行级对应关系后给上面字段赋值。
引入的应收应付单据如何与上游建立关联关系
本文2024-09-22 22:46:29发表“云星瀚知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-xinghan-128773.html