簡體   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