对报表的查询结果进行重新计算后,合计值还是修改前的结果解决方案
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_orderamount").finish(); //创建新的DataSet,将resultDataSet值复制给新DataSet,并完成值更新 RowMeta rowMeta= resultDataSet.getRowMeta(); DataSetBuilder newDataSetBuilder = Algo.create("test").createDataSetBuilder(rowMeta); int lagoReqamount = rowMeta.getFieldIndex("lago_reqamount"); while(resultDataSet.hasNext()){ Row row = resultDataSet.next(); Object[] values = new Object[row.size()]; for(int i=0;i<row.size();i++){ if(row.get("lago_reqdetail").equals("笔记本")&&i==lagoReqamount){ values[i]="300";//修改值 }else{ values[i]=row.get(i); } } newDataSetBuilder.append(values); } //创建新DataSet DataSet newDataSet = newDataSetBuilder.build(); return newDataSet; }
3.3 实现效果
4 注意事项
1、此方案对性能有一定影响,报表本身是用来做查询不适合做修改值。建议减少在报表中做修改值的场景。如果不要求显示合计,直接使用processRowData修改值即可。
5 源码
对报表的查询结果进行重新计算后,合计值还是修改前的结果解决方案
1 业务背景项目开发中,报表经常会遇到根据某个特定条件需要修改显示结果。比如修改金额的值,对应的合计值应该也要被更新。2 遇到的问题...
点击下载文档
上一篇:工作流修改审批记录下一篇:如何开发自定义比较符
本文2024-09-23 00:17:17发表“云苍穹知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-cangqiong-138508.html
您需要登录后才可以发表评论, 登录登录 或者 注册
最新文档
热门文章