2011-01-31 4 views
0

복잡한 분기 구문의 최종 결과를 기반으로 보고서의 필드를 채워야합니다. iReport에서 어떻게합니까? 보고서는 데이터베이스의 다른 필드에있는 내용에 따라 다른 문자열을 표시해야합니다. 정말 복잡한 SQL 문을 작성합니까? 변수를 사용합니까?iReport 또는 Jasper에서 복잡한 분기를 처리하는 방법

그래서, 예를 들면,

만약 필드 X = 1 IF Y = 1 Z = 1 개 필드를 판독해야하는지

X = 1 Y IF = 1 경우 IF Z = 2 필드를 읽어야합니다 B

답변

0

나는이 작업을 수행하는 가장 쉬운 방법은 백업 빈에서 전달 된 매개 변수로 채울 필드를 가질 것이라고 생각합니다. jdbc 연결은 bean에서 작성되어 보고서로 전달되므로, 필요한 필드 또는 필드에 비교적 쉽게 액세스 할 수 있어야하며 분기 결과를 결정하는 메소드를 통해 데이터를 실행해야합니다. 결과를 매개 변수에 할당하고이를 JasperFillManager.fillReport의 jasperParameter 변수 (파일, 매개 변수, jdbcConnection)의 보고서로 전달하십시오.

($F{staff_type} == null ? new String("") : 
($F{staff_type}.equalsIgnoreCase("Permanent") ? new String("1") : 
($F{staff_type}.equalsIgnoreCase("Non-permanent") ? new String("2") : new String("") 
))) 

는 기본적으로, 당신이 중첩 된 상태 표현식을 사용해야합니다

1

당신은 다음과 같은 일을 할 수 있습니다. textfieldexpression에서

1

보통이

(($F{PAYMENTMODE}.equals("CS")) ? "Cash":($F{PAYMENTMODE}.equals("CQ"))? "Cheque":"Bank")e

0

같은 식을 작성, 나는 재스퍼 보고서 엔진에 데이터를 전달하기 전에 모든 프로그래밍 로직을 처리하지만, 어떤 경우에는, 후 처리 또는 포스트 확인이 필요합니다. 그 시나리오이고 확인해야 할 많은 경우 (문자열)가 있다면, 나는 'Jasper Report Scriptlet'을 코딩하고 그 논리를 처리합니다. (코드/보고서가 읽기 쉽고 유지 보수가 가능하고 코드 재사용도 가능합니다.) 검사 할 문자열이 2 ~ 3 개라면 'Ternary'연산자를 사용합니다.

보고서 스크립틀릿을 사용하려면 스크립틀릿 클래스를 만들거나 기존 스크립트를 사용하고이 로직 (예 : 'checkString'메서드)을 처리하고 $ P {REPORT_SCRIPTLET} .checkString (someString)를 TextField의 표현식에 추가합니다.

관련 문제