如何在 "Print when Expression" 从文本字段返回 true 后设置变量值

How to set variable value after "Print when Expression" from textfield returned true

使用 iReport 我有一个包含以下内容的文本字段 "Print When Expression":

new Boolean($F{data}.doubleValue()<3 && $V{check}.intValue()==0);

我的问题是我只想打印一次这个文本字段。为此,我想我可以使用一个变量 (check).

我尝试将此表达式用于变量:

($F{data}.doubleValue()<3) ? 1 : 0

问题是在文本字段检查其 "print condition" 之前调用变量的表达式,因此永远不会打印文本字段。

如何实现在文本字段 "print condition" 返回 true 后设置变量值?

I want to mark the first value which is smaller than a reference value

我找到了解决方法,但我觉得这不是一个很好的方法,因为我的解决方案与文本字段和变量的条件评估时间有关。

所以如果有人有好的解决方案请post它。


我将 check 变量的初始值设置为 0

变量表达式如下所示:

($F{data}.doubleValue() >= 3)? 0 : ($F{data}.doubleValue() < 3 && $V{check}.intValue()==0) ? 2 : 1;

文本字段中的 "Print When Expression" 是:

new Boolean($V{check}.intValue()==2);

我经常使用参数映射 (P{REPORT_PARAMETERS_MAP}) 根据先前的值和输出来存储和评估自定义表达式

示例(return 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) return 是与键关联的前一个值,即如果从未调用过,则为 null,而第二次 $F{X} 低于100 它将 return 我们之前的设置值 true

Note: you do not need to define any variable.