跳过系统级导入
业务背景
在某些数据导入场景中,用户可能需要在导入前对数据进行自定义处理(如数据校验、业务逻辑判断、部分数据的单独处理等)。处理完成后,对于已经由用户自行处理过的数据行,希望跳过系统默认的导入逻辑,避免重复操作或数据冲突。
例如:
- 导入用户数据时,部分用户已在脚本组件中完成了自定义的新增/更新逻辑
- 根据业务条件判断后,某些数据行不需要参与系统级导入
- 在导入流程中需要灵活控制每条数据的导入行为
实现原理
在数据导入组件执行导入逻辑之前,系统会检查每条导入数据是否包含 ChameleonSkipImport 标识。如果某条数据包含该标识,则会被自动过滤掉,不参与后续的系统级数据写入操作。
// 系统内部实现:过滤包含跳过标识的数据
list = [.. list.Where(t => !t.ContainsKey(CommonConst.ChameleonSkipImport))];
配置方法
步骤一:配置导入接口
新建或编辑现有的导入接口,确保接口流程中包含以下组件:
- 导入数据解析组件 - 解析 Excel 文件并转换为数据列表
- 脚本组件 - 对 解析后的数据进行自定义处理
- 数据导入组件 - 执行系统级数据导入
步骤二:在脚本组件中设置跳过标识
在脚本组件中,对需要跳过的数据行添加 ChameleonSkipImport 字段:
// 示例:遍历导入数据,对符合条件的数据设置跳过标识
const dataList = context.CmpResult; // 获取导入数据解析组件的输出结果
dataList.forEach(item => {
// 业务条件判断:例如手机号已存在的用户
if (item["Phone"] && checkUserExists(item["Phone"])) {
// 用户已存在且已完成自定义处理,标记为跳过
item["ChameleonSkipImport"] = true;
}
});
context.CmpResult = dataList;
接口流程图
使用示例
示例场景:导入时自定义处理部分数据
假设有一个员工入职导入接口,需要在导入时对特定部门的员工进行特殊处理:
// 脚本组件代码
const dataList = context.CmpResult;
const processedList = [];
for (const item of dataList) {
const department = item["Department"];
// 特殊部门(如管理层)需要走独立的审批流程
if (department === "管理层" || department === "技术委员会") {
// 自定义处理逻辑:调用其他接口或执行特殊业务
await customProcessExecutive(item);
// 标记为跳过,避免重复导入
item["ChameleonSkipImport"] = true;
}
processedList.push(item);
}
context.CmpResult = processedList;
示例场景:根据数据校验结果决定是否跳过
// 脚本组件代码:复杂校验逻辑
const dataList = context.CmpResult;
for (const item of dataList) {
const email = item["Email"];
const phone = item["Phone"];
// 自定义校验:邮箱域名必须为企业域名
if (email && !email.endsWith("@mycompany.com")) {
// 记录错误信息到日志或其他位置
logError(`无效的企业邮箱: ${email}`);
// 跳过这条数据
item["ChameleonSkipImport"] = true;
continue;
}
// 手机号格式校验
if (phone && !/^1[3-9]\d{9}$/.test(phone)) {
logError(`无效的手机号: ${phone}`);
item["ChameleonSkipImport"] = true;
continue;
}
}
context.CmpResult = dataList;
注意事项
- 字段名称:跳过标识的字段名必须严格使用
ChameleonSkipImport(区分大小写) - 字段值:只需在数据字典中包含该 key 即可触发跳过,值可以为任意真值(推荐使用
true) - 执行顺序:必须在数据导入组件之前的脚本组件中设置该标识,否则无法生效
- 数据影响:设置跳过标识的数据行不会被删除,只是在系统级导入阶段被忽略
- 调试建议:可以在脚本组件中使用
console.log或日志功能输出设置了跳过标识的数据,便于排查问题 - 与错误提示的区别:
ChameleonSkipImport是静默跳过,不会向用户显示错误提示。如需提示用户某些数据被跳过,建议配合自定义消息通知使用
相关文档
- 数据导入 - 数据导入基础配置说明
- 导入前对某个字段赋值 - 导入前的数据处理
- 导入后执行业务逻辑 - 导入后的业务处理
- 自定义导入行错误提示 - 导入数据验证和错误提示
- 数据导入组件 - 数据导入组件详细说明