Связывание подписок в iReport, поэтому они также работают на сервере Jasper
Использование iReport v4.0.1 с Jasperserver v4.1.0. Я пытаюсь найти синтаксис для привязки вложенных отчетов к основному отчету, который позволяет мне протестировать его в iReport, а затем развернуть на сервер через браузер хранилища.
Синтаксис по умолчанию для подзадач в iReport для выражения подрепортажа похож на
$P{SUBREPORT_DIR} + "mySubReport.jasper"
Когда вы развертываете это из iReport, он достаточно умен, чтобы выбрать это и предложить изменить его на
"repo:mySubReport.jrxml"
и затем развернуть все вложенные записи в папку "Ресурсы" основного отчета.
Это замечательно, но, к сожалению, он редактирует файл в iReport, чтобы сохранить это изменение, что означает, что вы больше не можете запускать отчет в iReport без ручного повторного редактирования всех выражений суб-отчета - это делает процесс тестирования и развертывания на сервер действительно больно, особенно когда в отчете есть несколько подзадач.
Я думал, что я мог бы хотя бы установить значение $P {SUBREPORT} как "repo:" или "My\local\filepath", чтобы по крайней мере у меня было только одно место для его изменения, но компилятор не нравится.
Есть ли альтернативная структура или выражение, которое будет решено выполнить репо: *. jrxml или My\local\filepath *.jasper правильно в зависимости от того, откуда вы запускаете отчет?
Ответы
Ответ 1
Лучшим решением для этого является добавление дополнительного параметра, такого как $P{IsOnServer}
. Задайте значение по умолчанию true
. Для выражения вашего подрепортажа используйте это:
$P{IsOnServer} ? "repo:mySubReport.jrxml" : "/local/path/to/mySubReport.jasper"
Когда вы запустите отчет в iReport, вам будет предложено указать значение IsOnServer. Сделайте его ложным; выражение подрепортажа будет разрешено для вашего локального файла. На сервере не определяйте элемент управления ввода. Пользователям никогда не будет предложено указать этот параметр (они даже не знают, что он существует), и это приведет к желаемому синтаксису репо.
Разумеется, даже лучшее решение для iReport должно обрабатывать это автоматически... но теперь вам нужно сделать что-то вроде этого.