电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

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

来源:金蝶云社区作者:金蝶2024-09-235

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

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格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信