Jasper报告 - 在将参数转换为报告引擎之前进行参数转换?

时间:2011-11-16 15:38:58

标签: java xml jasper-reports ireport jasperserver

在将报表参数(输入控件)传递给报表引擎之前,是否有可能以任何方式对其进行转换?

我举一个例子。我正在使用XML作为数据源:

<Results>
    <Object Id="0042" Val="dfg0bb" DateTime="2011-09-30T22:00:04Z" />
    <Object Id="0097" Val="abf0cc" DateTime="2011-09-30T22:00:06Z" />
    ...
</Results>

这是我的XPath查询:

//Object[translate(translate(translate(translate(@DateTime, '-', ''), ':', ''), 'T', ''), 'Z', '') <= $P{dateTimeValue}]

字段的描述是:

@Id, @DateTime, @Val

这工作正常,我得到了我想要的东西,但是日期属性是一个问题,因为我需要将它表示为一个数字进行比较。可以看出,我需要删除所有非数字字符,以便将日期作为普通数字进行比较(Java中XPath 1.0的限制)。此外,我想在JasperServer中为此参数定义一个输入控件,我希望它是日期类型,因此用户可以从日历中进行选择。

那么,在将提供的参数传递给报表引擎之前,是否有任何方法(scriptlet或其他方法)对其进行转换? (在这种情况下,日期为数值,以便XPath可以工作)

1 个答案:

答案 0 :(得分:1)

您需要使用的想法是一个参数可以具有基于另一个参数的默认值。提示您的用户输入“MyDate”,然后将其转换为“StringBasedOnMyDate”以在XPath查询中使用。它在.jrxml中看起来像这样:

<parameter name="MyDate" class="java.util.Date" isForPrompting="true">
  <defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="StringBasedOnMyDate" class="java.lang.String" isForPrompting="false">
  <defaultValueExpression><![CDATA[new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format($P{MyDate})]]></defaultValueExpression>
</parameter>