Как запросить домен в jaspersoft с динамическими параметрами - PullRequest
0 голосов
/ 18 мая 2018

Я новичок в отчетности jaspersoft.В настоящее время я занимаюсь проектированием и разработкой отчетов с учетом следующих требований.Я хочу создавать шаблоны на основе отчетов, где все динамические параметры мне нужно передать в запросе SQL.Я просматривал отчет japsersoft и обнаружил, что мы можем создавать представления объединения и кэшировать данные, создавая домены.Чтобы уменьшить количество попаданий на уровне базы данных.

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

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

Пожалуйста, предложите, если какой-либо обходной путь доступен для этой проблемы.

1 Ответ

0 голосов
/ 18 мая 2018

Обратите внимание, хотя JasperReports Server управляет кэшем для Ad Hoc Views и Ad Hoc Reports , работающих на доменах, с отчетом JRXML (например, разработанным вJaspersoft Studio) в Домене не гарантирует попадание в этот кэш.

У вас также есть возможность использовать слой, который обеспечивает кэширование между JasperReports Server и вашей базой данных.Например, недавно была добавлена ​​поддержка для TIBCO Data Virtualization (не бесплатный продукт) в v.7, см. https://www.jaspersoft.com/introducing-jaspersoft-7.

В любом случае, Домены не являются реляционными базами данных и, следовательно, не поддерживают прямой SQL.Вы можете использовать «Язык запросов домена», который предлагает подмножество функций SQL.Самый простой способ написать запрос - использовать Jaspersoft Studio и выбрать «домен» в раскрывающемся списке Language (верхний левый угол Dataset and Query Dialog , обозначенный красной стрелкой вснимок экрана ниже из Studio 6.4.0):

Screenshot of Dataset and Query Dialog in Jaspersoft Studio

Например, приведенный выше дизайн (который использует домен Supermart, предоставленный с образцами данных) будетсгенерируйте этот запрос и требуемый «динамический» параметр, как вы и просили - в этом случае для коллекции в качестве фильтра используется значение «Is One Of», которое может принимать несколько значений:

<query>
    <queryFields>
        <queryField id="sales_fact_ALL.sales__product.sales__product__product_name"/>
        <queryField id="sales_fact_ALL.sales_fact_ALL__store_sales_2013"/>
    </queryFields>
    <queryFilterString>sales_fact_ALL.sales__store.sales__store__region.sales__store__region__sales_country in sales__store__region__sales_country_0</queryFilterString>
</query>

См. здесь еще один примерзапрос (текущая версия документации на основе выпуска 7.1.0), в данном случае для использования с REST API: https://community.jaspersoft.com/documentation/tibco-jasperreports-server-rest-api-reference/v710/queryexecutor-service

Тег queryFilterString соответствует синтаксису DomEL, как описано здесь (также для 7.1.0): https://community.jaspersoft.com/documentation/tibco-jasperreports-server-user-guide/v71/domel-syntax

...