2016-11-08 40 views
1

我有一个JasperReports 6.3报表查询,它使用“开始日期”参数作为其WHERE子句的一部分。参数可能为空,这实际上意味着“最早的日期”。在queryString中使用三元表达式

的逻辑非常简单:

WHERE MyDateField > ($P{StartDate} == null ? DateTime(0L) : $P{StartDate}) 

但当JasperReports的尝试运行对数据库的查询这将产生一个例外:

SQLServerException: The value is not set for the parameter number 3

作为一个侧面说明,这将是有助于弄清楚如何让Jaspersoft Studio记录生成的SQL,以帮助进行调试。

回答

0

不可能在查询字符串上使用表达式。您应该创建另一个包含您需要的表达式的参数。

在你的情况下,代码将是这样的:

<parameter name="StartDate" class="org.joda.time.DateTime"/> 
... 
<parameter name="dateFilter" class="org.joda.time.DateTime"> 
    <defaultValueExpression><![CDATA[$P{StartDate} == null ? DateTime(0L) : $P{StartDate}]]></defaultValueExpression> 
</parameter> 
<queryString> 
    <![CDATA[SELECT * FROM sometable WHERE MyDateField > $P{dateFilter}]]> 
</queryString> 

您可以在此处找到有关使用参数的详细信息: