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 ...
我得到的错误是:
LogicalFunctions类型中的方法OR(Boolean ...)不是 适用于参数(布尔值,字符串,字符串)
有人知道解决方案吗?
(抱歉我的英文不好......)
答案 0 :(得分: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"
来检查图像是否不是某个图像。
为什么会出错?因为如果其中一个输入为TRUE,则OR()用于返回TRUE或FALSE。无法将String计算为TRUE或FALSE,因此OR()会引发错误。你的OR()这里有3个输入,实际上只有一个输入。
$F{Status} == "Niet geprobeerd",
返回一个布尔值(TRUE或FALSE)
$P{IMG_DIR} + "scorm_not_attempted.png",
返回一个String(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(布尔值,布尔值,布尔值,布尔值)
修复OR()后,看起来你的IF()语句也会遇到问题。你能提供一些关于你希望这个表达式做什么的更多细节吗?检查的OR()语句是什么?当状态为“Voltooid”时应该显示什么?等
(对不起,我希望我说荷兰语)
答案 1 :(得分:0)
请更准确地说明你的需要。
对于我所看到的,您在使用IF语法时遇到问题,并且此处不需要OR。 正确的语法是
IF(condition, returned value if condition true, returned value if condition false)
您可以使用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>)