파라미터는 어플리케이션에서 레포트에 전달하는 값이다.
레포트 생성에 있어서 전달할 매개변수값으로 사용할 수도 있다.
SQL쿼리의 조건에 들어갈 파라미터값 혹은 데이터소스만으로는 표시하기 어려운 값을 넘기기도 한다.
(이미지파일의 경로나 동적으로 변하는 타이틀등)
다른 레포트 오브젝트들과 같이 파라미터도 클래스타입을 가지고 있고 레포트에서 선언되어 있어야 한다. 필드명처럼 파라메터명도 유니크해야 한다.
Use as a prompt는 JasperReport에서 직접 사용되지는 않는 프로퍼티이다.
외부의 어플리케이션에서 사용하는 파라미터를 위한 특별한 플래그값이다.
Default Value Expression은 파라미터를 위해 미리 정의해둔 값을 넣을수 있다.
어플리케이션에서 파라미터에 아무런값을 넣지 않았을 경우 여기에 정의한 값이 디폴트로 넘겨진다.
물론 넘겨지는 값은 Parameter Class의 타입과 일치해야 한다.
이 디폴트 값에는 다른 fields/ variables를 넣을 수는 없다.
단 다른 파라미터를 여기에 넣을 수는 있다.
다른 파라미터를 넣으려면 본 파라미터보다 반드시 먼저 선언되어있어야 한다. (인스팩터뷰에서 위에위치)
다음과 같은 쿼리를 작성한다고 했을때,
SELECT * FROM Z_Customers WHERE start_date BETWEEN $P{DATE_START} and $P{DATE_END}
이 쿼리는 2개의 파라미터를 가지며 둘다 Parameter Class가 java.util.Date로 세팅되어 있어야 한다.
만약 날짜를 ‘이번달’ 혹은 ‘오늘’과 같이 수시로 변하는 기간을 파라미터로 이용하고자 할 때,
제3의 파라미터(PERIOD)를 전달하고입력날짜를 어플리케이션에서 리턴 받고 DATE_START와 DATE_END를 계산하려면 이를 계산하는 자바클래스(PeriodCalc)를 만들고 그 메소드(getDateStart)를 호출하는 형식이된다.
PeriodCalc.getDateStart($P{PERIOD})
이처럼 다른 파라미터값을 가져와 동적으로 해당 파라미터값을 생성할 수 있다.
Description프로퍼티는 JasperReport에서 직접사용하지는 않는 프로퍼티이지만 외부 어플리케이션에서 전달 받는 프로퍼티이다.
1.쿼리에서 파라미터 사용하기
일반적으로 파라미터는 쿼리와 함께 사용된다.
고객정보를 표시하는 레포트를 제작한다고 가정한다면,
레포트를 만들때 고객정보를 표시하기위해 고객ID가 필요할 것이다.
그리고 고객ID를 쿼리에 전달할 것이다.
이 쿼리는 아래와 같을 수 있다.
SELECT \* FROM Z\_Customers where ccode = $P{MyCustomerId}
MyCustomerId는 파라미터이고 $P{}를 사용해야 한다.
단순한 값을 파라미터로 넘기는 것이 아닌 WHERE나 GROUP BY같은 조건문 까지 같이 넘기려면 다음과 같이 사용한다.
SELECT * FROM Z_Customers $P!{MyWhere}
P에 !를 붙이면 SQL에 파라미터를 연결하지 말라는 뜻이다. 그리고 MyWhere파라미터에는 ‘WHERE ccode = 5′와 같은 값을 세팅한다.
2.IN 과 NOTIN 조건
레포트자체에서 where조건을 사용할때 에 한해 지원하는 기능이 있는데 IN과 NOTIN이다.
다음과 같은 쿼리를 작성한다고 가정하자.
SELECT * FROM ORDERS WHERE SHIPCOUNTRY IS IN (‘USA’,’Italy’,’Germany’)
이 쿼리의 가로안에 들어가는 값을 동적으로 생성하려면 다음과 같다.
SELECT * FROM ORDERS WHERE $X{IN, SHIPCOUNTRY, myCountries}
myCountries는 나라명을 가지고 있는 파라미터의 이름이며 타입은 배열혹은 List류이다. (java.util.Collection도 사용가능)
X{}는 3개의 파라미터를 인식한다.
- 적용할 함수타입(IN과 NOTIN중에 택1)
- 필드명(위에서는 SHIPCOUNTRY)
- 파라미터명
3.내장 파라미터
레포트 내부에서 사용되는 몇개의 내장파라미터가 있다. 이 파라미터들은 읽을 수는 있지만 값을 변경할 수는 없다.
- REPORT_PARAMETERS_MAP
타입은 java.util.Map이며 fillReport메소드에 전달된다. 여기에는 유저에 의해 정의된 파라미터값도 포함된다.
- REPORT_CONNECTION
레포트의 JDBC커넥션이며 SQL쿼리에 사용된다.
- REPORT_DATASOURCE
JDBC커넥션을 사용하지 않을때 레포트에서 사용하는 데이터소스이다.
- REPORT_SCRIPTLET
레포트생성시 사용될 스크립트릿을 표시. 아무값도 지정되어 있지 않을시 net.sf.jasperreports.engine.JRDefaultScriptlet이 설정된다.
- IS_IGNORE_PAGINATION
페이지 매기기. boolean값으로 ON,OFF할 수 있다. HTML이나 EXCEL포멧출력에는 지원되지 않는다.
- REPORT_LOCALE
지역을 설정하기위해 사용된다. 아무값도 없을시 시스템 기본Locale을 사용한다.
- REPORT_TIME_ZONE
타임존을 설정하기위해 사용된다. 아무값도 없을시 시스템 기본타임존을 사용한다.
- REPORT_MAX_COUNT
레포트에 표시할 레코드의 상한을 지정한다.
- REPORT_RESOURCE_BOUNDLE
레포트에서 사용할 리소스번들.
- REPORT_VIRTUALIZER
JRVirtualizer인터페이스를 구현한 레포트필터 클래스를 지정.
- REPORT_FORMAT_FACTORY
net.sf.jasperreports.engine.util.FormatFactory인스턴스이다. 사용자가 다른값으로 치환할 수있다.
- REPORT_CLASS_LOADER
클래스로더를 지정하기 위한 파라미터.
- REPORT_URL_HANDLER_FACTORY
URL핸들러를 사용할 클래스를 지정.
- REPORT_FILE_RESOLVER
net.sf.jasperreports.engine.util.FileResolver인스턴스이다.
- REPORT_TEMPLATES
JRTemplate의 콜렉션이다.
4.프로그램에서 파라미터 전달하는 방법
java.util.Map인터페이스를 구현한 클래스를 통해 프로그램에서 레포트로 파라미터를 전달할 수 있다.
HashMap hm = new HashMap();
JasperPrint print = JasperFillManager.fillReport(fileName, hm, new JREmptyDataSource());
위와같이 사용된다.
fillReport는 파일명, 파라미터맵 그리고 데이터소스를 받아서 레포트를 생성하는 중요한 메소드이다.(JREmptyDataSource는 더미데이터)
REPORT_TITLE이라는 파라미터를 만들자.
프로퍼티는 아래와 같다.
이 파라미터를 타이틀밴드에 놓는다.
HashMap hm = new HashMap();
hm.put(“REPORT_TITLE”,”This is the title of the report”)
JasperPrint print = JasperFillManager.fillReport(fileName, hm, new JREmptyDataSource());
와 같이 사용하자.
파라미터를 hm에 넣었는데 파라미터를 레포트에서 가지고 있다고 해서 모든 파라미터를 넣을 필요는 없다.
넣지 않은 파라미터는 레포트에서 Default Value Expression에 지정한 값을 넣어준다. (초기치는 null)
결과는 타이틀에 This is the title of the report가 표시된다.
이처럼 가장 간단한 String을 파라미터로 전달하였지만 java.awt.Image나 subreport에 필요한 복잡한 데이터소스 인스턴스를 전달할 수도 있다.
가장 중요한 것은 어떠한 값을 파라미터로 넘기더라도 레포트에서 정의한 해당 파라미터의 Parameter Class와 타입이 일치해야 한다는 것이다.
그렇지 않으면 아예 레포트가 작성조차 되지 않는다. (java.util.Date에 Integer값을 넣는행위)
'개발자 공부 업무 정보 > ETC' 카테고리의 다른 글
악성 IP 리스트 확인 및 NGINX IP차단 설정 (0) | 2022.07.11 |
---|---|
CORS_작성중 (0) | 2021.12.10 |
요다 조건문 / Yoda Conditions (0) | 2019.01.15 |
여러 도메인들 간 쿠키 공유하기 (0) | 2019.01.14 |
[SSL]HTTPS통신을 위한 SSL인증서 발급하기(OpenSSL) (0) | 2019.01.11 |