语法错误,插入“;”完成声明。 iReport表达式中的多个“if”if(cond)then expr1 else expr2 endif

时间:2012-10-29 13:33:59

标签: groovy crystal-reports jasper-reports ireport

我必须将一些报告从Crystal转换为Jasper,而Groovy让我很头疼。我有一个带有多个“if”的表达式:

if (cond) then expr1 else expr2 endif.

在iReport中,这是(cond) ? expr1 : expr2,但是如果我有另一个if条件并且我把它放在第一个下面我会得到错误。你能给我一些建议吗?谢谢!

要转换的表达式:

if not isnull({ZEM0000_T.PRUEFMERKMAL}) then
        text = {ZEM0000_T.PRUEFMERKMAL}
else
        text = ""
end if

if not isnull ({ZEM0000_T.ANWEISUNG1}) then
        text = text & Chr(13) & trim({ZEM0000_T.ANWEISUNG1})
end if

if not isnull ({ZEM0000_T.ANWEISUNG2}) then
        text = text & Chr(13) & trim({ZEM0000_T.ANWEISUNG2})
end if

if not isnull ({ZEM0000_T.ANWEISUNG3}) then
        text = text & Chr(13) & trim({ZEM0000_T.ANWEISUNG3})
end if

if not isnull ({@OT_NM_UT_2}) then
        text = text & Chr(13) & {@OT_NM_UT_2}
end if

formula = text

1 个答案:

答案 0 :(得分:0)

JasperReports中的表达式仅限于单个表达式(即Java / Groovy中的单个语句)。不能给它们一个很长的代码脚本来执行。 Crystal Reports中的表达式包含许多语句,因此将代码转换为Groovy是不够的,您还必须将其重构为一个语句。

幸运的是,当您连接字符串时,您可以使用+运算符来连接每个语句。所以评论中的代码

text = ($F{PRUEFMERKMAL} != null) ? $F{PRUEFMERKMAL} : "" 
text = ($F{ANWEISUNG1} != null) ? text + chr(13) + trim($F{ANWEISUNG1}) : text

需要看起来像这样:

(($F{PRUEFMERKMAL} != null) ? $F{PRUEFMERKMAL} : "") +
(($F{ANWEISUNG1} != null) ? text + chr(13) + trim($F{ANWEISUNG1}) : "")