将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,具体取决于您运行报告的位置?
答案 0 :(得分:13)
最佳解决方案是添加其他参数,例如$P{IsOnServer}
。将默认值设置为true
。对于子报表表达式,请使用:
$P{IsOnServer} ? "repo:mySubReport.jrxml" : "/local/path/to/mySubReport.jasper"
在iReport中运行报表时,系统会提示您输入IsOnServer的值。弄错;子报表表达式将解析为您的本地文件。在服务器上,不要定义输入控件。永远不会提示用户输入该参数(他们甚至不知道它存在),并且会产生所需的“repo”语法。
更好的解决方案当然是iReport会自动处理这个......但是现在你需要做这样的事情。