2012-10-29 57 views
0

我必須將Crystal的一些報告轉換爲Jasper,而Groovy讓我頭疼。我有多個「如果」的表達式:語法錯誤,插入「;」完成聲明。 iReport表達式中的多個「if」if(cond)then expr1 else expr2 endif

if (cond) then expr1 else expr2 endif. 

在iReport的這來自(cond) ? expr1 : expr2,但如果如果條件我還有一個,我把它在我第一個得到erors。你能給我一些建議嗎?謝謝!轉換

表達:

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

text =($ F {PRUEFMERKMAL}!= null)? $ F {PRUEFMERKMAL}:「」 text =($ F {ANWEISUNG1}!= null)? text + chr(13)+ trim($ F {ANWEISUNG1}):text – Razvan

+0

這些是前兩個ifs – Razvan

回答

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}) : "")