2016-06-10 3 views
1

Я использую JasperReportsPdfView для создания отчета в моем проекте Spring Boot. В настоящее время у меня есть 1 Основной доклад и основной доклад имеет много суб сообщитьКак создать несколько основных отчетов с весенней загрузкой?

Итак, основной доклад -> Суб отчет 1, Суб отчет 2, и т.д ...

У меня есть EntityA, которые имеют Detail и Details2

Сейчас я использую JRDataSource передать источник данных для каждого подпроекта отчета, как ...

EntityA entityA = findById(1); 
JasperReportsPdfView view = new JasperReportsPdfView(); 
view.setUrl("classpath:report/main_report.jrxml"); 
view.setApplicationContext(appContext); 

List<Detail> details = entityA.getDetails(); 
List<Detail2> details2 = entityA.getDetails2(); 
JRDataSource subReportDetail1Source = new JRBeanCollectionDataSource(details); 
JRDataSource subReportDetail2Source = new JRBeanCollectionDataSource(details2); 
final Map<String, Object> params = new HashMap<>(); 
params.put("subReportData2", subReportDetail1Source); 
params.put("subReportData3", subReportDetail2Source); 

return new ModelAndView(view, params); 

Теперь я хочу, чтобы создать многие из этого основного отчета для каждого EntityA, так что я буду иметь список EntityA как

List<EntityA> listOfEntityA = findAll(); 

Как я могу создать повторил мой основной доклад для каждого EntityA в listOfEntityA?

У меня есть идея сделать мой текущий MainReport стать субом отчетом другого MainReport, но я не знаю, как пройти в Datasource каждого detail1 и detail2

ответ

1

В этом случае вы не должны проходить subReportData2 и subReportData3, поскольку параметры put определяют их как поля в jrxml.

Ваших главный источник данные будет

new JRBeanCollectionDataSource(istOfEntityA); 

В вас jrxml в определении как поля Detail и Detail2 списка, следовательно, геттеры на EntityA

<field name="details" class="java.util.List"/> 
<field name="details2" class="java.util.List"/> 

Затем добавьте вы SubReport к деталей группе и установить выражение источника данных как:

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{details}) 

Таким образом, отчет будет итерирует подробно группу на вашем EntityA списка, и вызвать подотчеты со списком Детали и Detail2 из класса EntityA как источник данных

+0

спасибо, это сработало –

+0

@first_time_user, спасибо за принятие, получайте удовольствие. –

Смежные вопросы