0

レポート エンジンに渡される前にレポート パラメーター (入力コントロール) を変換する方法はありますか?

例を挙げます。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 でこのパラメーターの入力コントロールを定義し、ユーザーがカレンダーから選択できるように日付型にしたいと考えています。

では、レポート エンジンに渡される前に、提供されたパラメータを変換する方法 (スクリプトレットなど) はありますか? (この場合、XPath が機能するように日付を数値に変換します)

4

1 に答える 1

1

使用する必要があるアイデアは、あるパラメーターが別のパラメーターに基づくデフォルト値を持つことができるということです。ユーザーに "MyDate" を要求し、XPath クエリで使用するためにこれを "StringBasedOnMyDate" に変換します。.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>
于 2011-11-16T18:48:46.617 に答える