动态表单的实现方案

最近项目的用户,提出一个棘手的需求。因业务变化不定,导入的EXCEL格式表头不是固定的,用户希望系统能兼容所有格式,并且对导入数据进行展示与分析,最后导出报表。用户原文:适应表单数据灵活变化,根据客户需要制作表单。

需求可以分解为:

1、用户无法固定待导入表单;如A表表头为A1、A2、A3…… 而B表表头为B1、B2、B3……

2、用户需要将动态表单导入到系统中处理;

3、用户需要将处理之后的数据根据动态格式导出;

该需求棘手的地方有两点:

1、oracle、sqlserver等常用数据库表头字段是固定的,无法直接根据动态业务数据建表;

2、导出的数据受到导入数据的影响,也是动态格式,无法预先指定;

针对该需求,兄弟们集体发动脑细胞,给出了三种解决方案:

1、使用[非关系型]数据库,如MongoDB,动态建表;  优点:无缝实现动态建表需求;  缺点:属于新技术,组内木有专业[非关系型DBA](自创名词);需耗时研究其部署、集成方式;风险较大;

2、程序动态建表。导入之前,在java后台获取表单格式,用后台代码建表。建表信息由一个固定数据表进行管理维护;  优点:任何格式都可以导入;操作数据方便;  缺点:表的数量无法预知,会大量创建动态表;   不方便跨表统计;

3、将表单拆分为:1、表头属性;2、表单模板;3、数据存储。 模板里面存入一般性的固定信息如批次号、客户名称、债项开始日期、债项截止日期、信访地址等; 属性中抽象出一些一般化的信息如属性编码(保证唯一性)、属性名称、显示类型(只读文本、输入框、下列框、)、输入类型(数字、字符串、日期)等。属性由模板动态组织、包装起来,根据动态格式生成表单或者导出表单; 数据存储表中存入与指定模板下某属性对应的值,该表的字段为:模板外键、属性外键、属性编码、属性值等。  优点:可以实现导入动态格式的需求;   最终数据存于数据表中,方便统计与版本控制;  缺点:数据存储表的记录随业务量增大而迅速增大;

综合考虑下,因用户业务量较小(月平均几百单),最终敲定了第三种方案。

如各位看官对该方案有建议,欢迎拍砖,咱们一起探讨优化方案。

猜你喜欢

转载自q395488499.iteye.com/blog/1769332
今日推荐