java - 如何在自定义 JRDatasource 中使用 jasper 参数?
问题描述
我将 Jaspersoft Studio 6.11 与 Jasper Server 7.5.0 一起使用。
我想创建一个使用报告参数的数据源。我的数据源基于此示例: https ://community.jaspersoft.com/wiki/how-create-and-use-jrdatasource-adapter
public class MyImplementation implements JRDataSource {
//This should be initialized from report parameter $P{param}= "Frank,Joseph,Marco,Carl,Lenny,Homer,Teodor,Leopold"
private static String param;
private static String[] nameArray;
private static final Integer[] ageArray = {50,30,40,46,44,26,32,21};
private int counter = -1;
private HashMap<String, Integer> fieldsNumber = new HashMap<String, Integer>();
private int lastFieldsAdded = 0;
@Override
public boolean next() throws JRException {
if (counter<nameArray.length-1) {
counter++;
return true;
}
return false;
}
@Override
public Object getFieldValue(JRField jrField) throws JRException {
Integer fieldIndex;
if (fieldsNumber.containsKey(jrField.getName()))
fieldIndex = fieldsNumber.get(jrField.getName());
else {
fieldsNumber.put(jrField.getName(), lastFieldsAdded);
fieldIndex = lastFieldsAdded;
lastFieldsAdded ++;
}
if (fieldIndex == 0) return nameArray[counter];
else if (fieldIndex == 1) return ageArray[counter];
return "";
}
public static JRDataSource getDataSource(){
nameArray = param.split(",")
return new MyImplementation();
}
}
String param
应使用报告参数 $P{param} 值初始化。怎么做?如何在自定义数据源中使用报表参数?
解决方案
最常见的方法是创建一个构造函数并在其中传递参数。
首先删除所有static
修饰符,因为您不需要它们,而且您可以同时执行来自不同线程的多个报告(即使您当前没有这样做)
你的构造函数将是
public MyImplementation(String param){
this.param = param;
}
当你在 jrxml 中使用它时,你传递参数
<dataSourceExpression>
<![CDATA[new my.package.name.MyImplementation($P{param})]]>
</dataSourceExpression>