我是iReport的新手,到目前为止我所做的只是运行已编译的报告。事实上,它是我们目前正在使用的报告,所以不应该有任何问题。但是,当我运行报告时,我会抛出此错误消息
Compiling to file... C:\Program Files\Fishbowl\reports\Custom\PackingListTacticalMedical2015.jasper
Compiling subreports....
Subreport C:\Program Files\Fishbowl\reports\Custom\SOPackingListTacticalMedical2015.jrxml already compiled.
**Unable to locate the subreport with expression: "$P{cbLayoutFormat}.equals("standard") ? $P{path} + "POPackingList.jasper" : $P{cbLayoutFormat}.equals("carton") ? $P{path} + "cartonPOPackingList.jasper" : $P{path} + "POPackingListLoc.jasper"".**
Compilation running time: 13,619
报告仍然运行并编译,但是当我被提示输入"输入shipID" - 而我 - 结果是空白的。我知道这个消息在说什么,我只是不明白这意味着什么。
感谢任何可以提供相关说明或解释的人。
答案 0 :(得分:0)
尝试将子报表的表达式数据类型更改为InputStream而不是String(path),然后将子报表作为输入流作为参数传递。 将子报表放在资源目录中。并编译它。
InputStream subReportStream=getClass().getResourceAsStream("subReportName.jasper");
params.put("SUBREPORT_STREAM", subReportStream);
this work fine for me.
答案 1 :(得分:0)
通过Fishbowl将其运行路径插入$ P {path}参数的方式,您需要在编译和更改报告时关闭编译子报告选项。另外,Fishbowl在运行时覆盖参数的方式,如果你想从iReport而不是Fishbowl中运行它,你必须知道你正在寻找的所有数据库ID。 最简单的解决方法是将报告编译到其工作目录,并在编译报告更改时在Fishbowl内部刷新。