API向报表组传递“组”类型参数问题
首先我们来看一下需求,现在想通过api向报表中传递字符串数组类型的参数,当然,报表组中有对应的字符串组类型参数接收。
我们来看一下具体实现过程,定义showGroup.jsp,主要内容如下:
Context cxt = new Context();
String[] strArr1 = {“100723104537803200929443″,“100723103035803200929378″,“1007201109420704111439112″};
String str = “100723104537803200929443,100723103035803200929378,1007201109420704111439112″;
List<String> ll = new ArrayList<String>();
ll.add(strArr1[0]);
ll.add(strArr1[1]);
ll.add(strArr1[2]);
StringBuffer sb = new StringBuffer();
for(int i=0;i<strArr1.length-1;i++){
sb.append(strArr1[i]);
sb.append(“,”);
}
sb.append(strArr1[strArr1.length-1]);
String fileName = “C:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\webapps\\reportmis2\\mis2\\reportcenter\\res\\test.rpg”;
ReportGroup reportGroup = ReportGroup.read(fileName);
ParamMetaData pmd = reportGroup.getParamMetaData();
String param1 = “”;
if(pmd != null){
param1 = pmd.getParam(0).getParamName();
out.println(“参数0名称:“+param1);
out.print(“<br>”);
//cxt.setParamValue(param1,strArr1); //将字符串数组传给报表字符串组参数
//cxt.setParamValue(param1,str); //将逗号分隔的字符串传给报表字符串组参数
cxt.setParamValue(param1,ll); //将ArrayList传给报表字符串组参数(正确的传递方式)
}
GroupEngine groupEngine=new GroupEngine(reportGroup, cxt); // IReport ireport=groupEngine.get(0);
out.print(“正在运算报表……”);
out.print(“<br>”);
try{
ReportUtils.exportToExcel(“D:\\tt.xls”,ireport,false);
out.println(“excel输出成功!“);
}catch(Throwable e){
e.printStackTrace();
}
ReportGroup.write(“C:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\webapps\\reportmis2\\mis2\\reportcenter\\res\\testOther.rpg”,reportGroup);
out.println(“报表组保存成功!“);
请注意代码中的注释部分,我们做了三次传递,如下:
将字符串数组传给报表组字符串组参数
cxt.setParamValue(param1,strArr1);
访问showGroup.jsp报错
请注意红色方框中内容,我们发现报表对于该参数按照对象解析的,并未解析为字符串组,所以这样传递应该不可以。
将逗号分隔的字符串传给报表组字符串组参数
cxt.setParamValue(param1,str)
访问showGroup.jsp,后台打印信息
我们查看导出的Excel发现其内容是空的,也就是说报表并没有根据参数查到相关数据。
将ArrayList传给报表组字符串组参数
cxt.setParamValue(param1,ll);
访问showGroup.jsp,我们来看一下后台信息
发现打印出来的参数为args,好像是我们需要的字符串数组。那来看看导出的Excel是否正常。
数据正常导出了,这说明将List参数传递给字符串组参数是正确的。
总结:
报表中所有关于组类型的参数都是list类型的,我们传递的时候传递list进去便可以了。另外,我们也可以看出,组类型的参数在后台打印时会显示类似args这样的输出。