对报表的查询结果进行重新计算后,合计值还是修改前的结果解决方案

1 业务背景
项目开发中,报表经常会遇到根据某个特定条件需要修改显示结果。比如修改金额的值,对应的合计值应该也要被更新。

2 遇到的问题
通常我们的二开方案往往会使用processRowData方法,来改变结果。这种方法只可以修改字段值,但没办法修改合计值
public void processRowData(String gridPK, DynamicObjectCollection rowData, ReportQueryParam queryParam) {
super.processRowData(gridPK, rowData, queryParam);
Iterator<DynamicObject> iterator = rowData.iterator();
while (iterator.hasNext()) {
DynamicObject row = iterator.next();
if(row.get("lago_reqdetail").equals("笔记本")){
row.set("lago_reqamount", 200);
}
}
}
也许有人会说可以重写setFloatButtomData方法来修改合计值。但是这个方法的弊端是需要提前知道合计的结果才能更新。所以这条路也是行不通的。
3 解决方案
3.1 方案总述
需要在报表取数插件中对已经计算出结果的DataSet进行处理,通过DataSetBuilder创建一个新的DataSet并修改值返回到前端渲染即可
3.2 实现步骤
修改报表查询取数插件
public DataSet query(ReportQueryParam reportQueryParam, Object o) {
//源报表查询取数逻辑,得到resultDataSet返回到前端
DataSet repDataSet = QueryServiceHelper.queryDataSet(getClass().getName(), "lago_reqbi ll", "id,lago_requser,lago_reqdetail,lago_reqdate,lago_reqamount,lago_orderbillno", null, null);
DataSet orderDataSet = QueryServiceHelper.queryDataSet(getClass().getName(), "lago_orderbill", "id,billno,lago_orderdate,lago_orderuser,lago_orderamount", null, null);
DataSet resultDataSet = repDataSet.join(orderDataSet).on("lago_orderbillno", "billno"). select("lago_orderbillno","lago_requser","lago_reqdetail","lago_reqdate","lago_reqamount","lago_orderdate","lago_orderuser","lago_对报表的查询结果进行重新计算后,合计值还是修改前的结果解决方案
1 业务背景项目开发中,报表经常会遇到根据某个特定条件需要修改显示结果。比如修改金额的值,对应的合计值应该也要被更新。2 遇到的问题...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



