1.2.5. Шаблон JasperReports

Генератор отчётов позволяет извлекать информацию из приложения и использовать для её вывода шаблоны отчётов JasperReports. Язык разметки JasperReports будет обработан генератором отчётов, преобразуя шаблон в отчёт с выбранным типом вывода.

Вы можете создавать шаблоны JRXML, как используя специальные утилиты JasperReports (такие как Jaspersoft Studio), так и в простом текстовом редакторе. Каждой полосе отчёта, указанной в его структуре, должен соответствовать свой элемент band в файле шаблона, который, в свою очередь, должен быть помещён в одну из стандартных секций отчёта JasperReports (в терминологии JasperReports эти секции также называются bands): title, pageHeader, columnHeader, detail, и т.д.

Из данных со всех полос отчёта генератор формирует один источник данных: JRBandDataDataSource, содержащий данные в виде дерева с корневой полосой Root, и передаёт экземпляр CubaJRFunction в отчёт в качестве основного источника данных. Обратиться к источнику данных можно с помощью параметра REPORTING. Этот параметр объявлять в шаблоне не обязательно, он будет добавлен автоматически, однако если вы хотите компилировать отчёты в JasperReports IDE, параметр необходимо объявить явно.

Для параметра REPORTING доступны следующие два метода:

  • dataset - получает вложенный источник данных из основного источника, который можно использовать, например, в таблицах или подотчётах в качестве subDataset. Метод ищет среди наследников полосы Root полосу с указанным именем и создаёт новый источник данных только из этой полосы. Например:

    <subDataset name="Product">
            <field name="name" class="java.lang.String"/>
            <field name="price" class="java.lang.Long"/>
    </subDataset>
    ...
    <dataSourceExpression><![CDATA[$P{REPORTING}.dataset("Product")]]></dataSourceExpression>
  • bitmap - преобразует переданный массив байтов в ByteArrayInputStream, который можно использовать для вставки изображений в отчёт. Например:

<field name="Main.image" class="java.lang.Object"/> //image from DB as byte array
...
<imageExpression><![CDATA[$P{REPORTING}.bitmap($F{Main.image})]]></imageExpression>

К каждой полосе отчёта генератор обращается только один раз, поэтому если вам необходимо представить одни и те же данные в разных формах (к примеру, в виду таблицы и в виде графика) в одном отчёте, вам необходимо создать столько полос, сколько элементов band вы используете в шаблоне. Вложенные полосы не поддерживаются, для корректного отображения используйте только полосы, вложенные непосредственно в Root.

Вставить значения из источника данных в поле можно, используя следующий синтаксис: $F{<field name>}. Например:

<textField>
    <textFieldExpression><![CDATA[$F{library_department_name}]]></textFieldExpression>
</textField>

Примёр отчёта, использующего шаблон JasperReports, доступен в разделе Примеры отчётов.