0

我必须将一些报告从 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
4

1 回答 1

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}) : "")
于 2012-10-31T13:09:47.267 回答