Связывание вложенных отчетов в iReport, чтобы они также работали на сервере Jasper - PullRequest
12 голосов
/ 14 сентября 2011

Использование iReport v4.0.1 с Jasperserver v4.1.0 Я пытаюсь найти синтаксис для привязки подотчетов к основному отчету, который позволяет мне проверить его в iReport, а затем развернуть на сервере через обозреватель хранилища.

Синтаксис по умолчанию для подотчетов в iReport для выражения подотчета выглядит примерно так:

$P{SUBREPORT_DIR} + "mySubReport.jasper"

Когда вы развертываете его из iReport, он достаточно умен, чтобы поднять это и предложить изменить его на

"repo:mySubReport.jrxml"

и затем развернуть все вложенные отчеты в папке «Ресурсы» основного отчета.

Это замечательно, но, к сожалению, затем он редактирует файл в iReport, чтобы сохранить это изменение, что означает, что вы больше не можете запускать отчет в iReport без ручного повторного редактирования всех выражений подотчета - это делает процесстестирование и развертывание на сервере очень болезненно, особенно когда в отчете несколько подотчетов.

Я думал, что мог бы по крайней мере установить значение $ P {SUBREPORT} равным "repo:" или "Мой \ local \ filepath ", чтобы по крайней мере у меня было только одно место, чтобы изменить его, но компилятору это не понравилось.

Есть ли альтернативная структура или выражение, которое разрешит репо:* .jrxml или My \ local \ filepath * .jasper правильно, в зависимости от того, откуда вы запускаете отчет?

1 Ответ

13 голосов
/ 02 декабря 2011

Лучшее решение для этого - добавить дополнительный параметр, например $P{IsOnServer}.Установите значение по умолчанию true.Для выражения вашего подотчета используйте это:

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

Когда вы запустите отчет в iReport, вам будет предложено ввести значение IsOnServer.Сделайте это ложным;выражение подотчета будет преобразовано в ваш локальный файл.На сервере не определяйте элемент управления вводом.Пользователям никогда не будет предложено ввести этот параметр (они даже не узнают, что он существует), и это приведет к желаемому синтаксису «репо».

Конечно, iReport может решить и лучшее решение для обработкиэто автоматически ... но сейчас вам нужно сделать что-то вроде этого.

...