报表打印教程之FineReport工具:如何修改数据
1、实现原理
通过使用程序网络报表所在类需要继承com.fr.web.reportlet这个抽象类,并且需要实现createReport(ReportletRequest arg0)这个方法,并返回报表对象。对返回的报表对象设置新的数据集,通过putTableData(DSName,tableData)方法,将定义的数据集添加到报表中,从而改变模板数据。DSName是定义的数据集名例如ds1,tableData是调用连接数据集。
2、定义程序数据集
程序数据集可以获取到不同数据库里面的值,或者通过java内部查询的结果放到程序数据集里面,再显示到报表上,具体程序数据集的使用,可参考程序数据源文档
3、定义程序网络报表
获取的模板1.cpt,使用的数据集ds2,里面连接的数据库表的格式必须要跟我们定义的程序数据集里面的列的名字是匹配的例如Name,Score这样赋值新的数据集,才可以显示结果。
具体代码如下:
//动态修改数据
package com.fr.demo;
import java.util.Map;
import com.fr.base.Env;
import com.fr.base.FRContext;
import com.fr.general.ModuleContext;
import com.fr.data.ArrayTableDataDemo;
import com.fr.io.TemplateWorkBookIO;
import com.fr.main.TemplateWorkBook;
import com.fr.report.module.EngineModule;
import com.fr.web.core.Reportlet;
import com.fr.web.request.ReportletRequest;
import com.fr.page.stable.ReportPageAttr;
public class NewDateDemo extends Reportlet {
public TemplateWorkBook createReport(ReportletRequest reportletrequest) {
TemplateWorkBook workbook = null;
Env oldEnv = FRContext.getCurrentEnv();
ModuleContext.startModule(EngineModule.class.getName());
try {
// 创建workbook对象,将模板保存为workbook对象并返回
workbook = TemplateWorkBookIO.readTemplateWorkBook(oldEnv,"1.cpt");
ArrayTableDataDemo a = new ArrayTableDataDemo(); // 调用定义的程序数据集连接
workbook.putTableData("ds2", a); // 给模板赋新的数据集
} catch (Exception e) {
e.getStackTrace();
}
return workbook;
}
@Override
public void setParameterMap(Map arg0) {
// TODO Auto-generated method stub
}
@Override
public void setTplPath(String arg0) {
// TODO Auto-generated method stub
}
}
4、编译生成类文件
在java开发平台中会自动编译,在此不再详述。
5、发布并Web预览
将编译后的NewDateDemo.class放到网络报表根目录下,由于该类在包com.fr.demo中,因此存放在WEB-INF\classes\com\fr\demo下,保存后启动服务器,如内置服务器,在浏览器中输入下地址:http://localhost:8075/WebReport/ReportServer?reportlet=com.fr.demo.NewDateDemo,便可以看到效果。
