众所周知,做B端产品会经常涉及到导入功能,TO B(business),即面向企业的产品。企业的核心是提高效率,降低成本。相比较单个的添加数据,批量导入功能恰恰能几十倍地提高操作者的工作效率。
哪些场景涉及到批量导入?HRM系统员工信息的批量增加、商城系统会员数据批量创建、商品系统商品信息的批量创建、客户关系系统的线索批量创建等等。
那么谨以此文总结下导入功能的设计要素。
导入的几个步骤
一般来说,B端产品的Excel的导入处理逻辑,可以拆解出这么几个步骤:
上传Excel模板,解析模板文件;
校验模板文件中的字段,确认数据合法合规;
执行业务逻辑,一系列逻辑处理;
插入数据库表中,导入完成;
针对以上导入的4大核心点我们一一说明。
上传并解析模板
模板文件格式不对,例如只支持.xlsx格式文件,.csv文件,但是上传了.pdf,就会报错;
模板文件体积太大,例如仅支持上传5MB以内的文件,但是上传了一个10MB的文件就会报错;
模板无法解析,由于一些Excel会加密,空白或者是已损坏无法打开,导致文件解析失败;
模板数据量太大,例如只支持一次导入2000行数据,如果超过就会报错或者只取前2000条;
模板格式错误,例如修改了模板的一些表头或者是列,导致无法解析匹配也会报错;
校验字段逻辑以及长度
1、比如批量导入员工表,需要字段有员工姓名、年龄、生日、身份证号码、手机号、性别等。
2、员工姓名的数据类型肯定是字符型vachar(50),你写一个2323肯定不行。
3、年龄肯定是整数型(int),你写一个张三也不行。
4、生日格式肯定是YYYY-MM-DD,你写一个0908肯定不行。
5、浮点数类型的数据小数点具体保留到几位也需要考虑。
6、最后检验长度即,规定只能输入字符串长度为50个汉字的名字,你输入51个汉字肯定不行。
校验业务逻辑
1、业务逻辑哪些字段是必填字段,哪些字段是选填字段。如果必填字段没写,就会报错
2 、用导入的数据去执行一些业务逻辑失败,例如批量更新单据的状态,但是单据是不可更新的状态,就会报错
3、系统查询不到该数据,例如批量导入商品的库存数据,但是系统没有该商品的sku,也会报错
数据效验
先说背景:应对多次导入维护的这一份完整的数据,我们需要解决以下几个可能出现的问题:
- 同一份excel,用户没有修改任何记录,总记录条数不变
- 同一份excel,用户修改了某条记录的某值,总记录条数不变
- 同一份excel,用户新增多条记录,总记录条数增加
- 同一份excel,用户删除了多条记录,总记录条数减少
- 同一份excel,用户删除了多条记录,并新增了多条记录,总记录条数对应变化
1、重复数据导入的2种方式
覆盖导入
这个是属于业务层的判断了,一般“覆盖”导入(即导入的数据会覆盖系统原有数据)导入覆盖直接简单粗暴。简单粗暴必然有缺陷,例如批量导入达人列表,以身份证作为唯一编码值
比如根据身份证判断,分二次导入员工信息,每一次导入的数据系统又会自动生成一条唯一ID,如果2条数据身份证号码完全一致,按照覆盖导入,如果是第二次导入excel,系统会取第二次导入的数据生成一个新的唯一ID。第一次导入的数据被删除了,那么如果根据第一次生成的唯一ID去查询相关的一些业务数据,如订单,就会发现查找不到订单记录,因为系统数据是删除状态。所以覆盖导入适合没有和其他业务有过多交集的情况。那么针对这种问题,我们可以用导入更新解决。
导入更新
导入更新则是每条导入的数据都要和已有的历史数据进行比较,根据某一个字段判断,如果有相同的就更新,没有就插入。
基于此,我们来整理一下实现思路,
导入的excel中,某条记录的唯一编码值和数据库的某条是一致的,此时执行update操作 导入的excel中,某条记录的唯一编码值在数据库中不存在,此时执行insert操作 导入的excel中,某条记录的唯一编码值在数据库中存在,但是excel中不存在,此时执行delete操作(其实是update操作,将其置为"删除")
具体自己看业务场景来取舍,一般来说导入更新的场景比较多,直接覆盖的比较少。
更新导入我们要求给一个唯一值,我们根据唯一值字段去检验,那么如果业务里面并没有唯一字段呢?那只能辛苦开发一个一个字段去进行校验,把所有表头字段一一校验一遍,非常影响性能。
最后针对导入结果返回值
导入必然有成功或者失败两种结果。面对导入失败,我们肯定需要返回给用户导入失败的数据并且需给出原因。在导出的文件中对于字段不合法导致的问题,直接标红数据所在单元格,客户查找修改也比较方便;也可以直接当前页面反馈失败数据。
其他问题
导入进度提示
同步导入还是异步导入(异步导入可离开当前页面操作其他页面)
导入操作日志是否需要
更多案例请访问简道云查阅,简道云是零代码的应用搭建平台,可以帮助各行业人员在不使用代码的情况下搭建个性化的CRM、ERP、OA、项目管理、进销存等系统,产品包含自定义表单、自定义报表、自定义流程引擎、知识库、团队协作等功能,适用于各种业务场景。