一种基于XML的报表生成方法与流程

文档序号:11133902阅读:376来源:国知局
一种基于XML的报表生成方法与制造工艺

本申请涉及计算机技术,特别涉及一种基于XML的报表生成方法。



背景技术:

目前,在计算机领域,存在两种比较常见的生成报表的方式。其中,一种是通过写代码的方式,一种是通过报表库创建报表的方式。这两种方式都存在较大的局限性。具体地,通过代码生成报表的方式,对任意新建一个报表功能,都需要开发代码,重新出版本;而通过报表库创建报表的方式,只能针对很有限的预置好了的指标、对象进行生产报表,一旦业务复杂则功能实现、性能都面临瓶颈。

例如,申请号为201110152520.0、发明名称为“性能报表的生成方法及装置”的发明专利申请,采用的XML方式作为数据源,把所有数据均通过XML持久化,从XML中读取报表记录。申请号为201310489798.6、发明名称为“一种JSP环境中基于XML的一种Excel报表生成方法”的发明专利申请,公开了JSP语言环境下的基于XML的一种Excel报表实现方式。这种报表实现方式利用了XML数据与格式分离的特点,以及Excel强大、丰富的格式控制和数据处理能力,但是强耦合前端JSP实现和Excel的操作是它的缺点。

上述这些现有的报表生成方式存在如下问题:

1、新做一个报表功能,需要通过重新编程,重新编译新的版本支持;

具体地,基于Birt等报表组件,新做一个报表,首先需要在IDE里定义好报表的模板,再绑定数据库表,通过JAVA/JS等代码,返回到前端呈现,每新做一个报表需要编写数量不等的代码,重新打包版本。

2、通过自定义报表的方式,做到用户可以配置报表,但是带来了逻辑一旦复杂,需要重新建立数据模型,且性能成本直线上升;

具体地,为了规避每新出一种报表,有一种报表生成方式无需修改代码,通过编写庞大的SQL语句,把数据模型要在事先全部关联好,一旦中间逻辑变化,改动巨大,另外由于涉及到所有指标表的关联操作,通用SQL异常复杂,性能面临极大的挑战;

3、目前业务通常不仅仅只通过报表的方式呈现业务,还需要做到图形和报表结合的方式,目前还没有仅通过一个非常简单的XML就能做到上图下表丰富呈现的方案。

具体地,通过Birt本身的图形可以做到报表和图形呈现,但是Birt的图形效果非常不好,对于目前流行的ECharts未能提供支撑,目前的方案中新生成报表和新的图形,均需通过分别编写代码完成,做不到一个XML文件配置,既可以单独显示报表,也可以图表结合,还不需要修改代码。

4、XML文件做数据源,遇到数据量大的场景,XML负载将变得十分重,且没有做到数据和样式分离。

具体地,有些方案通过某些规则自动生成含有原始数据的XML,一个是数据庞大,性能将面临巨大的瓶颈,另外对于关联查询,十分不便,原始数据存在数据库中,就不存在该问题。

5、通过JSP环境中,通过XML生成Excel,通用性不高。

具体地,首先前端基于JSP环境,现在对于越来越强调动静分离的趋势而言就不符合,另外报表不仅仅是Excel,通过操作Excel也不够通同,演进和扩展均面临困难。

6、对于表格有合并组合等复杂表格形态,无法仅通过简单XML配置呈现。

具体地,目前方案适用XML的方式主要是解决数据源的问题,对于报表的样式做不到自定义。



技术实现要素:

本申请提供一种基于XML的报表生成方法,能够提供灵活的报表配置,方便地实现报表的生成。

为实现上述目的,本申请采用如下技术方案:

一种基于XML的报表生成方法,包括:

系统预置通用报表模板和用于控制报表样式的CSS文件;

接收上传的XML报表数据文件,并根据所述XML报表数据文件和所述通用报表模板生成报表设计文件;其中,所述XML报表数据文件用于保存业务所需的报表逻辑;

根据数据库提供的数据源、所述报表设计文件和所述CSS文件生成报表并提供给所述业务进行显示。

较佳地,在所述XML报表数据文件中包括图形绘制属性,用于指定图形绘制工具、绘制图形的类型和参考数据的信息;

该方法进一步包括:根据所述XML报表数据文件中的图形绘制属性,在数据库提供的数据源中提取符合图形绘制属性的参考数据,按照指定的绘制图形的类型、使用指定的图形绘制工具进行图形绘制,并提供给所述业务进行显示。

较佳地,在接收上传的XML报表数据文件前,该方法进一步包括:判断所述通用报表模板是否满足业务需要,如果不满足,则接收上传的报表设计文件,并执行所述生成报表并提供给所述业务进行显示的操作;如果满足,则执行接收XML报表数据文件的操作及其后续操作。

较佳地,在所述生成报表前,在指定的存储位置上检查是否存在更新的CSS文件,若存在,则利用更新信道CSS文件替换系统预置的CSS文件。

较佳地,所述图形绘制工具为ECharts。

由上述技术方案可见,本申请中,在系统中预置通用报表模板和用于控制报表样式的CSS文件;接收上传的XML报表数据文件,并根据用于保存业务报表逻辑的XML报表数据文件和通用报表模板生成报表设计文件;再根据数据库提供的数据源、报表设计文件和CSS文件生成报表并提供给业务进行显示。通过上述方式,能够将报表设计文件的生成与代码工程剥离,在需要生成新版本报表时,只需要修改XML报表数据文件即可,因此提供了灵活的报表配置,简化了报表生成方式。

附图说明

图1为本申请中报表生成方法的基本流程示意图;

图2为报表生成方法的示例框图。

具体实施方式

为了使本申请的目的、技术手段和优点更加清楚明白,以下结合附图对本申请做进一步详细说明。

图1为本申请中报表生成方法的基本流程示意图。如图1所示,该方法包括:

步骤101,系统预置通用报表模板和用于控制报表样式的CSS文件。

其中,通用报表模板是一种适用于大多数报表的简单通用的模板,例如该模板可以是一个报表的外框。

CSS文件用于控制报表样式,例如报表底色、底纹等。在现有的报表设计文件(也称为报表设计模板或报表模板)中都会包括相应的CSS文档部分,以控制报表的生成和显示。本申请中,将这一部分内容独立于报表设计文件进行额外保存,预置在系统中,从而尽可能使报表代码更通用于各类报表的生成。

另外,系统预置的通用报表模板和CSS文件可以保存在系统的指定路径下,方便系统调用。

具体地,可以在系统中进行各个文件的初始化路径设置,例如,可以预先配置报表根目录路径$rpt_temp_dir,如果未配置则完成报表根目录的创建$rpt_temp_dir;2)、在$rpt_temp_dir下再创建$XML,$template,$XMLTodesign,$design,$css,$css_ext子目录;

其中,上述子目录的用途如下:

$XML:外部上传的XML报表数据文件目录;

$template:系统预置的通用报表模板的存放目录;

$XMLTodesign:XML报表数据文件和通用报表模板文件生成的报表设计文件的保存目录;

$designer:外部上传的报表设计文件的保存目录;

$css:报表的默认样式控制文件-CSS文件的存放目录;

$css_ext:扩展报表的样式控制文件的存放目录。

将系统预置的通用报表模板文件及默认css文件,放置到report模块的resource目录下作为资源文件的方式提供给业务,并将已经打包到resource目录下的通用报表模板rpt_template.rptdesign拷贝到$template目录下;将已经打包到resource目录下的默认CSS文件eplt_rpt_default.css拷贝到$css目录下;如果目标目录下已经存在相应文件,可以按照覆盖方式处理,或者也可以按照文件是否存在变更判断覆盖已存在文件保留已存在文件。

步骤102,接收上传的XML报表数据文件。

本步骤中,系统接收上传的XML报表数据文件。其中,XML报表数据文件用于保存业务所需的报表逻辑,由用户根据业务需求设计并上传给系统。报表逻辑中可以包括报表的格式、属性信息,例如报表的行列数目,表头各项的名称、位置等属性信息。通过XML格式,规定报表逻辑,上传系统后,由系统代码读取相应信息,从而明确报表需求。通过XML报表数据文件实现业务数据和报表模板设计的分离,使报表开发者只需要关心业务数据,通过上传的XML报表数据文件体系业务报表的格式和需求,再通过下一步骤由系统生成报表设计文件。

具体地,XML报表数据文件可以保存在预先设定的存储位置上,例如保存上述步骤101中设置的$rpt_temp_dir/$XML目录下。系统还可以根据需要,对该目标下保存的XML报表数据文件进行增删改等编辑操作。下面给出一个XML报表数据文件的格式参考:

步骤103,系统根据上传的XML报表数据文件和通用报表模板生成报表设计文件。

XML报表数据文件被上传后,系统会将XML报表数据文件和预置好的通用报表模板进行合并,生成报表设计文件,并将生成的报表设计文件保存在预设的位置上,方便系统调用该报表设计文件生成报表。具体地,报表设计文件可以保存在步骤101中提到的$XMLTodesign目录下。

另外,目前的报表设计文件中包括CSS格式的文档内容,用于控制报表样式。本申请中,在步骤101预置了CSS文件,这里可以利用该CSS文件控制报表设计文件所生成报表的样式。

步骤104,根据数据库提供的数据源、报表设计文件和CSS文件生成报表并提供给业务进行显示。

本申请中,报表中所需的数据仍然由数据库提供,从而减轻XML文件的负荷,也能够充分利用数据库的优势。利用数据库提供的数据源、报表设计文件,并结合CSS文件生成报表。该生成的报表可以通过统一的接口提供给业务,由业务在相应界面上按照所需方式进行显示。这里,生成报表的方式可以采用现有技术实现。

至此,本申请中最基本的报表生成方法流程结束。

通过上述方式,将通用报表模板与生成报表的代码相剥离,并将报表设计文件分离为业务数据和XML报表数据文件,从而达到二次分离解耦,大大简化了新版本报表的生成方式,提供了灵活的报表配置。

在上述最基本的报表生成方法的基础上,本申请还可以方便地实现报表和图形同时显示的功能。具体地,可以在XML报表数据文件中包括图形绘制属性,用于指定图形绘制工具、绘制图形的类型和参考数据的信息。由系统中的图形绘制引擎根据XML报表数据文件中的图形绘制属性,在数据库提供的数据源中提取符合图形绘制属性的参考数据,按照指定的绘制图形的类型、使用指定的图形绘制工具进行图形绘制,并提供给业务进行显示。例如,在步骤102给出的XML报表数据文件的参考格式中,列的属性中包括“echart”,即表示该列是否参与使用echart作为工具的图形绘制。其中,echart属性值可能取0、1、2、3等,可以用于分别表示“该列数据不参与图形绘制”、“该列数据参与X轴的图形绘制”、“该列数据参与Y1轴的图形绘制”、“该列数据参与Y2轴的图形绘制”。

当包括上述图像绘制属性时,可以在XML报表数据文件的解析时提取出来,并利用图形绘制工具进行图形绘制。同时,可以将与通用模板合并生成报文设计文件的处理与图形绘制的处理分离开进行。例如,对于步骤102所示,可以按照下述顺序解析XML文件的相应信息:

1)获取数据库中的数据集;

2)获取查询条件;

3)获取列表集合;

4)获取列对应的显示名,位置、数据类型,echart属性;

5a)根据echart属性值生成ECharts图形界面,具体可以支持显示成折线图,柱状图等图呈现方式;

5b)与通用模板合并生成报表设计文件,并根据该报表设计文件结合数据库中的数据集生成报表;

6)将报表和图形在业务界面进行显示,例如图形与报表可以组合呈现成上图下表的方式进行显示。

通过上述方式,可以将任意图形绘制工具(包括传统报表设计中的图形控件或者第三方提供的图形绘制工具)引入报表设计中,只要系统支持相应图形绘制工具的绘制,就可以利用该工具进行图形绘制,从而为用户提供更灵活的选择。

另外,对于一些非常复杂的报表,也可以直接通过外部工具设计报表设计文件,然后将设计好的报表设计文件直接上传到系统中,系统接收上传的报表设计文件,利用该报表设计文件与CSS文件和数据源一起生成报表。同时,对于系统预置的CSS文件,优选地,也可以通过用户上传对其进行更新,如果在指定的保存位置上存在用户上传的新的CSS文件,系统可以利用该CSS文件替换系统预置的CSS文件,控制报表的样式,从而为用户提供更灵活的报表样式控制方式。

下面给出一个利用本申请的方法进行报表生成的示例性框图。如图2所示,模块201用于保存阈值的通用报表模板和默认CSS文件,其中,通用报表模板可以针对不同的情况提供多种选择;用户上传到指定存储位置的可定制CSS文件可以用于替换模块201中的默认CSS文件。模块202接收导入的XML报表数据文件。模块201和202中的文件经过报表文件解析器模块203的处理合并成报表设计文件,或者,也可以通过直接导入方式接收上传的报表设计文件。ePlatform报表管理模块204对于报表设计文件进行处理,生成报表;其中,模块204中还可以包括Birt报表引擎,用于对直接上传的利用Birt设计的报表设计文件进行解析处理。

上述即为本申请中基于XML的报表生成方法的具体实现。由上述可见,本申请存在以下优点:

1、实现了报表模板文件和代码工程的分离;

2、内置通用模板,把报表模板的设计通过CSS和XML方式分离出来,CSS文件负责报表样式,XML报表数据文件负责报表显示数据控制;

3、通过XML报表数据文件定义数据源及基本的报表、图形绘制的控制,报表图形模块解析数据源,并识别出XML报表数据文件中是否配置了同时显示图形,如果有,则通过报表引擎生成报表,通过图形引擎生成图形,将报表和图形提交给业务,由业务按照需求将二者结合成图表,默认上图下表的方式,由于数据源一致,通过图表方式共同表达业务;

4、原始的数据仍然使用数据库进行存储,XML只负责定义数据来源、定义呈现方式,非常轻量级;

5、前后台采用动静分离的技术,后台直接生成出编译好的报表文件,前端通过简单的web容器即可加载出来;

6、通过定义XML配置和复杂表头模板之间的对应关系,做到逐步使用XML配置出各类复杂表头,对于未定义出对应关系的复杂表头,嵌套方式也支持可以直接上传设计好的报表模板文件,报表模块自动解析生产报表。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1