11

使用 iReport v4.0.1 和 Jasperserver v4.1.0 我试图找到一种将子报表链接到主报表的语法,让我在 iReport 中对其进行测试,然后通过存储库浏览器部署到服务器。

子报表表达式的 iReport 中子报表的默认语法类似于

$P{SUBREPORT_DIR} + "mySubReport.jasper"

当您从 iReport 部署它时,它足够聪明地选择它并建议将其更改为

"repo:mySubReport.jrxml"

然后将所有子报表部署到主报表的 Resources 文件夹。

这很好,但不幸的是,它随后会在 iReport 中编辑文件以保存此更改,这意味着您无法在不手动重新编辑所有子报表表达式的情况下在 iReport 中运行报表 - 这会导致测试和部署到服务器的过程真的很痛苦,特别是当报告中有多个子报告时。

我想我至少可以将 $P{SUBREPORT} 的值设置为“repo:”或“My\local\filepath”,这样至少我只有一个地方可以更改它,但编译器没有像那样。

是否有替代结构或表达式可以根据您运行报告的位置正确解析为 repo:*.jrxml 或 My\local\filepath*.jasper?

4

1 回答 1

13

最好的解决方案是添加一个额外的参数,如$P{IsOnServer}. 将默认值设置为true。对于您的子报表表达式,请使用:

$P{IsOnServer} ? "repo:mySubReport.jrxml" : "/local/path/to/mySubReport.jasper"

在 iReport 中运行报表时,系统会提示您输入 IsOnServer 的值。让它成为假的;子报表表达式将解析为您的本地文件。在服务器上,不要定义输入控件。永远不会提示用户输入该参数(他们甚至不知道它存在),并且它将导致所需的“repo”语法。

一个更好的解决方案当然是让 iReport 自动处理这个......但现在你需要做这样的事情。

于 2011-12-02T05:46:45.033 回答