在没用管理系统的时候,很多企业都会将一些生产或流水线操作的数据保存在excel文件中,按名称或按sheet页形成多份excel的表格数据。
当运用了工作流管理系统后,这些生产或流水线的操作都会记录成流程的节点,过程需要记录的数据,也会应用到管理系统中。通常是建立数据库,建立数据库表来存储这些记录。
原来记录在纸质或excel文件中的数据,就需要通过工作流管理系统,执行流程的节点,打开节点上的表单界面,录入这些数据,并保存到数据库表中。
这样企业用户在操作习惯上会有些变化,原来存excel文件的,现在需要通过表单界面来录入。
用户为了更方便自己,会提出,我们还是按原来的方式,记录在excel文件中,或者说,我们记录了excel文件的,能不能选择excel文件,上传一下,然后再从流程的表单界面中展现出这些数据,并可编辑和维护,然后继续流程的流转。
为了适应这种功能,我们就必须在流程节点的表单中加上上传excel文件的功能。
在我们eform自定义表单中,有上传附件的控件,但是和这种需求稍有区别:eform上传附件的控件,文件会上传到web服务器的目录中,不会打开文件将数据导入到数据库表。 其实打开excel文件,将数据导入到数据库表,这个要用自定义代码来实现更方便。
下面是实现这个需求的过程:
在流程节点表单中加上上传附件的功能按钮,点击后模态打开上传附件的选择页面。
选择需要上传的附件,点击上传,上传附件的页面是用的基本的 type=file的标准控件。action指向后台的类,当选择好文件,点击上传后,后台类截获到上传的文件流.
是j2ee的工程,就利用poi包,分析excel文件的行,列,单元格,取出数据,将数据拼成insert into 的sql语句,将数据写入数据库表。
是dotnet的工程,就利用分析excel文件的dll,分析文件的行、列、单元格,将数据拼成insert into 语句,写入数据库表。
上传完成后,关闭上传页面,返回到流程节点表单录入界面,并且刷新页面,页面表格中显示的,就是刚才excel文件中上传的内容。
用户可以编辑修改表格中的内容,点击 执行后,再次提交修改后的记录,并执行流程的流转。
因为后台分析excel文件,是取的输入流直接分析的,因此web服务器中没有存直接的文件。
将上传附件按钮功能 封装成一个共用的js函数,打开特定的上传附件的页面。在上传附件的页面中接收流程实例id, 标识存入那张业务表的参数。
每个excel文件的格式必须固定,每列需要和数据库表的字段绑定。
这样在流程节点中挂接的业务表单中,需要上传附件功能的,就定义上传附件的按钮,调用封装好的js函数,并按照标识写入数据库表。这样做到在流程节点的表单中快速的集成导入excel文件的功能。