Как зарегистрировать 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, вам необходимо:
- Создать кастом
YourCustomExecuterFactory
реализацииQueryExecuterFactory
учебный класс. - Сделай свой новый
YourCustomExecuterFactory
использовать свой обычайJRQueryExecuter
метод реализацииQueryExecuterFactory.createQueryExecuter(..)
- Сопоставьте новый язык (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);