[英]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時,它將嘗試將那些字符串與現有字段進行匹配,並且由於字符串包含復合項,因此此時將失敗。
任何想法/建議都很好。
您可以為此使用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);
我認為這會對您有所幫助。 檢查語法,我沒有運行代碼,但是它將給您想法。
通過實現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.