ABI折叠式钻取一键展开

338
1

fenglan 初学数据Lv2

发表于2023-10-16 15:47

楼主
本帖最后由 fenglan 于 2023-10-16 15:51 编辑

报表使用折叠式钻取,希望通过点击全部展开折叠
实现步骤如下:
1.添加一个文本,配置万能式钻取

万能式脚本:var bbq = g_rptpage.calcInfo.calcparams.elements["@bbq"];
javascript:_z('<#=srcrpt.id#>','drillpath=;hiddencalcparams=false;@expand=true;@bbq='+bbq)

2.添加客户端计算前脚本

客户端计算前脚本:
//机构的维表元
def jgCellName="A3";
//机构维的级次
def dimMaxLevel=2;
//缩进距离
def indent = 15;
def jgRow = 0;
def jgCol = 0;
//设置浮动范围
def setFloatRange(rc,left,top,right,bottom){
   rc.setTop(top);
   rc.setLeft(left);
   rc.setRight(right);
   rc.setBottom(bottom);               
}
//展开所有级次
def  expandAll(jgCellName,dimMaxLevel,indent){

        jgCell = rpt.getCell(jgCellName);
        jgRow = jgCell.getRow();
        jgCol = jgCell.getCol();

           //注意此脚本只适合机构表元在第一个分析区的情况
        //浮动分析区的范围
        fxqRect = rpt.getFxq(0).getRange();
//添加行数
        rpt.insertRow(jgRow+1,dimMaxLevel);
                //设置行的显示条件
                setRowVisible(jgCellName,jgRow,dimMaxLevel);
  if (fxqRect.getBottom()==jgRow+1){
           //需要调整分析范围
    fxqRect.setBottom(fxqRect.getBottom()+dimMaxLevel);
  }
        for(r in 0..<dimMaxLevel){
                row = r +jgRow+1;
                for(c in 0..<rpt.getColCount()){
                  precl = rpt.getCell(jgRow,c);
                  cl = rpt.getCell(row,c);
                  cl.copyAll(precl);
                  cl.adjustCellExp(true,true,jgRow-1,r+1);
                  if (precl.isDimCell()){
                    cl.copyToDimCell(precl);
                    //设置浮动范围
                    rc = precl.getFloatRange();
                    setFloatRange(cl.getFloatRange(),rc.getLeft(),row,rc.getRight(),dimMaxLevel+jgRow+1);
                    cl.setProperty('indent',indent*(r+1)+'');
                    cl.setProperty('url','');
                    cl.setFloatSumLevel(r+1);

                    //把源行的浮动表元范围设置下
                    if (r==0){
                       precl.getFloatRange().setBottom(dimMaxLevel+jgRow+1);
                       precl.setFloatSumLevel(0);
                       precl.setProperty('url','');
                    }
                  }
                }
        }
}

//行的显示条件保持一致
def  setRowVisible(jgCellName,jgRow,dimMaxLevel){
        rb =  rpt.getRb();
        visibleStr = rb.getRowInfo(jgRow).getVisibleStr();
        if(visibleStr != ""){
                addStartRow = jgRow+1;
                for(r in addStartRow..<(addStartRow  + dimMaxLevel)){
                        str = visibleStr.replaceAll(jgCellName, jgCellName.substring(0,1) + String.valueOf(r+1));
                        //System.out.println("rowvisible:" +r + str);
                        rb.setRowVisible(r, str);
                }
        }
}

if("true".equals(params.getValue("@expand"))){
  expandAll(jgCellName,dimMaxLevel,indent);
}

3.报表样例:
折叠式一键式展开.zip (5.22 KB, 下载次数: )

最近看过此主题的会员

txl

v笑向前走

1个回答

只看楼主

fenglan 初学数据Lv2

发表于2023-10-16 15:55

只看该作者

取消 关注该作者的回复

沙发

解决了https://bbs.esensoft.com/thread-132454-1-1.html该帖子里面的脚本出现的以下2个问题:
1.维表层级不齐,例如有的有的3级,有的4级,没有4级的会显示空行的问题;
2.在计算结果页面重新选择参数,在点一键式展开,参数不生效的问题。

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号