Динамическое генерирование отчетов в Pentaho и дело с определениями отчетов в базе данных
-
10-10-2019 - |
Вопрос
Я разрабатываю приложение отчетности, в котором пользователь может выбрать (и заказывать) отчеты из списка из 100 отчетов и запрашивать основной отчет. Этот основной отчет будет содержать все выбранные отчеты в точном порядке и с содержимым таблицей, в которых перечислены отчеты, включенные в основной отчет. Отчеты, доступные для пользователя, чтобы выбрать (что может быть 100 -е годы), хранятся в базе данных.
Мои вопросы:-
- Чтобы сгенерировать основной отчет с выбранными пользователями отчетами, единственное решение, которое я вижу, - это использование API отчетного двигателя для генерации динамического отчета, в который я должен добавить выбранные пользователя отчеты в качестве подрепортов. Это правильный и самый простой способ подойти к этой проблеме? У кого -нибудь есть образцы использования API отчетного двигателя, особенно для внедрения субрепорт в главном отчете?
- Поскольку я храню отчеты в DB (Blobs), я пытаюсь найти способ сгенерировать свои подложки с помощью входного потока, а не URL, как указано в
ResourceManager.createDirectly(url, MasterReport.class)
, но до сих пор не был успешным. Как я могу генерировать отчеты из определений, хранящихся в базе данных? Там должна быть некоторая абстракция ресурсов.
Решение
Прочитайте свои отчеты в байтовую арайю, а затем используйте метод ResourcceManager.createdirectly, как обычно. Это решит вашу проблему разбора отчетов.
Вы можете проанализировать их непосредственно в субрепорты, используя
Resourcemanager.createdirectly (байты, subreport.class)
Эти субрепорты могут затем быть добавлены в ваш основной отчет в качестве полос подрепортом. Если вы хотите, чтобы выбранные вами отчеты запустились на новой странице, убедитесь, что вы установили стиль «Breakbreak-Bree» на заголовке отчетов вашего подропорта.
Существует абстракция ресурсов: она называется «libloader», и вы можете создавать свои собственные ресурсозагрузчики, которые решают проблему выталкивания ваших данных из вашей базы данных в качестве необработанных потоков, чтобы ресурсофакторные реализации могли интерпретировать/анализировать необработанные данные.
Но каждая база данных спроектирована по -разному и, следовательно, ты Поскольку системный интегратор должен написать для него код клея. Мы можем предложить только интерфейсы.