链接iReport中的子报表,以便它们也可以在Jasper服务器中工作

ben*_*001 11 deployment jasper-reports subreport ireport jasperserver

将iReport v4.0.1与Jasperserver v4.1.0一起使用我正在尝试找到一种语法,用于将子报告链接到主报告,让我在iReport中测试它,然后通过存储库浏览器部署到服务器.

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

$P{SUBREPORT_DIR} + "mySubReport.jasper"
Run Code Online (Sandbox Code Playgroud)

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

"repo:mySubReport.jrxml"
Run Code Online (Sandbox Code Playgroud)

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

这很好,但不幸的是它然后在iReport中编辑文件以保存此更改,这意味着您无法再在iReport中运行报告而无需手动重新编辑所有子报表表达式 - 这使得测试和部署到服务器的过程成为可能非常痛苦,特别是当报告中有多个子报告时.

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

是否有一个替代结构或表达式将解析为repo:*.jrxml或My\local\filepath*.jasper,具体取决于您运行报告的位置?

mda*_*man 13

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

$P{IsOnServer} ? "repo:mySubReport.jrxml" : "/local/path/to/mySubReport.jasper"
Run Code Online (Sandbox Code Playgroud)

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

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