ireport로 디자인하는경우 쿼리 두개를 돌리려면 dataset이 두개가 있어야 한다.
반복되는 데이터의 출력도 detail band에서만 되기 때문에 loop를 돌리려면 subreport를 쓰던지 table을 쓰던지 list를 써서
별도의 sub datasource를 통해 돌려야 한다.
아래의 예제는 이력서 양식이다.
detail band에서는 경력사항을 반복 출력하고
하단의 자격사항은 쿼리가 다르기 때문에 테이블을 이용하여 sub datasource 에 담아 반복 출력한다.
설정
1. report에 parameter를 추가한다.
parameter class는 net.sf.jasperreports.engine.JRDataSource로 설정한다.
2. 리포트 우클릭 - add dataset
subdata라는 이름으로 dataset을 추가했다.
2. sub dataset에도 parameter를 추가한다.
3.xml 탭으로 가서 source를 보면
<subDataset name="subdata" uuid="3a2bb95c-3f1f-44b5-8fa7-f8b04c127ce7">
<parameter name="subdata" class="net.sf.jasperreports.engine.JRDataSource" isForPrompting="false"/> -> sub dataset parameter
<queryString>
<![CDATA[SELECT aa,bb,cc FROM table]]>
</queryString>
필드
필드
필드
필드
</subDataset>
<parameter name="subdata" class="net.sf.jasperreports.engine.JRDataSource" isForPrompting="false"/> -> report parameter
이렇게 되어있어야한다.
그후 하단에 dataRun을 찾는다.
datasetParameterExpression = $P{subdata},
dataSourceExpression = new net.sf.jasperreports.engine.data.JRBeanColletionDataSource ($P{subdata}.getData())
로 작성한다.
이렇게 되어 있으면 ireport에서 할일은 끝났다