为什么iReport会抛弃这些子报告异常?

时间:2015-09-24 15:15:46

标签: jasper-reports subreport

我是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" - 而我 - 结果是空白的。我知道这个消息在说什么,我只是不明白这意味着什么。

感谢任何可以提供相关说明或解释的人。

2 个答案:

答案 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内部刷新。