2011-09-14 47 views
12

使用iReport v4.0.1與Jasperserver v4.1.0我試圖找到一種語法,用於鏈接子報表到主報表,讓我測試它在iReport然後部署到服務器通過資源庫瀏覽器。在iReport中鏈接子報表,所以他們也在Jasper服務器工作

在iReport的子報表子報表表達式的默認語法是一樣的東西

$P{SUBREPORT_DIR} + "mySubReport.jasper" 

當你部署這個從iReport的是足夠聰明,選擇這並建議其更改爲

"repo:mySubReport.jrxml" 

,然後將所有子報表部署到主報表的資源文件夾中。

這很好,但不幸的是,它然後編輯iReport中的文件來保存這個變化,這意味着您不能再在iReport中運行報告,而無需手動重新編輯所有子報告表達式 - 這使得測試和部署到服務器確實很痛苦,特別是在報告中有多個子報告時。

我想我至少可以將$ P {SUBREPORT}的值設置爲「repo:」或「My \ local \ filepath」,這樣至少我只有一個地方可以更改它,但是編譯器不喜歡那樣。

是否有替代結構或將解析爲回購的表達式:* .jrxml或My \ local \ filepath * .jasper是否正確取決於您運行報表的位置?

回答

13

對此的最佳解決方案是添加一個附加參數,如$P{IsOnServer}。將默認值設置爲true。爲了您的報表表達式使用:

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

當您在iReport的報告,你會被提示輸入IsOnServer的價值。把它弄虛作假;子報表表達式將解析爲您的本地文件。在服務器上,不要定義輸入控件。用戶永遠不會被提示輸入該參數(他們甚至不知道它存在),並且會導致所需的'repo'語法。

一個更好的解決方案當然是iReport自動處理這個問題......但現在你需要做這樣的事情。

+1

感謝您提出的功能請求 - 其他人可以在這裏投票:http://jasperforge.org/projects/ireport/tracker/view.php?id=5539 ​​ – KCD

+0

mdahlman,你能更具體嗎?例如。你提供的腳本是在CDATA部分還是在外部工作?你能提供一個更完整的行示例嗎? –

+0

當我使用這個功能時,當我嘗試在演播室中打開報告時,出現「併發修改」異常。唯一的解決方案是在部署到服務器之前/之後手動將Paratter默認設置爲false/true。 –

相關問題