使用iReport我有一个文本字段,其中包含以下" Print When Expression":
new Boolean($F{data}.doubleValue()<3 && $V{check}.intValue()==0);
我的问题是我只想打印一次这个文本字段。为此我想我可以使用变量(check
)。
我尝试将此表达式用于变量:
($F{data}.doubleValue()<3) ? 1 : 0
问题是在文本字段检查&#34;打印条件&#34;之前调用变量的表达式。所以文本字段永远不会被打印出来。
如何在文本字段&#34;打印条件&#34;之后设置变量值?是真的吗?
我想标记第一个小于参考值的值
答案 0 :(得分:3)
我经常使用参数map(P{REPORT_PARAMETERS_MAP}
)来存储和评估自定义表达式,具体取决于之前的值和输出
示例(如果值为true
,则返回$F{X}<100
且之前从未低于此值)
<printWhenExpression>
<![CDATA[$F{X}.doubleValue()<100?$P{REPORT_PARAMETERS_MAP}.put("X_LESS_100",true)==null?true:false:false]]>
</printWhenExpression>
此表达式利用Map.put(K,V)返回与key关联的先前值的事实,如果从未调用null
,则第二次$F{X}
低于100时将返回我们之前的设置值为true
。
注意:您无需定义任何变量。
答案 1 :(得分:1)
我找到了一种解决方法,但我觉得这不是一个很好的方法,因为我的解决方案与文本字段和变量的条件评估时间有关。
所以,如果有人有一个很好的解决方案,请发布。
我将check
变量的初始值设置为0
。
变量表达式如下所示:
($F{data}.doubleValue() >= 3)? 0 : ($F{data}.doubleValue() < 3 && $V{check}.intValue()==0) ? 2 : 1;
文本字段中的“表达时打印”为:
new Boolean($V{check}.intValue()==2);