第一章  FineReport介绍

1.1 简介

FineReport报表软件是一款纯Java编写的、集数据展示(报表)和数据录入(表单)功能于一身的企业级web报表工具,它“专业、简捷、灵活”的特点和无码理念,仅需简单的拖拽操作便可以设计复杂的中国式报表,搭建数据决策分析系统。

1.2 功能

  • FineReport架构简介。

FineReport报表程序数据集应用

  • FineReport支持的数据源列表。

FineReport报表程序数据集应用

第二章 程序数据集应用背景

2.1业务需求 

营销部门操作人员每月需手动加工各种报表(如下图01所示),以备查看,工作量巨大且易出错,因此希望可在报表系统中实现。

FineReport报表程序数据集应用

 

2.2解决方案 

  • 根据需求大多数情况下,FineReport直接在设计器里使用数据集查询直接写SQL就能满足报表要求,但对于一些复杂的报表,部分报表需将各个经销商数据聚合统计 SQL处理并不方便,这时可以把查询结果在应用层做一些预处理后,再传递给报表,即所谓的程序数据集

第三章 程序数据集应用实现

3.1实现原理

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);

在某些应用场景中,需要在程序中对数据进行处理后再作为报表的数据源使用。

3.2 定义程序数据源

定义一个类,继承AbstractTableData,并实现里面的方法,具体的代码如下图02:

FineReport报表程序数据集应用

将ArrayTableDataDemo.java编译生成ArrayTableDataDemo.class类。将生成的类文件拷贝到报表工程%FR_HOME%\WebReport\WEB-INF\classes目录下。由于该类是在com. fr.data包中的,因此最终应该将该ArrayTableData.class放在%FR_HOME%\WebReport\WEB-INF\classes\com\fr\data下面。此时该程序数据源便定义好了。

3.3配置程序数据源

点击模板数据集下面的加号,选择程序数据集,然后在弹出的程序数据集对话框中,选择对应的class文件。如下图03、04:

FineReport报表程序数据集应用

FineReport报表程序数据集应用

3.4 使用程序数据集

配置好程序数据源后便可以使用定义的程序数据集了,与其他类型的数据集使用方法是相同的,可以通过拖拽方法实现单元格数据列绑定。如下图05:

FineReport报表程序数据集应用

3.5 程序数据源代码调整

将查询出的结果,填充到数据集时,采用的是二维数据,代码虽然简洁,但是可读性比较差将原来的数组换成了LinkedHashSet<LinkedHashMap<String, Object>>,这样db查询结果填充到数据集时,处理代码的可读性就多好了采用此方法需注意字段赋值的顺序,要跟枚举里的顺序一样。下图06、0708

FineReport报表程序数据集应用

FineReport报表程序数据集应用

FineReport报表程序数据集应用

相关文章: