我使用 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 时,它会尝试将这些字符串与现有字段匹配,但此时由于字符串包含复合项而失败。
任何想法/建议都会很棒。