2015-04-23 86 views
0
IF($F{Status} == "Lopend" ,$P{IMG_DIR} + "scorm_incomplete.png", "" 
,OR($F{Status} == "Voltooid", $P{IMG_DIR} + "scorm_completed.png","", 
OR($F{Status} == "Niet geprobeerd", $P{IMG_DIR} + "scorm_not_attempted.png", ""))) 

我與JasperSoft這個工作的電子學習網站上測試創建和諧的關係,的JasperSoft報告圖像

但對於測試,他應該給一個圖標狀態...

但這句話不上的JasperSoft工作...

我得到的錯誤是:

的方法或(布爾...)類型LogicalFunctions不 適用於參數(布爾,字符串,字符串)

是否有人知道該如何解決?

(對不起我的英文不好..)

回答

0

首先,OR()函數應該用布爾使用。您的錯誤是在談論這條線:

OR($F{Status} == "Niet geprobeerd", $P{IMG_DIR} + "scorm_not_attempted.png", "") 

使字符串進入布爾值。例如$P{IMG_DIR} + "scorm_not_attempted.png" != "BadFooBarscorm_not_attempted.png"檢查圖像不是某個圖像。

爲什麼錯誤?由於OR()用於在其中一個輸入爲TRUE時返回TRUE或FALSE。無法將字符串評估爲TRUE或FALSE,因此OR()會引發錯誤。你的OR()在這裏有3個輸入,只有一個實際上會工作。

$F{Status} == "Niet geprobeerd", 

返回一個布爾(TRUE或FALSE)

$P{IMG_DIR} + "scorm_not_attempted.png", 

返回一個字符串(FOOBARscorm_not_attempted.png)

"" 

返回一個String()

其次,你的拋出錯誤的OR()語句嵌套在另一個不正確的OR()語句中:

OR($F{Status} == "Voltooid", $P{IMG_DIR} + "scorm_completed.png","", 
OR($F{Status} == "Niet geprobeerd", $P{IMG_DIR} + "scorm_not_attempted.png", "")) 

您需要對此做同樣的事情。你現在有什麼是OR(布爾,字符串,字符串,布爾),它需要是OR(布爾,布爾,布爾,布爾)

它看起來像你會遇到IF你修復OR()。你能提供更多關於你想要這個表達的細節嗎? OR()語句檢查什麼?當狀態是「Voltooid」時應該顯示什麼?等

(對不起,我希望我的荷蘭語)

0

請在您需要更精確。

對於我所看到的,您在IF語法方面遇到了問題,並且此處不需要OR。 正確的語法是

IF(condition, returned value if condition true, returned value if condition false) 

可以使用虛假的條款,以檢查不同的情況。 從你給的信息,正確的答案,你的問題是

IF($F{Status} == "Lopend", $P{IMG_DIR} + "scorm_incomplete.png", IF($F{Status} == "Voltooid", $P{IMG_DIR} + "scorm_completed.png", IF($F{Status} == "Niet geprobeerd", $P{IMG_DIR} + "scorm_not_attempted.png", ""))) 

此外,喜歡比==.equals()方法來比較字符串。 ==只有在它是相同的實例時纔會返回true,如果兩個字符串中的每個字符相同,則比較.equals()。欲瞭解更多信息,請檢查此topic。結果是:

IF($F{Status}.equals("Lopend"), $P{IMG_DIR} + "scorm_incomplete.png", IF($F{Status}.equals("Voltooid"), $P{IMG_DIR} + "scorm_completed.png", IF($F{Status}.equals("Niet geprobeerd"), $P{IMG_DIR} + "scorm_not_attempted.png", ""))) 

最後,OR()語句可以用於條件。 例如:

IF(OR($P{DUMMY}.equals("test1"),$P{DUMMY}.equals("test2")), <true clause>, <false clause>)