Добавление вложенных отчетов в главный отчет во время выполнения (java)

Хорошо, я не смог найти ответ на свой вопрос в Google, так что ...

В настоящее время я использую JasperReports и DynamicJasper для создания своих отчетов и их печати. Все работает нормально, когда я использую только отдельные jasper-файлы или jrxml-файлы. У меня также есть фрагмент кода, который объединяет все файлы JasperPrint в один, если мне нужно объединить отчеты. Однако это не совсем оптимально ...

Могу ли я использовать один файл .jasper или .jrxml в качестве основного отчета (у него есть заголовок, нижний колонтитул и пустая полоса деталей) и заполнить его полоску деталей подотчетами 1-n (в настоящее время в .jasper или .jxrml) ?

В настоящее время только один из моих подчиненных отчетов использует источник данных (tablemodel), а другие подчиненные отчеты получают свои данные из параметров.

Я нашел несколько разных способов сделать что-то, что может привести к желаемому результату, но пока безуспешно ... Какие строители / менеджеры / все, что мне нужно? Немного расстраиваюсь, потому что не могу найти достаточно информации о разных классах, методах и их параметрах. Зачем они нужны и что требуется. Примеры недостаточно объясняют ...

Следует ли мне использовать DynamicReportBuilder для создания DynamicReport для DynamicJasperHelper, который генерирует JasperReport, который, в свою очередь, заполняется методом JasperFillManager.fillReport?


person Antti    schedule 28.10.2014    source источник
comment
Если вы выберете вложенные отчеты, будут ли вложенные отчеты иметь разный или одинаковый дизайн с разными данными?   -  person Darshan Lila    schedule 29.10.2014
comment
некоторые вложенные отчеты имеют разный дизайн, а некоторые - одинаковый дизайн с разным содержанием.   -  person Antti    schedule 30.10.2014
comment
Не будет проблем, если у вас будет один и тот же вложенный отчет о дизайне, но для разных проектов вам нужно будет создавать разные вложенные отчеты и подключать их во время выполнения.   -  person Darshan Lila    schedule 30.10.2014
comment
В простейшем подотчете есть только одно текстовое поле, в большинстве - изображения и / или несколько текстовых полей, а в одном подотчете - одна таблица. Пользователь выбирает, какие продукты он / она хочет распечатать, а затем мне нужно объединить все подотчеты о продуктах в один. В настоящее время я могу создавать все продукты как объекты JasperPrint, а затем объединять их в один JasperPrint. К сожалению, будет слишком много разрывов страниц, потому что каждый JasperPrint начинается с новой страницы, а некоторые продукты имеют только одну строку текста.   -  person Antti    schedule 30.10.2014
comment
Я не против создать несколько дизайнов. Они у меня уже есть. Проблема в том, как объединить их во время выполнения ...   -  person Antti    schedule 30.10.2014
comment
Я думаю, что вы можете использовать printWhenExpression на вилках, иметь все подотчеты в одном и в зависимости от printWhenExpression их можно выбрать для отображения или нет.   -  person Darshan Lila    schedule 30.10.2014
comment
Позвольте мне сформулировать ответ для лучшего объяснения.   -  person Darshan Lila    schedule 30.10.2014
comment
Не могли бы вы взглянуть на: stackoverflow.com/questions/53615452/   -  person SHASHA    schedule 04.12.2018


Ответы (1)


Объедините все подотчеты в один основной отчет и используйте print when expression для наглядности. Скажите, что ниже указан код вложенного отчета.

<subreport>
   <reportElement uuid="9f36c3cb-7e29-4040-a14e-6a91775e89e4" x="0" y="35" width="555" height="47">
      <printWhenExpression><![CDATA[$P{disp} == 1]]></printWhenExpression>
   </reportElement>
<!-- Other Element -->
</subreport>

Обратите внимание на следующую строку в приведенном выше коде.

<printWhenExpression><![CDATA[$P{disp} == 1]]></printWhenExpression>

Это означает, что весь подотчет должен быть включен, когда $P{disp}.intValue() == 1. Здесь $P{disp} - это параметр, который необходимо передать для отчета для работы с printWhenExpression.

Параметры или необязательные, вы также можете использовать field. И условия основаны на ваших требованиях.

Note : Вы можете использовать аналогичный подход для всех вложенных отчетов.

person Darshan Lila    schedule 30.10.2014
comment
Спасибо! Наконец-то у меня все заработало. Подотчет не отображался, потому что я не отправлял ему JREmptyDataSource ... Хотя такое решение требует большой работы, которую можно было бы выполнить более общим способом. Основная проблема заключается в использовании одного табличного jasper-файла, в котором таблица может иметь разные столбцы. Может ли JasperReports иметь одну таблицу, в которую могут быть предоставлены данные с разными столбцами? - person Antti; 30.10.2014
comment
Не могли бы вы дать мне образец кода или объяснение того, как я изменяю столбцы компонента таблицы .jasper -file во время выполнения? - person Antti; 03.11.2014
comment
Компоненты и столбцы будут там все время, просто они будут отображаться на основе <printWhenExpression>. Например, если у вас 5 столбцов и вы хотите отобразить первые два, установите <printWhenExpression> для последних трех в значение false, используя параметр, который вы передадите в отчет. - person Darshan Lila; 03.11.2014
comment
Хорошо спасибо! Это добавить все, а затем показать только часть, это звучит немного хакерским решением, но я думаю, я могу с этим жить. - person Antti; 05.11.2014