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 を生成するとき、それらの文字列を既存のフィールドに一致させようとしますが、文字列に複合項目が含まれているため、この時点で失敗します。
どんなアイデア/提案も素晴らしいでしょう。