
# 1 产品概述
## 1.1 产品介绍
导入导出框架,旨在提供一套统一的解决方案,预封装一批开箱即用的操作和插件接口,可以很方便的实现数据迁移、批量更新、数据抽取、数据备份、基础资料批量分配等功能,并统一对任务进行管理,生成执行日志。
业务领域使用这套统一的框架,可以无需关心后台线程的启动和管理,直接沿用平台已经封装好的功能界面。只需要专注于实现功能逻辑,提升开发效率,保障用户体验。
## 1.2 业务场景
本文将演示如何实现“导入数据”的业务场景,然后介绍导入框架对外提供的操作和接口。
# 2 操作步骤
打开列表,找到【更多】>【导入数据】菜单(6.0及以下版本是【引入数据】菜单)。

点击【导入数据】菜单打开导入弹框,配置导入选项,上传文件后,点击【开始导入】按钮执行导入(6.0及以下版本是【开始引入】按钮)。

开始导入后,会弹出导入进度框,耐心等待执行完成。

# 3 插件干预
## 方案:实现自定义表单插件
实现方式是通过派生kd.bos.bill.AbstractBillPlugIn类.
自定义表单插件可以通过修改原始数据来实现错误数据智能修复、控制数据更新权限、跳过标准数据处理等,也可以通过修改模型数据实现完全模拟手工录单、智能填充数据等。 推荐重写下面这些方法:
```java
/** 导入前初始化 */
public void initImportData(InitImportDataEventArgs e)
/** 原始数据填充model前事件 */
public void beforeImportData(BeforeImportDataEventArgs e)
/** 原始数据填充model后,保存前事件,我们可以从model获取/修改当前已经转换好的数据,也可以添加/移除/修正基础资料缓存,提高下一条数据导入的查询和命中效率 */
public void afterImportData(ImportDataEventArgs e)
```
# 4 示例
```java
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import kd.bos.bill.AbstractBillPlugIn;
import kd.bos.entity.datamodel.BasedataItem;
import kd.bos.entity.datamodel.events.BeforeImportDataEventArgs;
import kd.bos.entity.datamodel.events.ImportDataEventArgs;
import kd.bos.entity.datamodel.events.InitImportDataEventArgs;
import kd.bos.entity.datamodel.events.QueryImportBasedataEventArgs;
public class TestBillPlugin extends AbstractBillPlugIn {
/**
* 批量导入数据初始化
*/
@Override
public void initImportData(InitImportDataEventArgs e) {
// TODO 可以遍历修改原始数据,跳过标准产品的基础资料查询逻辑
List<Map<String, Object>> datas = e.getSourceDataList();
for (Map<String, Object> data : datas) {
Map<String, String> basefielddata = data.get("基础资料字段标识");
basefielddata.put