繁体   English   中英

DynamicJasper中的复合柱评估

[英]Compound columns evaluation in DynamicJasper

我使用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时,它将尝试将那些字符串与现有字段进行匹配,并且由于字符串包含复合项,因此此时将失败。

任何想法/建议都很好。

您可以为此使用JRDesignTextFieldJRDesignExpression类。

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);

我认为这会对您有所帮助。 检查语法,我没有运行代码,但是它将给您想法。

通过实现CustomColumn解决

public class DynamicColumn extends AbstractColumn {
    ...

    @Override
    public String getTextForExpression() {
        return getColumnProperty().getProperty();
    }
    @Override
    public String getValueClassNameForExpression() {
        return getColumnProperty().getValueClassName();
    }
}

问题在于,所有AbstractColumn的所有现有实现都假定将一个参数传递给column属性,并且该参数用$ F {...}覆盖该参数。 通过覆盖textForExpression,该属性成功进入输出JRXML。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM