如何利用报表工具FineReport实现报表列的动态展示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用报表工具FineReport实现报表列的动态展示相关的知识,希望对你有一定的参考价值。
information_schema数据库是mysql自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。在 MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。
information_schema数据库表说明:
SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。
USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。
SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。
TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。
COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。
CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。
COLLATIONS表:提供了关于各字符集的对照信息。
COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。这些列等效于SHOWCOLLATION的前两个显示字段。
TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。
KEY_COLUMN_USAGE表:描述了具有约束的键列。
ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。
VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。
TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表
扩展的应用
查看某个数据库表的记录数
selecttable_schema,table_name,table_rows from tables where TABLE_SCHEMA = '数据库名称' order by table_rowsdesc;
查看数据库所占空间
selectconcat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB,
concat(round(sum(index_length/1024/1024),2),'MB')as index_length_MB
frominformation_schema.tables where
table_schema='数据库名';
查看某个表所占空间
selectconcat(truncate(sum(data_length)/1024/1024,2),'MB') as data_size,
concat(truncate(sum(max_data_length)/1024/1024,2),'MB')as max_data_size,
concat(truncate(sum(data_free)/1024/1024,2),'MB')as data_free,
concat(truncate(sum(index_length)/1024/1024,2),'MB')as index_size
frominformation_schema.tables where TABLE_NAME = '表名';
看完之后相信可能还是有点疑惑。就是说mysql中有一个系统库information_schema。这个库中存放着mysql数据库的数据库实例名,表名称,表注释,字段名称,字段注释等等等等。而这个库的存在为我们动态列的实现就提供了一个基础。(其余的数据库oracle、sqlserver、db2等也有类似的存在。)
然后我们继续回到主题。我在本地建立了一个测试库reporttest,测试表report。在mysql库中新建一个库reporttest(或者使用已经存在的库,但是如果使用已经存在的,那么报表内部sql内容就需要更改。所以最好新建一个),然后用类似navicat的工具运行我提供的reporttest.sql文件,即可建表并且导入数据,然后刷新即可,此时数据准备完成。
设计器创建数据连接test,填写对应的数据库信息,测试成功即OK。
此时,库名称为reporttest,表名称为report,数据连接test。这时直接预览动态列实现方案.cpt。 参考技术A 如何利用报表工具FineReport实现报表列的动态展示http://blog.chinaunix.net/uid-29584979-id-5752611.html
如何基于报表工具FineReport进行二次开发
随着FineReport的发展,它提供的设计器和服务器应该能够满足绝大部分的需求,完全实现零编码的软件开发、革命性地加快软件的开发以及提高软件的稳定性。但是需求千变万化,而FineReport本身所具备的功能是报表中比较典型的,一些比较有个性的功能无法实现,那么就需要应用开发人间使用网页脚本、API接口等进行深入的开发,而这一点,FineReport报表工具是支持的,那么如何来实现插件开发呢?
Ant打包
Ant是一个构建工具,它可以帮助我们将项目开发过程中需要完成的各种步骤组织起来,通过一个简易的方式来构建整个项目。其中一些比较典型的任务就是编译Java源代码、运行java程序、拷贝文件或目录、将编译完成的类打包等等。具体的使用方法如下:
1、下载安装Ant
到官网上下载最新的Ant,这里下载的是apache-ant-1.9.7-bin.zip
下载完成后进行解压,这里解压到D:\apache-ant
2、配置环境变量
新建环境变量:ANT_HOME:D:\apache-ant
在环境变量PATH的最后面添加一下内容:
;%ANT_HOME%\bin注意前面的分号,如果PATH最后没有分号“;”的话要加上,有的话就可去除
进入cmd命令窗口,在CMD窗口中输入ant -version,敲击回车键,会显示出安装的ANT版本,说明配置成功了
3、简单Ant编译
首先在D:\plugins-Git盘下建立一个build.xml文件,内容如下:
<?xmlversion="1.0"?>
<projectname="helloWorld">
<targetname="sayHelloWorld">
<echomessage="Hello,Amigo"/>
</target>
</project>
进入xml文件路径,运行antsayHelloWorld,如下:
4、进行插件打包
l 将源码下载到本地
l 新增FineReport的jar包,将下图的6个jar包拷贝到lib/report文件夹下
l 打开bulid.xml文件,根据实际安装的jdk位置修改jdk路径
l 打开插件,在插件工程目录下执行ant-fbuild.xml jar
将打包好的文件夹打包成.zip文件,这样这个插件就打包完成,可以在设计器上安装了
l 安装插件
安装完成后,如下图:
安装完成后,可以在公式编辑器中的【函数类型】下看到插件函数了,插件函数里有一些常用的函数如下图:
插件开发实例
1、自定义导出插件
默认的报表工具栏中只能设置Excel导出、Word导出以及PDF导出,如下图所示。如果想导出CSV、TXT等文件就比较麻烦,只能利用自定义按钮来实现。
在FineReport V8.0中提供了工具栏按钮的接口,可以通过此接口来开发插件,实现各种工具栏按钮的功能
l 关键接口
// 国际化文件引入接口
com.fr.stable.fun.LocaleFinder
// web端工具栏按钮扩展接口
com.fr.report.fun.ExtensionButtonProvider
// 导出处理扩展接口
com.fr.report.fun.ExportOperateProvider
// 设计器中工具栏设置中工具栏按钮扩展接口
com.fr.design.fun.ToolbarItemProvider
l 插件工程结构
l 实现过程
实现关键的几个接口。主要类如下所示对于的piugin.xml中的部分配置
com.fr.plugin.export.csv.core.CsvExport
com.fr.plugin.export.csv.core.CsvExtensionButton
com.fr.plugin.export.csv.ui.CsvExportToolbarUI
com.fr.plugin.export.csv.CsvLocaleFinder
l 打包插件
在插件目录执行下面的命令,或者直接点击build.bat批处理文件(注意修改JDK路径)
ant -f build.xml jar
安装插件后,在web属性配置界面就可以添加csv导出按钮了,
这个时候在浏览器上预览报表,就可以看到菜单栏上的csv导出按钮,点击就会把当前的报表导出成为csv文件。
2、自定义函数插件开发
在使用FineReport的自定义函数的时候,我们可以通过编译class之后通过函数管理器添加自定义函数,但是这样有如下三个缺点:
1)维护麻烦,每次更新韩式,都需要找到class文件所在的目录之后用新的class文件替换掉
2)自定义函数缺少该函数的使用说明,不知道的人无法正确的使用该函数,提高了沟通成本
3)传播不方便,在一台机器上使用的自定义函数,如果在另外一台机器上也要使用,需要找到需要拷贝的class文件和function.xml文件
为了解决这三个问题,报表工具FineReport中提供了函数定义的接口,可以通过插件来添加自定义函数,具体开发过程如下:
l 关键接口和xml属性
com.fr.stable.fun.FunctionDefineProvider
l 接口属性
配置属性值 | 描述 |
class | 自定义函数类别 |
name | 函数名 |
description | 函数使用描述 |
l 使用方法
<FunctionDefineProvider class="com.fr.plugin.function.MyFunction" name="my" description="函数的描述"/>
l Piugin.xml内容HTML/XML代码
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>
<id>com.fr.plugin.function.collection</id>
<name><![CDATA[自定义函数集合]]></name>
<active>yes</active>
<version>1.1</version>
<env-version>8.0</env-version>
<jartime>2015-09-10</jartime>
<vendor>author</vendor>
<description><![CDATA[自定义函数插件]]></description>
<change-notes><![CDATA[无]]></change-notes>
<extra-core>
<FunctionDefineProvider class="com.fr.plugin.function.MyFunction" name="my" description="拼接两个参数。调用方式:=my(C4, C5)"/>
<FunctionDefineProviderclass="com.fr.plugin.function.YourFunction" name="you"description="我的函数"/> </extra-core> </plugin>
l 实现内容(拼接两个字符串)
importcom.fr.general.GeneralUtils;
import com.fr.script.AbstractFunction;
import com.fr.stable.ArrayUtils;
import com.fr.stable.Primitive;
public class MyFunction extendsAbstractFunction {
@Override
public Object run(Object[] args) {
if (ArrayUtils.getLength(args) < 2) {
return Primitive.ERROR_VALUE;
}
return GeneralUtils.objectToString(args[0]) +GeneralUtils.objectToString(args[1]);
}
}
l 插件打包和安装
在插件工程目录下执行
ant -f build.xml jar
安装好插件后,会获取到插件安装包,通过设计器安装该插件后,可以在公式编辑器中的“插件函数”项下看到插件函数了
本文出自 “博客” 博客,请务必保留此出处http://10541372.blog.51cto.com/10531372/1871856
以上是关于如何利用报表工具FineReport实现报表列的动态展示的主要内容,如果未能解决你的问题,请参考以下文章