2

JRXML テンプレートと動的入力パラメーターを入力として使用して、高度な JRXML を生成します。後で、この JRXML が取得され、JasperServer によって処理されます。主なアイデアは、ユーザーが必要な列を選択してカスタマイズできるようにすることです。

DynamicJasper はカスタム列を構築するための優れた API を提供しますが、複合列の問題に直面しました。

たとえば、ユーザーが列「A」を次のように計算したい場合:

$F{INSTRUMENT} + " (" + $F{SECURITY_IDENTIFIER} + ")"

また

$F{QUANTITY} == null ?0:$F{QUANTITY}.setScale(2, RoundingMode.HALF_UP)

したがって、処理を進めた後、出力 JRXML の details/band タグの下に次のようなレコードが含まれます。

<textField isStretchWithOverflow="true">
    <reportElement key="DK_Instrument" x="0" y="0" width="184" height="12">
    </reportElement>
    <textElement/>
    <textFieldExpression><![CDATA[$F{INSTRUMENT} + " (" + $F{SECURITY_IDENTIFIER} + ")"]]></textFieldExpression>
</textField>
<textField isStretchWithOverflow="true">
    <reportElement key="DK_Quantity" x="220" y="0" width="56" height="12">
    </reportElement>
    <textElement/>
    <textFieldExpression><![CDATA[$F{QUANTITY} == null ?0:$F{QUANTITY}.setScale(2, RoundingMode.HALF_UP)]]></textFieldExpression>
</textField>

DynamicJasperのAbstractColumnには、次のメソッドがあります。

setColumnProperty(fieldName, className)
setCustomExpression(CustomExpression)
setCustomExpressionForCalculation(CustomExpression)

しかし、それらのどれも私にとってはうまくいきません。

DynamicJasper が JasperReport を生成するとき、それらの文字列を既存のフィールドに一致させようとしますが、文字列に複合項目が含まれているため、この時点で失敗します。

どんなアイデア/提案も素晴らしいでしょう。

4

2 に答える 2

0

これには、 JRDesignTextFieldおよびJRDesignExpression クラスを使用できます。

JRDesignTextField textField = new JRDesignTextField();
JRDesignExpression expression = new JRDesignExpression();
expression.setText("$F{INSTRUMENT} + \"( \" + $F{SECURITY_IDENTIFIER} +\" ) \"");
//or expression.setText("$F{QUANTITY} == null ?0:$F{QUANTITY}.setScale(2, RoundingMode.HALF_UP)");
textField.setExpression(expression);

これが役立つと思います。構文を確認してください。コードは実行していませんが、アイデアが得られます。

于 2014-05-04T14:26:55.453 に答える