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

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

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

# 3 插件干预
## 方案:实现自定义导入插件
实现方式是通过派生kd.bos.form.plugin.impt.BatchImportPlugin类.
自定义导入插件可以干预导入弹框上字段的锁定性、导入参数的缺省值,也可以重写后续导入执行的插件方法来实现导入过程的完全控制与定制,比如自定义解析逻辑来支持特殊格式的excel,自定义保存逻辑实现跨实体数据更新,修改原始数据来实现错误数据智能修复等等。 推荐重写下面这些方法:
```java
/** 获取待导入的实体key */
public String getBillFormId()
/** 覆盖导入的匹配字段 */
public List<ComboItem> getOverrideFieldsConfig()
/** 覆盖导入匹配字段的缺省值 */
public String getDefaultKeyFields()
/** 缺省导入模式,新增、覆盖、覆盖并新增 */
public String getDefaultImportType()
/** 缺省 锁定的控件列表 */
public List<String> getDefaultLockUIs()
/** 解析excel */
protected void resolveExcel()
/** 导入数据,主要是轮询取数,并对数据分批,分析数据依赖关系,整理保存结果等 */
protected void importData()
/** 保存前预处理数据*/
protected void beforeSave(List<ImportBillData> billdatas, ImportLogger logger)
/** 保存 */
protected ApiResult save(List<ImportBillData> rowdatas, ImportLogger logger)
/** 是否强制批处理
* @return true,如果多列中不够一批将等待;false 不管队列中有多少数据,取多少用多少
*/
protected boolean isForceBatch()
/** 导入的批量数据大小 */
protected int getBatchImportSize()
/** 构建Web API保存操作实例,用于转换Json并保存单据 */
public AbstractOperateWebApi getSaveWebApi()
/** 根据数据动态构造实体类型 */
protected MainEntityType buildMainEntityType(JSONObject billdata)
/** 根据模板数据动态构造导出实体模型(导出或下载模板用) */
public MainEntityType getExportMainEntityType(String billFormId, DynamicObject templateData)
```
# 4 示例
```java
package kd.bos.form.plugin.impt;
public class TestBatchImportPlugin extends BatchImportPlugin {
/**
* 自定义实体标识
*/
@Override
public String getBillFormId() {
return "yl_testbaseimport";
}
/**
* 自定义匹配字段下拉选项
*/
@Override
public List<ComboItem> getOverrideFieldsConfig() {
List<ComboItem> items = new ArrayList<>();
items.add(new ComboItem(new LocaleString("匹配字段1"), "field1"));
items.add(new ComboItem(new LocaleString("匹配字段2"), "field2"));
items.add(new ComboItem(new LocaleString("匹配字段3"), "field3"));
return items;
}
/**
* 匹配字段下拉选项 缺省勾选值
*/
@Override
public String getDefaultKeyFields() {
return "field1,field3";
}
/**
* 导入类型 缺省值,可选new、override、overridenew
*/
@Override
public String getDefaultImportType() {
return "override";
}
/**
* 导入弹框 缺省锁定哪些控件,比如可以锁定导入类型不然用户修改,也可以预制匹配字段缺省值后锁定匹配字段等,可选导入弹框上的所