Отчет о заполнении Jasper с использованием источника данных jsonql в Java - PullRequest
0 голосов
/ 16 января 2019

Мы разработали новый отчет, используя данные json с jsonql в качестве языка запросов и несколько уровней подотчетных отчетов, которые генерируются в студии Jaspersoft (v6.6.0).

Нам нужен некоторый код Java, чтобы взять сгенерированные данные JSON и создать отчет, используя предварительно скомпилированные файлы Jasper на сервере, запустив Jasper 6.6.0 на сервере, однако, когда мы пытаемся сгенерировать PDF-файлы в Java, некоторые вложенные отчеты выдают сообщение о том, что это не может найти данные для использования, и когда мы удаляем эти проблемные подотчеты, он генерирует в основном пустой файл с 1 или 2 заголовками, и соответствующая информация / таблицы не отображаются.

    InputStream jasperTemplateStream = getReportingTemplate();

    JRDataSource jsonDataSource = new JsonQLDataSource(request);

    JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperTemplateStream);

    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jsonDataSource);

    JasperExportManager.exportReportToPdfStream(jasperPrint, response);

Есть идеи, почему? Наши версии Jaspersoft Studio и Jasper mvn совпадают.

Трассировка стека выглядит следующим образом:

net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: ((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("assetClasses") 
...
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: ((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("assetClasses")
...
Caused by: net.sf.jasperreports.engine.JRException: No JSON data to operate on!

1 Ответ

0 голосов
/ 17 января 2019

Вместо того, чтобы передавать поток ввода данных в метод fillReport (), попробуйте вместо этого передать его в карте параметров:

Map<String, Object> params = new HashMap<>();
params.put(JsonQLQueryExecuterFactory.JSON_INPUT_STREAM, request);
JasperReport jasperReport = (JasperReport) 
JRLoader.loadObject(jasperTemplateStream);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params);
JasperExportManager.exportReportToPdfStream(jasperPrint, response);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...