第一章 FineReport介绍
FineReport报表软件是一款纯Java编写的、集数据展示(报表)和数据录入(表单)功能于一身的企业级web报表工具,它“专业、简捷、灵活”的特点和无码理念,仅需简单的拖拽操作便可以设计复杂的中国式报表,搭建数据决策分析系统。
营销部门操作人员每月需手动加工各种报表(如下图01所示),以备查看,工作量巨大且易出错,因此希望可在报表系统中实现。
FineReport是通过AbstractTableData抽象类来读取数据源的,而上述所有的数据来源都继承实现其抽象方法,因此用户只要实现了AbstractTableData抽象类,也就可以用自定义类型的数据源了(程序数据集),FineReport报表引擎就能够读取定义的数据源作为报表数据源使用。
AbstractTableData抽象类主要有5个方法,如下:
//获取AbstractTableData的总列数
public int getColumnCount();
//获取AbstractTableData中第columnIndex列的列名
public String getColumnName(int columnIndex);
//判断是否存在第rowIndex行,这主要是用于处理超大数据时,完全遍历所有数据获取总行数相当困难,用这个方法来判断第rowIndex行是否存在,存在则可读取
public boolean hasRow(int rowIndex);
//获取AbstractTableData的总行数
public int getRowCount();
//获取AbstractTableData中第columnIndex列,第rowIndex行的数据
public Object getValueAt(int rowIndex, int columnIndex);
在某些应用场景中,需要在程序中对数据进行处理后再作为报表的数据源使用。
定义一个类,继承AbstractTableData,并实现里面的方法,具体的代码如下图02:
将ArrayTableDataDemo.java编译生成ArrayTableDataDemo.class类。将生成的类文件拷贝到报表工程%FR_HOME%\WebReport\WEB-INF\classes目录下。由于该类是在com. fr.data包中的,因此最终应该将该ArrayTableData.class放在%FR_HOME%\WebReport\WEB-INF\classes\com\fr\data下面。此时该程序数据源便定义好了。
点击模板数据集下面的加号,选择程序数据集,然后在弹出的程序数据集对话框中,选择对应的class文件。如下图03、04:
配置好程序数据源后便可以使用定义的程序数据集了,与其他类型的数据集使用方法是相同的,可以通过拖拽方法实现单元格数据列绑定。如下图05:
将查询出的结果,填充到数据集时,采用的是二维数据,代码虽然简洁,但是可读性比较差,将原来的数组,换成了LinkedHashSet<LinkedHashMap<String, Object>>,这样db查询结果填充到“数据集”时,处理代码的可读性就多好了,采用此方法需注意字段赋值的顺序,要跟枚举里的顺序一样。见下图06、07、08:
