润乾报表中API⾃定义数据集
报表的数据来源⼤部分来⾃数据库,正常情况润乾报表都能⾃动处理,但是也会有特殊的情况,例如通过中间件连接数据库⽽⾮直连?通过业务程序算出的数据传递给报表进⾏展现等等。因此需要⽤户⾃定义数据集,我们看⼀个例⼦。
新建⼀个类⽂件,在类⽂件中写如下代码:
package test;
import java.sql.Connection;
import java.util.Iterator;
import java.util.Map;
import port4.dataset.DataSet;
import port4.dataset.IDataSetFactory;
import port4.dataset.Row;
import port4.usermodel.Context;
import port4.usermodel.CustomDataSetConfig;
import port4.usermodel.DataSetConfig;
public class MyDataSet implements IDataSetFactory {
public DataSet createDataSet(Context ctx, DataSetConfig dsc, boolean isinput) {
System.out.println("aa");
//获取系统数据源
String datasourceName = DataSourceName();
if( datasourceName==null || "".equals(datasourceName) )
//判断⽤户是否对数据集设置了数据源名,如果没有,则直接读取系统默认的数据源
datasourceName = DefDataSourceName();
Connection con;
try {
con = ConnectionFactory( datasourceName ).getConnection();
System.out.println( "得到的数据源是:"+con );
con.close();
} catch (Exception ex) {
ex.printStackTrace();
}
//取得参数列表并分别取得它的参数名与值,宏与之类似
Map map = ParamMap(false);
if( map != null ){
Iterator it = map.keySet().iterator();
while( it.hasNext() ){
//分别取得参数
String key = it.next().toString();
String value = (key).toString();
System.out.println("报表传⼊的参数"+key+"的值是:"+value);
}
}
//读取定义数据集时定义的传⼊参数
CustomDataSetConfig cdsc = (CustomDataSetConfig)dsc;
String[] args = ArgNames();
String[] vals = ArgValue();
if( args != null ){
for( int i=0; i<args.length; i++ ){
String key = args[i];
String value = vals[i];
System.out.println("定义数据集时传⼊参数"+key+"的值是:"+value);          }
}
//读取同⼀报表中已算出的数据集
//DataSet ds = DataSet("ds1");
//System.out.println("数据集ds1共有 "+ds.getColCount()+" 列字段");
//构造⼀个数据集
DataSet ds2 = new DataSet("ds2");
String[] filds = dataset[0];
for(int i=0; i < filds.length; i ++){
ds2.addCol( filds[i] );//设置数据集的字段
System.out.println("设置数据集的字段:"+filds[i]);
}
//设置数据集中的数据
for(int i = 1; i < dataset.length; i ++ ){
String[] datas = dataset[i];datasource是什么意思
Row rr = ds2.addRow();
for(int j = 0; j < datas.length; j ++){
rr.setData(j+1,datas[j]);
System.out.println("设置数据集的数据第"+i+"⾏ 第"+j+"列的值:"+datas[j]);
}
}
return ds2;
}
//定义⼀个⼆维数组作为本⾃定义数据集的来源
String [][] dataset = {
{"id","name","zhi"},
{"1","a","100"},
{"2","b","200"},
{"3","c","300"}
};
}
2 将类⽂件拷贝到相应⽂件下
在设计器中使⽤⾃定义类应把编译后的.class⽂件放在designer\classes\⾃定义类所在的包名下⾯。⽐如MyDataSet.java在test包中,那么就应该把编译后的MyDataSet.class⽂件放在设计器安装路径\ reportHome\designer\classes\test包中,如果classes下⾯不包含test包,⽤户需要⾃⼰新建。
在服务器中运⾏使⽤⾃定义类的报表⽂件时应把⾃定义类编译后的.class⽂件放在reportHome\webapps\WEB-INF\classes\⾃定义类所在的包名下⾯。⽐如MyDataSet.java在test包中,那么就应该把编译后的MyDataSet.class⽂件放在设计器安装路径
\reportHome\webapps\WEB-INF\classes\test包中,如果classes下⾯不包含test包,⽤户需要⾃⼰新建。
3 再建⼀张报表⽂件,如下图:
4 报表中设置⾃定义数据集,如下图:
5 点浏览,就能看到结果了,如下图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。