简体中文
md.excelimport.before
约 604 字大约 2 分钟
2025-12-15
该钩子发生在excel导入本地数据之前。 对导入的的数据增加一些额外处理
拦截导入操作
自定义导入数据
自定义导入数据列
自定义导出错误提示
自定义导入提示页面按钮
参数
| 参数 | 说明 | 类型 |
|---|---|---|
| 通用参数 | 详见 | -- |
| objApiName | 从对象apiName | String |
| recordType | 从对象业务类型 | String |
返回结果
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| importConfig | 自定义导入操作 | Object | -- |
importConfig
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| afterFormatDatas | 格式化数据/自定义错误提示/自定义按钮等 | Object | -- |
| filtersMappingFields | 过滤导入字段 | Function | -- |
| forceImportFields | 底层对于不可编辑的字段不能导出,可以通过它要求底层支持 | Array | -- |
| filterExcelDatas | 过滤excel数据,比如可以过滤掉业务上认为为空的行数据 | Function | |
| validateMappingFields | 自定义字段映射校验信息 | Function |
基础示例
自定义错误提示/自定义按钮
export default class Plugin {
apply() {
return [{
event: 'md.excelimport.before',
functional: this.mdExcelImportBefore.bind(this)
}]
}
//如果是vcrm项目的中台插件需要交互参数位置
//mdExcelImportBefore(plugin, context)
mdExcelImportBefore(context, plugin) {
return Promise.resolve({
importConfig: {
afterFormatDatas(opts) {
const {formatDatas, trDatas, event, workbook, fieldMappins} = context;
//自定义导入提示
let messages = {};
formatDatas.forEach(data => {
if(!data.name) {
messages[data.rowId] = {
type: 'error',
content: '名称不能为空'
}
}
})
return Promise.resolve({
buttons: [{
label: '下载错误数据',
callBack() {
}
}],
messages,
stopImport:true,//返回true时,则阻断导入
onlyShowError: true//导入数据预览仅显示错误的行数据
})
},
//控制从对象能导入的字段
filtersMappingFields(fieldList) {
return fieldList.filter((item) => {
return item.id !== 'name'
})
},
//当导入的字段包含查找关联,如果想控制数据的查询范围
parseRelatedListParam(param) {
if(param.fieldName === 'xxxx') {
let sq = JSON.parse(param.search_query_info);
sq.filter.push({
field_name: 'name',
field_values = ['test'],
operator: 'LIKE'
})
param.search_query_info = JSON.stringify(sq);
}
return param;
},
//底层对只读的字段默认不支持导入,可以通过它来实现支持
//对于一些特殊字段,虽然不是对象的标准字段,也希望导入
//此处演示了如果标准字段price是只读,希望能导入
//以及非标准字段如何支持导入
forceImportFields: ['price', {
field_name: 'sss',
type: 'text',//可能的值text number
label: '测试'
}],
//如果要对用户的excel数据做过滤
filterExcelDatas(excelDatas) {
return excelDatas.filter(data => !data.xxxxx)
},
//对映射的字段做拦截
//若觉得当前用户选择的映射关系不满足可以拦截
validateMappingFields(leftFields, rightFields) {
return '字段映射不满足'
}
}
})
}
}