2011-11-16 23 views
0

是否有可能以任何方式將報表參數(輸入控件)傳遞給報表引擎之前進行轉換?Jasper報告 - 在將它傳遞給報告引擎之前進行參數轉換?

我舉個例子。我使用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

您需要使用的想法是一個參數可以具有基於另一個參數的默認值。提示用戶輸入「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> 
+0

嗯...這看起來像一個有效的主意,但它仍然沒有working.' \t <參數名稱=「dateTimeValue」級=「java.math中。 BigDecimal的」 isForPrompting = 「假」> \t \t <![CDATA [新的BigDecimal(新的SimpleDateFormat(@ 「YYYYMMDDHHMMSS」)格式($ P {dateTimePrompt}));]]> \t \t \t \t \t'這就是我所做的,因爲正如我所說的,我不能使用字符串,XPath不會使用運算符進行比較:(>,< ,> =,<=)。我得到「文檔沒有頁面」 – Less

+0

好吧,似乎參數順序很重要。提示符應該首先放在.jrxml中。它現在有效,非常感謝。 – Less