Как мне интегрировать BIRT в проект Python Django с помощью Py4j
Здравствуйте, есть ли кто-нибудь, кто поможет мне интегрировать отчет BIRT с проектами Django? Или какие-нибудь предложения по подключению сторонних инструментов отчетности к Django, таких как Crystal или Crystal Clear Report.
Некоторые сторонние программы просмотра Crystal Reports, перечисленные здесь, предоставляют полный API командной строки, поэтому ваш код на python может просматривать/экспортировать/печатать отчеты через subprocess.call()
Результирующий процесс может охватывать все: от интерактивной сессии просмотра Crystal Report (пользователь может войти в систему, установить/изменить параметры, распечатать, экспортировать) до автоматизированной (без взаимодействия с пользователем) печати/экспорта отчета.
Хотя это упростит ваш код, это ограничит развертывание на Windows.
Для создания прототипов или если вас не беспокоит производительность, вы можете вызывать BIRT из командной строки.
Например, загрузите среду выполнения POJO и используйте сценарий genReport.bat
(IIRC) для создания отчета в файл (например, в формате PDF). Вы можете указать параметры вывода и параметры отчета в командной строке.
Однако, запуск BIRT требует больших накладных расходов (несколько секунд). Для достижения разумной производительности, гораздо лучше выполнить это только один раз.
Для достижения этой цели есть, по крайней мере, два возможных пути:
Вы можете использовать сервлет BIRT viewer (который включен как WAR файл с POJO runtime). Таким образом, вы запускаете сервлет с веб-сервера, а затем используете HTTP-запросы для генерации отчетов. Технически это выглядит старомодно (например, нет JSON-запросов), но это должно работать. Однако я никогда не использовал этот подход.
Другой вариант - написать свой собственный BIRT-сервер.
В нашем продукте мы следовали этому подходу.
Вы можете взять сервлет просмотра в качестве шаблона, чтобы увидеть, как это может работать.
Основная идея заключается в следующем: Вы запускаете один (или, возможно, более одного) Java-процесс. Java-процесс инициализирует среду выполнения BIRT (это занимает несколько секунд). После этого Java-процесс каким-то образом прослушивает запросы (мы использовали простой сокетный слушатель, но, конечно, вы также можете использовать HTTP или какой-нибудь REST-сервер).
Запрос должен содержать следующую информацию:
- какой модуль запускать
- какой формат вывода
- параметры отчета (специфические для модуля)
- возможно, другие данные/метаданные, например, для аутентификации
Это создаст RunAndRenderTask
или отдельные RunTask
и RenderTask
s.
В зависимости от ваших отчетов, вы можете рассмотреть возможность возврата полученного результата (например, PDF) непосредственно в качестве ответа, или использовать асинхронный подход.
Обратите внимание, что BIRT с удовольствием создаст несколько отчетов одновременно - многопоточность не является проблемой (за исключением инициализации), если достаточно оперативной памяти.
Однако имейте в виду, что вам потребуется по крайней мере несколько дней для создания POC для этого подхода "создай свой собственный сервер", и, вероятно, несколько недель для обеспечения качества продукции.
Итак, если вы просто хотите быстро создать что-то, чтобы понять, подходит ли вам этот инструмент, вам следует начать с подхода командной строки, затем с подхода сервлетов и только потом, и только если вы обнаружите, что подход сервлетов недостаточно хорош, вам следует пойти по пути "создания собственного сервера".
Жаль, что в настоящее время не существует современного REST сервиса BIRT с открытым исходным кодом, производственного качества.
Это было бы действительно хорошим вкладом в проект BIRT с открытым исходным кодом... (https://github.com/eclipse/birt)