
# 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.loadSi