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

发布于 2024-12-04 12:02:50 字数 652 浏览 1 评论 0原文

使用 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 ?

Using iReport v4.0.1 with Jasperserver v4.1.0 I'm trying to find a syntax for linking subreports to the main report that lets me test it in iReport then deploy to the server through the repository browser.

The default syntax for sub-reports in iReport for the subreport expression is something like

$P{SUBREPORT_DIR} + "mySubReport.jasper"

When you deploy this from iReport it's smart enough to pick this up and suggest changing it to

"repo:mySubReport.jrxml"

and to then deploy all subreports to the Resources folder of the main report.

That's great, but unfortunately it then edits the file in iReport to save this change which means you can no longer run the report in iReport without manually re-editing all the sub-report expressions - this makes the process of testing and deploying to the server really painful, particularly when there are multiple sub-reports in a report.

I thought I could at least set the value of $P{SUBREPORT} to be "repo:" or "My\local\filepath" so that at least I'd only have one place to change it, but the compiler doesn't like that.

Is there an alternative structure or an expression that will resolve to repo:*.jrxml or My\local\filepath*.jasper correctly depending on where you're running the report from?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终陌 2024-12-11 12:02:51

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

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

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

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

The best solution to this is to add an additional parameter like $P{IsOnServer}. Set the default value to true. For your subreport expression use this:

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

When you run the report in iReport, you'll be prompted for the value of IsOnServer. Make it false; the subreport expression will resolve to your local file. On the server, don't define an input control. The users will never be prompted for that parameter (they won't even know it exists), and it will result to the desired 'repo' syntax.

An even better solution would of course be for iReport to handle this automatically... but for now you need to do something like this.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文