我必须将一些报告从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
答案 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}) : "")