根据传参(参数)-滚动定位到目标数据行

2429
1

tangmq 数据达人Lv4

发表于2019-8-16 10:04

楼主
本帖最后由 tangmq 于 2019-8-16 11:52 编辑

(该脚本适用于BI42)
一、需求
1、报表传参 @data_id(定位编号,例如12400) ,截取@dataid3位,去表里面进行定位
2、定位字段是DATA_ID(主题表名不同,任何需要定位的主题表,都含字段,DATA_ID
3、如果报表有展开,只需要定位当前结果,不需要去层层展开找下级
4、如果报表存在分页,当前也定位不到的,可不做任何处理,也不需要翻页计算去定位
5、滚动定位,给一个高亮颜色。
二、脚本使用说明在报表编辑界面的脚本设置中添加如下客户端脚本:
  1. function scrollPositionAndHighLight(dataid) {
  2. //        debugger;
  3.           var TARGET_COLNAME = "DATA_ID";
  4.           var grid = g_rptpage.getGridById("GRID1");
  5.           //获取所有的tr
  6.           var trList = $(grid.getTabDom()).find("tr");
  7.           var target_col_index = null;
  8.           var colTd = null;
  9.           var flag = false;
  10.           for(var i = 0; i < trList.length; i++) {
  11.                     colTd = trList.eq(i);
  12.                     for(var k = 0; k < colTd.find("td").length; k++) {
  13.                                var target = colTd.find("td").eq(k);
  14.                                //找到目标列的列号
  15.                                if (target.text() == TARGET_COLNAME ) {
  16.                                          target_col_index = k;
  17.                                          flag = true;
  18.                                          break;
  19.                                }
  20.                     }
  21.                     if(flag) {
  22.                                break;
  23.                     }
  24.           }
  25.           // 先获取到需要滚动到的那一行的dom
  26.           var targetTR = null;
  27.           // 滚动的像素
  28.           var scollpx = 0;
  29.           for(var j = 0; j < trList.length; j++) {
  30.                     targetTR = trList.eq(j);
  31.                     scollpx += targetTR.height();
  32.                     if(targetTR.find("td").eq(target_col_index).text().substring(0,3) == dataid) {
  33.                                targetTR.css({"background-color" : "red"});        
  34.                                if(grid.scrollContainerV) {
  35.                                          // 获取滚动条的高度
  36.                                          var scolllheight = grid.scrollContainerV.scrollHeight;
  37.                                          // 可视区域的高度
  38.                                          var viewheight = grid.scrollContainerV.offsetHeight;
  39.                                          // 实际可滚动的高度
  40.                                          var actualheight = scolllheight - viewheight;
  41.                                          // 计算出需要滚动的比例
  42.                                          var percent = (targetTR.offset().top - $(grid.griddom).offset().top) / scolllheight;
  43.                                          // 计算出需要滚动的像素,如果小于grid1到顶部的距离就不需要滚动
  44.                                          if (!(percent * actualheight < $(grid.griddom).offset().top)) {
  45.                                                    grid.scrollContainerV.scrollTop = percent * actualheight;
  46.                                          }
  47.                                } else {
  48.                                          // 获取滚动条的高度
  49.                                          var scolllheight = g_rptpage.bodyarea.scrollHeight;
  50.                                          // 可视区域的高度
  51.                                          var viewheight = g_rptpage.bodyarea.offsetHeight;
  52.                                          // 实际可滚动的高度
  53.                                          var actualheight = scolllheight - viewheight;
  54.                                          // 计算出需要滚动的比例
  55.                                          var percent = targetTR.offset().top / scolllheight;
  56.                                          // 计算出需要滚动的像素
  57.                                          if (!(percent * actualheight < $(grid.griddom).offset().top)) {
  58.                                                    g_rptpage.bodyarea.scrollTop = percent * actualheight;
  59.                                          }
  60.                                }
  61.                                break;
  62.                     }
  63.           }
  64. }
  65. //获取url中传的参数
  66. var data_id = getParameter("@data_id",g_rptpage.wnd);
  67. scrollPositionAndHighLight(data_id);
复制代码

----------------------------------------类似需求------------------
一、需求

系统报表节点,向BI里面传递一个@dep的参数值然后我们有个dept_code字段来对应,高亮显示[size=13.3333px](注意,脚本考虑场景简单,脚本不一定直接复用,请了解)
二、脚本
  1. function scrollPositionAndHighLight(dept_code) {
  2.         var TARGET_COLNAME = "dept_code";
  3.         var grid = g_rptpage.getGridById("GRID1");
  4.         //获取所有的tr
  5.         var trList = $(grid.getTabDom()).find("tr");
  6.         var target_col_index = null;
  7.         var colTd = null;
  8.         var flag = false;
  9.         for(var i = 0; i < trList.length; i++) {
  10.                 colTd = trList.eq(i);
  11.                 for(var k = 0; k < colTd.find("td").length; k++) {
  12.                         var target = colTd.find("td").eq(k);
  13.                         //找到目标列的列号
  14.                         if (target.text() == TARGET_COLNAME ) {
  15.                                 target_col_index = k;
  16.                                 flag = true;
  17.                                 break;
  18.                         }
  19.                 }
  20.                 if(flag) {
  21.                         break;
  22.                 }
  23.         }
  24.         // 先获取到需要滚动到的那一行的dom
  25.         var targetTR = null;
  26.         // 滚动的像素
  27.         var scollpx = 0;
  28.         for(var j = 0; j < trList.length; j++) {
  29.                 targetTR = trList.eq(j);
  30.                 scollpx += targetTR.height();
  31.                 if(targetTR.find("td").eq(target_col_index).text() == dept_code) {
  32.                         targetTR.css({"background-color" : "red"});        
  33.                         if(grid.scrollContainerV) {
  34.                                 // 获取滚动条的高度
  35.                                 var scolllheight = grid.scrollContainerV.scrollHeight;
  36.                                 // 可视区域的高度
  37.                                 var viewheight = grid.scrollContainerV.offsetHeight;
  38.                                 // 实际可滚动的高度
  39.                                 var actualheight = scolllheight - viewheight;
  40.                                 // 计算出需要滚动的比例
  41.                                 var percent = (targetTR.offset().top - $(grid.griddom).offset().top) / scolllheight;
  42.                                 // 计算出需要滚动的像素,如果小于grid1到顶部的距离就不需要滚动
  43.                                 if (!(percent * actualheight < $(grid.griddom).offset().top)) {
  44.                                         grid.scrollContainerV.scrollTop = percent * actualheight;
  45.                                 }
  46.                         } else {
  47.                                 // 获取滚动条的高度
  48.                                 var scolllheight = g_rptpage.bodyarea.scrollHeight;
  49.                                 // 可视区域的高度
  50.                                 var viewheight = g_rptpage.bodyarea.offsetHeight;
  51.                                 // 实际可滚动的高度
  52.                                 var actualheight = scolllheight - viewheight;
  53.                                 // 计算出需要滚动的比例
  54.                                 var percent = targetTR.offset().top / scolllheight;
  55.                                 // 计算出需要滚动的像素
  56.                                 if (!(percent * actualheight < $(grid.griddom).offset().top)) {
  57.                                         g_rptpage.bodyarea.scrollTop = percent * actualheight;
  58.                                 }
  59.                         }
  60.                         break;
  61.                 }
  62.         }
  63. }
  64. //获取url中传的参数
  65. var dept_code = getParameter("@dep",g_rptpage.wnd);
  66. scrollPositionAndHighLight(dept_code);
复制代码

由于滚动有报表滚动条,容器滚动条,报表在容器内部,场景有所不同,脚本也有所不同。此处脚本就不粘贴了,可下载参考表样(内含脚本) 表样.zip (6.4 KB, 下载次数: )


最近看过此主题的会员

esen_4PV2UY8IWC

esen_4Y3L5ADO80

dddfrr

esen_43K228T11K83

esen_50EOT2L3A3

esen_4YO0F42DH6

不如相忘

ihthis

手可摘星

keer_

yiyiyiyiy

hhdtest

zhangdarongzh

LuuuvLetter

bangcai

esen_4SBQYN0BZ5TZ

1个回答

只看楼主

辰哥 管理员

发表于2019-8-19 16:00

只看该作者

取消 关注该作者的回复

沙发

非常感谢你的分享,辰哥在这里替薏米谢谢你哟!

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

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

小时

全天响应

分钟

快速处理问题

工程师强势助力

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

400咨询:400-0011-866

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

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

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