FineReport报表程序数据集应用

    xiaoxiao2023-10-11  166

    第一章  FineReport介绍

    1.1 简介

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

    1.2 功能

    FineReport架构简介。

    FineReport支持的数据源列表。

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

    2.1业务需求 

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

     

    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:

    将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:

    3.4 使用程序数据集

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

    3.5 程序数据源代码调整

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

    最新回复(0)