本文介绍了在开发过程中如何实现只导入单据体的数据功能。通过配置标准单据和单据体,增加导入按钮并设置上传配置,接着实现UploadListener接口来处理上传逻辑,包括读取Excel文件、处理每行数据并存储到集合中,最后将数据填充到表单中。文中还提到了两个细节注意事项:单据体默认行数和Excel第一行标题的处理。此外,文章还补充了使用临时存储时获取输入流的方法。
在我们日常开发过程中,经常会遇到需要导入数据的情况,整张单据导入非常方便,直接配置即可使用,但是只导入单据体该怎么做呢,今天就为大家简单介绍一下。
首先建一个标准单据,并创建一个单据体,增加姓名、年龄、电话三个属性,设置单据体默认行数为0,在工具栏中增加导入按钮
接着配置按钮功能,打开【上传按钮】开关,并修改【上传配置】,可以修改上传文件类型以及大小等信息
这样我们页面就配置完成了,接下来看一下插件该如何实现。
首先,如果我们想要处理上传功能,必须要实现UploadListener接口,并且要对导入按钮所在的工具栏增加监听。
实现UploadListener之后,可以重写beforeUpload、upload、afterUpload、remove、afterRemove
5个方法。
我们可以在upload或者afterUpload方法中处理我们的逻辑,方法执行实际如下图所示:
重写upload/afterUpload之后,我们要判断上传按钮的是否为我们需要的单据体导入按钮,并且对上传的文件url判空,判断是否有文件上传,importEntry为我们导入单据体数据的方法。
首先需要根据导入的url,从服务器中获取到导入的文件流,并使用ExcelReader对数据进行处理。使用ExcelReader的read方法,新建一个SheetHander,重写其中的handleRow来对每一行数据做处理。其中paramParsedRow.getData()用来获取每一行的数据,返回值是map,key为列数,value为该列的值,读取到每行的值之后,将数据添加到一个集合当中。
最后一步就是将集合中的数据到表单中了,需要判断每一列的值是否为空。完成之后就可以部署插件验证一下功能
新建一个excel,第一行为标题,并且设置一行电话为空,看看是否会报异常。
导入之后,效果如下图所示:
导入成功,是不是非常简单呢?不过其中两个小的细节需要关注下,第一个就是单据体设置默认行为0,否则的话第一行会出现空白行(或者不设置为默认0行,单独处理第一行也可),第二个点就是在处理数据时,需要把excel的第一行过滤掉,因为一般来说第一行都是标题(如果没有标题就不需要处理了)。
今天的内容就到这里了,你学废了吗?
================================================================
2022.01.18更新
如果上传配置中使用了临时存储,获取输入流方式如下
推荐阅读