decorate image
decorate image
В связи с техническими работами сайт будет недоступен 21 декабря 2024 с 12:00 до 12:30 МСК
Автор
Надежда Ермошина
Время чтения
9 минут
Опубликовано
01.03.2024

Jmix Report vs Jasper Reports: два способа
генерации отчетов в Java веб-приложениях

Введение  

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

  • Счета-фактуры с деталями транзакций, ценами и налогами.
  • Накладные, адаптированные к конкретным грузоперевозкам.
  • Выписки по займам и ипотеке, включая графики платежей, расчеты процентов и остатки по кредиту.
  • Платежные ведомости для сотрудников с детализацией доходов, вычетов и суммой, подлежащей выплате.
  • Финансовые отчеты, включая отчеты о прибылях и убытках, балансы и отчеты о движении денежных средств.

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

В этой статье мы подробно рассмотрим библиотеку Jasper Reports, чтобы понять ее функционал, и исследуем, как Jmix решает аналогичную задачу, увидим разницу между двумя походами. Мы объясним, что такое Jmix и его дополнения, а также поделимся инсайтами о том, как они работают изнутри.

На простом примере мы добавим функцию в приложение HR Onboarding, пройдя через 5 основных шагов для динамической генерации документов и отображения результатов на экране веб-приложения Jmix. Мы не будем углубляться в сложные пошаговые инструкции, а предложим общий обзор опыта разработки и вспомогательных инструментов. Если вам нужны подробности, вы можете клонировать проект на GitHub или посмотреть вебинар для получения более детальной информации.

Jasper Reports: Java-библиотека для создания отчетов с открытым исходным кодом

Выбирая инструменты для генерации отчетов с открытым исходным кодом, вы скорее всего встретите такие решения, как BIRT, Pentaho и Jasper Reports. Каждая из этих систем обладает зрелым набором функций и предлагает как коммерческую, так и бесплатную версию для сообщества. Мы сосредоточимся на бесплатной версии JasperReports Community из-за ее широкого использования и признания.

JasperReports — это библиотека с открытым исходным кодом для создания отчетов, которая позволяет генерировать динамичные и гибко настраиваемые отчеты для Java-приложений. Jasper использует шаблоны в XML, которые заполняются данными из различных источников на стороне сервера, создавая итоговый визуальный отчет.

Что делает библиотека Jasper Reports?

Jasper Reports рендерит предоставленные данные, форматирует их согласно шаблону и возвращает результат для отображения на экране, отправки на принтер или экспортирует в один из офисных форматов.

Разработчики часто используют Report Designer — отдельный визуальный инструмент для создания шаблонов отчетов, определяющий внешний вид итогового документа. Designer имеет широкий спектр функций, включая прямое подключение к источникам данных. Designer возвращает .jxml файл, который затем используется движком Jasper Reports. Движок берет этот шаблон и компилирует его в исполняемый формат. Этот шаг компиляции оптимизирует отчет для эффективной обработки. Используя скомпилированный шаблон и предоставленные данные, движок динамически заполняет содержимое отчета. Наконец, он экспортирует сгенерированные отчеты в различные форматы, такие как PDF, HTML, Excel.

Движок Jasper Reports

Хотя все функции отчетности доступны в одном JAR-файле, JasperReports полагается на другие сторонние библиотеки для вспомогательных функций, таких как парсинг XML, логирование, генерация PDF и XLS.

Поверх библиотеки отчетности Jasper Reports есть HTTP-сервис, который предоставляет функциональность генерации отчетов через REST API.

Какая функциональность не предоставляется?

Чтобы реализовать функцию отчетности, готовую для использования в бизнес-приложениях, необходимо выполнить несколько дополнительных задач. Некоторые из них специфичны для проекта, но есть и несколько повторяющихся задач:
01
Разработать логику взаимодействия с базой данных для извлечения данных, их преобразования и передачи в движок отчетности.
02
Реализовать безопасность, включая роли и разрешения, для предотвращения несанкционированного доступа к данным.
03
Построить клиентскую часть, позволяющую пользователям взаимодействовать с отчетами и бесшовно интегрировать результаты в веб-страницы.

Jasper Reports и другие библиотеки для генерации отчетов имеют общую цель: они предназначены для выполнения определенной задачи. Они берут шаблон и данные, а затем предоставляют заполненный шаблон для просмотра на экране или экспорта в офисный формат. Коммерческие функции постоянно развиваются, стремясь к полноценным наборам инструментов для Business Intelligence (BI).

В отличие от обычной библиотеки для генерации отчетов, дополнение Jmix Reports идет дальше. Оно не только выполняет основные функции, но и решает другие важные задачи, такие как управление данными, обеспечение безопасности, интеграция с пользовательским интерфейсом и предоставление визуальных экранов для настройки отчетов. Многие из этих функций доступны в режиме реального времени.

Jmix Reports Add-on: библиотека для создания отчетов против функционального модуля

Jmix Reports, в отличие от любой библиотеки для генерации отчетов — это готовый функциональный модуль, который встраивается в Jmix-приложение и предоставляет бизнес-функционал «из коробки».

Jmix предоставляет основу для создания веб-приложений на Java. Jmix Reports Addon — это готовый к использованию функциональный модуль, реализующий конкретную бизнес-функцию и бесшовно интегрирующийся в Jmix Java веб-приложение.

Что такое Jmix?

Jmix — это высокопродуктивная платформа разработки с открытым исходным кодом для Java разработчиков, основанная на Spring Boot. Jmix состоит из трех основных частей, работающих вместе:

  • Jmix Framework: Набор библиотек с открытым исходным кодом, предоставляющих базовые строительные блоки и инструменты, например, доступ к данным, безопасность, UI, хранение файлов.
  • Jmix Studio: Плагин для IntelliJ IDEA Community Edition, содержащий визуальные дизайнеры для работы с моделью данных, разработки макета интерфейса и настройки свойств компонентов UI в стиле WYSIWYG, моделирования диаграмм BPMN 2.0, генерации шаблонного кода и управления конфигурацией проекта.
  • Add-ons: Уже реализованные функциональные модули можно загрузить из Jmix Marketplace. Дополнения охватывают широкий спектр функций — от уведомлений до инструментов автоматизации бизнес-процессов.
Jmix Framework предоставляет надежную основу для Java веб-приложений. Jmix Add-on — это готовый к использованию функциональный модуль, реализующий конкретную бизнес- или системную функцию и бесшовно интегрирующийся в проект Jmix.

Что такое Jmix add-on?  

В своей основе Jmix Addon — это Java-библиотека. В отличие от стандартной Java библиотеки, такой как Jasper Reports, Jmix Addon следует определенным правилам и использует некоторые основные функции Jmix для бесшовной интеграции предоставляемой функциональности в Jmix приложение. Главное отличие в том, что дополнение Jmix — это полный стек: оно может содержать модель данных, бизнес-логику и пользовательский интерфейс. Добавив дополнение в зависимости build.gradle, вы можете получить новую подсистему в вашем проекте, с данными, хранящимися в вашей базе данных и интерфейсом, интегрированным в главное меню.

Что такое Jmix Reports Add-on?

Jmix Reports Addon состоит из нескольких компонентов. Каждый компонент добавляет определенную функциональность:

YARG
Основная библиотека отчетности, которая организует данные, полученные из источника данных, согласно дизайну, определенному в шаблоне.
Report Engine
Интегрирует YARG в Jmix Framework и предоставляет доступ к функциям платформы Jmix, включая управление данными, безопасность, подключение UI, хранение файлов, локализацию и другие.
Report Designer

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

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

5 шагов для добавления Report Addon
в веб-приложение

Рассмотрим на простом примере, как это работает. Возьмем Jmix-приложение для онбординга (адаптации) новых сотрудников. В документации Jmix есть пошаговое руководство по разработке этого приложения. Приложение позволяет создавать план адаптации, назначать задачи пользователю и отслеживать их выполнение.

Добавим в приложение генерацию документов с использованием данных о сотрудниках, хранящихся в приложении. Для каждого сотрудника мы будем создавать и автоматически заполнять документ, а также отображать его на экране.

Шаг 1
Установите Reports Addon с Jmix Marketplace
Для того чтобы использовать функционал отчетов, необходимо установить дополнение Jmix Reports.

Дополнения Jmix публикуются на Jmix Marketplace. Вы можете просматривать и устанавливать их прямо в Jmix Studio.

Шаг 2
Создайте отчет с помощью мастера отчетов
После установки дополнения запустите Jmix-приложение. В главном меню приложения появится новый раздел «Отчеты». Откройте экран обозревателя отчетов и создайте новый отчет.

Для создания отчета укажите название, описание, группу. Затем добавьте полосы, именованные области из шаблона, которые будут заполняться данными, указанными на том же экране с помощью SQL, JPQL или Groovy. После настройки полос, параметров и форматов значений загрузите шаблон для заполнения данными. Вы можете использовать Word, Excel, HTML или другие форматы для шаблона. В этом примере мы используем файл .docx с формой проверки сотрудника и загружаем его в систему.

Далее дизайнер предоставляет возможность указать права доступа для отчета через механизм контроля доступа Jmix. Когда отчет готов, вы можете запустить его вручную и проверить.

Шаг 3
Интегрируйте отчет в бизнес-логику приложения

Теперь, когда отчет настроен, ваша цель — добавить в приложение бизнес-логику и автоматизировать процесс генерации отчета, который мы только что запустили вручную.

Система должна автоматически генерировать форму проверки сотрудника для выбранного пользователя по нажатию кнопки на экране.

Внесем изменения в экран с отображением списка пользователей, добавим туда кнопку и сервис для генерации отчета.

Откройте проект Onboarding в IntelliJ IDEA и найдите представление User.List. Представления определяются Java-классами, обычно в паре с соответствующим XML файлом – дескриптором. В дескрипторе определяется макет представления пользователей. Jmix Studio предоставляет дизайнер представлений для разработки макета и настройки свойств компонентов UI в стиле WYSIWYG.

Добавим кнопку «Подготовить документы» на экран. Для этого нужно перейти к компоненту DataGrid, отображающему список пользователей, и добавить новое действие. Это действие появится на панели кнопок и будет вызывать указанный вами сервис. Дизайнер представлений помогает настроить макет, добавить компоненты и сконфигурировать их.

Теперь нужно реализовать логику создания и заполнения документа. Мы создадим сервис, который в дальнейшем привяжем к кнопке.

Когда HR-менеджер нажимает кнопку «Подготовить документы», мы должны создать экземпляр сущности Document, сгенерировать документ, заполнить его данными о сотруднике и сохранить результат.

В реализации бизнес-логики мы будем использовать инструменты Jmix:
  • Data Manager: Основной интерфейс для CRUD (создание, чтение, обновление, удаление) операций над сущностями.
  • File Storage: Абстракция, позволяющая использовать различные реализации хранения файлов и предоставляющая единый интерфейс для доступа к файлам и ссылок на них из сущностей модели данных.

И специфические для дополнения инструменты:

  • ReportRunner: Интерфейс, используемый для запуска отчетов. Все его методы возвращают объект ReportOutputDocument, содержащий результат выполнения отчета.
Шаг 4
Создайте представление для отображения документа

После того как мы автоматизировали процесс создания и заполнения документа, нам понадобятся экраны для просмотра и редактирования созданных экземпляров сущности Documents.

Jmix View Designer помогает создавать экраны для сущностей автоматически. Мы воспользуемся этим функционалом. В дальнейшем можно дорабатывать сгенерированные экраны с помощью инструментов дизайнера.

Используя роли и разрешения подсистемы безопасности Jmix, вы можете ограничить доступ к сгенерированным документам и отображать в списке только те документы, которые принадлежат текущему пользователю.

Шаг 5
Отображение результата отчета в компоненте UI

Доработаем экран отображения экземпляров сущности Document, добавим возможность просматривать сгенерированный документ.

Jmix предоставляет широкую линейку визуальных компонентов для реализации пользовательского интерфейса. С помощью дизайнера представлений мы выберем компонент для отображения документа и разместим его на экране.

Ознакомьтесь с проектом на GitHub
Подробнее
Заключение
В отличие от библиотеки для создания отчетов, Jmix Reports Addon — это готовый к использованию функциональный модуль. Он не только включает библиотеку отчетности, но и реализацию вспомогательных механизмов. Эти механизмы отвечают за такие задачи, как управление данными, хранение отчетов и шаблонов, определение ролей и прав доступа, динамическое создание и настройка отчетов, а также связи с интерфейсом пользователя.