如何在iReport或Jasper中处理复杂的分支

时间:2011-01-31 15:47:31

标签: jasper-reports ireport

我需要根据复杂分支语句的最终结果填写报表中的字段。我如何在iReport中执行此操作?报告需要显示不同的字符串,具体取决于数据库中不同字段的内容。我是否制作了非常复杂的SQL语句?我是否使用变量?

所以,例如,

如果字段x = 1   如果y = 1     IF z = 1        字段应为A

如果x = 1   如果y = 1     IF z = 2        字段应为B

4 个答案:

答案 0 :(得分:1)

你可以做类似以下的事情:

( $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 :(得分:1)

textfieldexpression中的

写一个像这样的表达式

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

答案 2 :(得分:0)

我认为最简单的方法是让从支持bean传递的参数填充字段。 jdbc连接在bean中创建并传递给报表,访问所需的字段或字段应该相对容易,并通过确定分支结果的方法运行数据。将结果分配给参数并将其传递给JasperFillManager.fillReport(文件,参数,jdbcConnection)的jasperParameter变量中的报告。

答案 3 :(得分:0)

通常,我在将数据传递给Jasper Report Engine之前处理所有编程逻辑,但在某些情况下,需要进行后处理或后检查。如果是那种情况并且如果我有许多情况(字符串)要检查,我会编写一个'Jasper Report Scriptlet'并在那里处理那个逻辑(这样代码/报告是可读和可维护的,也是代码重用)。如果只检查2或3个字符串,我会使用'三元'运算符。

如果要使用报告scriptlet,创建一个scriptlet类(或使用现有的),编写一个方法来处理这个逻辑(例如:'checkString'方法)并放入$ P {REPORT_SCRIPTLET} .checkString(someString)在TextField的表达式中。