2016-11-08 50 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> 

您可以在此處找到有關使用參數的詳細信息: