ARTICLE · 1050185
Excel导入错1行,前99行该不该保存?
导入100行,第100行邮箱填错了。前99行已经校验通过,要不要先保存?
如果你正准备写一个事务注解,我建议先停一下:这100行在业务上,是100件独立的事,还是一件事的100个部分? 这个答案,会影响用户修完错误后该上传什么。
拿两个假设场景对照。
一个是添加客户通讯录。每条客户可以独立使用,业务也接受先导入有效记录。那么保存99条、退回1条,是可以讨论的方案。
但页面必须说清楚“成功99条,失败1条”,错误文件要能定位到原来的行。用户修好以后,只重传失败行,还是允许整份重传?已经成功的记录怎么识别?这些都得一起设计。
另一个是一批需要整体核对的业务数据。业务要求这批数据齐全后才能使用,那么即使前99行合法,也不能让半批数据先进入后续流程。
这时整批失败、修正后再上传,反而更容易解释。不是哪种技术方案更高级,而是哪种结果符合这项业务。
把规则写成用户能看懂的一句话
我给整批导入示例定的规则是:
文件校验发现问题,列出原始行号和原因;写库发生冲突,整批回滚并提示本批未完成。两种情况都新增0条,原有记录保持不变。
这里的“新增0条”,说的是事务结束后的结果。有些冲突只有真正写库时才会触发,前面的插入语句可能已经执行过,最后仍要一起回滚。
所以验收不能只看页面出现了“导入失败”。准备两行数据:第一行是新客户,第二行的邮箱在数据库里已存在。请求结束后,再查第一行是否真的没有留下、旧客户是否还在。
如果选部分成功,规则就要换成另一句:“本批成功99条、失败1条;失败行单独返回,成功行不再重复写入。”错误报告和重传方式也要跟着改,不能只把事务去掉。
写代码前,先把这句话交给使用功能的人确认。一个能说清失败结果的导入接口,比一串技术名词更容易让人放心。
你手里的导入功能,更适合整批退回,还是保留成功行?带上一个业务场景,答案才有意义。