iReport / JasperReports Server:子报表返回值为null

时间:2012-08-06 07:41:37

标签: jasper-reports ireport jasperserver subreport

我对 iReport / JasperReports服务器有以下问题。

我正在使用主报表,其中两个子报表返回计算的价格,子报表变量的类型和局部变量是 BigDecimal

如果子报表的返回值为null(未找到任何行),则主报表中指定的局部变量始终为null。但我想要“0.00”,因为我想计算一笔金额。

构造(return_variable == null ? new BigDecimal(0) : return_variable)无法帮助将局部变量设置为默认值new BigDecimal(0)。我总是得到 null 而不是想要的值 “0.00” ; - (

我已经使用版本3.7.6进行了测试,直到4.4。 iReport ,没有任何帮助。

有人对我有暗示吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,除了我试图使用子报表的返回值作为另一个子报表的参数。我通过在第二个子报告中使用scriptlet成功获得了我想要的结果。

我继续这样做: -in子报告2,我有参数p(Float),它的值是子报告1的返回值 -in子报告2,我有一个变量v(Float),用p初始化 - 在我的scriptlet中(在beforeDetailEval()方法中,我测试我的变量v:如果它为null,我赋值new Float(“0.0”)

我工作正常。

此限制是您希望直接在主报表中使用子报表的返回值。我试过这样做,但从未成功过。

希望有一天能帮助别人。

Cecilka

答案 1 :(得分:0)

雅虎!通过上帝的恩典,我找到了一个很好的答案来回答我自己的问题。发布它可能会对将来有所帮助。

1) I changed my Simple SQL Query with a MySQL stored procedure as.

我的存储过程

BEGIN
SET @p = 0;
SET @n = 0;
SET @m = '00';
SELECT x.*, y.* FROM 
     (select @n:=@n+1 as "ID", @m:=acc as "Account" from tbl_reports) x
        right JOIN 
     (SELECT if(@m='00',0,@p:=@p+1) as "IDU") y
ON y.IDU = x.ID;
END

在IReport中,我将变量声明为

$F{IDU}>0?$F{Amount}:0

这样,它现在显示0.00而不是null。