【发布时间】:2011-01-13 07:17:49
【问题描述】:
我必须显示列: - 发送 - 收到 - 取消
通过检查数据库中的“状态”值在报告列中。因此,如果 Status 等于 1,则发送,=2 接收,= 3 取消。
jasper 报告中的文本字段表达式(?a:b)只能接受一个条件,我如何给出多个条件?类似 if-else 阶梯?
【问题讨论】:
我必须显示列: - 发送 - 收到 - 取消
通过检查数据库中的“状态”值在报告列中。因此,如果 Status 等于 1,则发送,=2 接收,= 3 取消。
jasper 报告中的文本字段表达式(?a:b)只能接受一个条件,我如何给出多个条件?类似 if-else 阶梯?
【问题讨论】:
您可以使用嵌套的三元语句来实现这一点,但它很混乱。
例如:
(i == 1) ? "Send" : ((i == 2)? "Received" : "Cancelled");
【讨论】:
你可以使用 replace() 方法, 但如果不是,则必须将字段的类更改为 String, 例如:
$F{f_phone_type}.replace("0","Phone/ATA").replace("1","Gateway").replace("2","SIPTrunk")
【讨论】:
使状态字段成为从您的 bean 传递的参数。这样您就可以在 bean 中进行任何您需要的处理,将结果分配给参数变量,然后将其传递到您的报告中。
【讨论】:
当您有大量变电站或它们可以更改时,我首选的方法是以 HashMap 的形式创建带有替换的参数。
您可以在运行时传递替换或设置默认值。好处是您无需重新编译报告即可更新地图。
例如,如果您有一个名为“risk_types”的参数(使用默认语言作为 groovy),您可以将参数默认值设置为类似
[1: "HIGH RISK", 2: "LOW RISK"]
在您的代码中,您的文本字段表达式为(其中 risk_type 是数据库中的查找字段):
$P{risk_types}.get($F{risk_type})
对于地图中缺少的项目,你会得到一个空值,我将文本字段表达式扩展为:
$P{risk_types}.get($F{risk_type}) ?: "UNDEFINED"
【讨论】:
Boolean.valueOf(!($P{accWise}.equals("AC" ) && $F{RQAC_ACCREJ}.equals("R"))) 可用于在 ireport 属性中提供多个条件。
【讨论】: