表单插件干预导入基础资料取数
# 1 前言
导入过程将触发单据的表单插件,可以通过注册表单插件的方式来干预导入的基础资料字段取数。
# 2 业务场景
在导入基础资料类型的数据时,需要根据内码、编码或名称来获取到唯一的基础资料数据。但是当根据编码或名称查到多个结果时,这条数据就会导入失败,可以通过表单插件进行干预需要导入的基础资料。
# 3 实现方案
在表单设计器中注册插件继承表单插件基类kd.bos.entity.plugin.AbstractDataModelPlugin后重写queryImportBasedata()方法,设置正确的id即可。
## 代码示例
```
/**
* 自定义导入的基础资料
* 例:某张单据存在一个为“物料”的基础资料,在导入时根据物料的名称得到多条数据,筛选出符合自定义条件的数据(以筛选电风扇为例)
**/
public class CustomizeBaseDataImport extends AbstractBillPlugIn {
public static final String MATERIEL = "materielfield";
@Override
public void queryImportBasedata(QueryImportBasedataEventArgs e) {
Map<BasedataItem, List<Object>> searchResult = e.getSearchResult();
for (Map.Entry<BasedataItem, List<Object>> baseDataItemListEntry : searchResult.entrySet()) {
BasedataItem basedataItem = baseDataItemListEntry.getKey();
if (basedataItem.getFieldKey().equals(MATERIEL)) {//判断当前基础资料是否为 物料
//遍历物料的内码,根据内码拿到物料的数据包,选择长度为 20 的 电风扇
for (int i = 0;i < baseDataItemListEntry.getValue().size();i++){
DynamicObject dyn = BusinessDataServiceHelper.loadSingle(baseDataItemListEntry.getValue().get(i), basedataItem.getEntityNumber());
if(dyn.getLong("length") == 20){
baseDataItemListEntry.setValue(Collections.singletonList(baseDataItemListEntry.getValue().get(i)));//设置物料id
}
}
}
}
}
}
```
## 插件注册
![1.webp](/download/0100cf200c6aabca4469829ba31f7bad86b7.webp)
## 效果展示
**需要导入的数据:**
![2.webp](/download/0100cb26823f32e644c687c0f32236026018.webp)
**物料名称为“电风扇”的数据:**
![3.webp](/download/0100a001dc231480483da16b69c2ecd84b0a.webp)
**未设置插件时导入结果:**
![4.webp](/download/0100f09ac7bf58e14a7e86978db15de820ca.webp)
**设置插件后导入结果:**
![5.webp](/download/0100ff2f15fb8c924d82a20b4adbe419bc90.webp)
表单插件干预导入基础资料取数
# 1 前言导入过程将触发单据的表单插件,可以通过注册表单插件的方式来干预导入的基础资料字段取数。# 2 业务场景在导入基础资料类型的...
点击下载文档
本文2024-09-23 00:36:07发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-140517.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章