Как зарегистрировать QueryExecuterFactory в отчетах о яшме в Java

Я реализовал JRQueryExecuter и хочу использовать его в отчете. С помощью iReport мне удалось зарегистрироваться и использовать исполнитель.

Теперь я хочу использовать его в Java-приложении, но не могу найти никаких ресурсов, чтобы зарегистрировать фабрику.

Я думал, что достаточно иметь реализацию в classpath, но я получаю следующее исключение:

Caused by: net.sf.jasperreports.engine.JRException: No query executer factory class registered for tmql queries.
at net.sf.jasperreports.engine.query.DefaultQueryExecuterFactoryBundle.getQueryExecuterFactory(DefaultQueryExecuterFactoryBundle.java:80)
at net.sf.jasperreports.engine.util.JRQueryExecuterUtils.getQueryExecuterFactory(JRQueryExecuterUtils.java:57)
at net.sf.jasperreports.engine.design.JRDesignDataset.queryLanguageChanged(JRDesignDataset.java:1006)

Кто-нибудь может дать мне подсказку?

С уважением Ханнес

3 ответа

Используя jasperreports 5.2.0, вам необходимо:

  1. Создать кастом YourCustomExecuterFactory реализации QueryExecuterFactory учебный класс.
  2. Сделай свой новый YourCustomExecuterFactory использовать свой обычай JRQueryExecuter метод реализации QueryExecuterFactory.createQueryExecuter(..)
  3. Сопоставьте новый язык (tmql?) С вашей фабрикой. В вашем jasperresports.properties установить это свойство: net.sf.jasperreports.query.executer.factory.tmql=your.package.YourCustomExecuterFactory

Надеюсь, это кому-нибудь поможет.

Документация предлагает установить свойство:

JasperReport jasperReport = <...>
jasperReport.setProperty(JRQueryExecuterFactory.QUERY_EXECUTER_FACTORY_PREFIX + "<query language>", "<value>");

Это работает?

Установите свойство перед вызовом JasperCompileManager.

Пример ниже с использованием языка запросов plsql:

JRProperties.setProperty(QueryExecuterFactory.QUERY_EXECUTER_FACTORY_PREFIX+"plsql"
                            ,"com.jaspersoft.jrx.query.PlSqlQueryExecuterFactory");
JasperReport jasperReport =
            JasperCompileManager.compileReport(sourceFile);
Другие вопросы по тегам