技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> JavaScript --> Microstrategy 8.1.2 Web Universal 开发问题整理

Microstrategy 8.1.2 Web Universal 开发问题整理

浏览:1392次  出处信息

    做Microstrategy Web Universal的二次开发已有半年多的时间了,Web Universal有着非常强大的扩展性和可管理性,Web代码结构,不管与任何系统进行集成都非常方便。

    但是随着浏览器种类的增多和浏览器版本的差异,造成Web Universal中很多功能无法正常使用的问题,严重的影响了用户体验。虽然多数报表系统针对的用户群体不是很多,但是由于用户体验造成的影响是非常恶劣的,所以修复这些问题是关键。8.1.2版本的Web Universal由于时间较早,支持的浏览器比较有限,虽然升级能够解决很多问题,但是带来的影响的也是相当巨大的,所以在此版本上的开发也是重中之重。

    需要说明的是,二次开发最好能够养成好的习惯,更改的位置加入自己更改的特殊标识,将原内容进行备份以便整理。并且尽量在不变原业务逻辑的基础上进行修改,因为你修改的大多数只是特殊情况和没有涉及到的情况。

    1. ie8下文档中的显示相关问题,例如下图中显示的button按钮,在ie8下,最后一个按钮会覆盖前面所有按钮,致使除最后一个按钮外的所有按钮不可用。

    正常显示

    

    错误显示

    

    debug相关js后,浏览器的反应情况

    在ie8下,在获得table中的col标签的width长度,前几个按钮所在的col都为-1,最后一个为100 + 1*前几个按钮的个数。页面会有JS的报错信息。

    在safari下,同样在获得table中的col标签的width长度,前几个按钮所在的col都为-1,最后一个为100 + 1*前几个按钮的个数。但是页面无任何JS的报错信息。

    解决方法:在javascript/mstrRWControlImpl.js文件中的1365行,对相关代码进行修改。由于safari浏览器下不会提示js报错,因此需要对源代码进行完全调整,如下所示,如果获取的col区域宽度为负数,将所有的col区域宽度按照个数设置平均。

    if(colWPercent > 0 && colWPercent < 100) {

    cols[i].style.width = colWPercent + ‘%’;

    } else {

    cols[i].style.width = 100/colCount + ‘%’;

    }

    2. safari浏览器下无法提交报表筛选的问题,必选筛选哪怕选中后,还是提示必选的筛选未选择的问题提示。

    解决问题并不是单独的去解决当前问题,而是要去总结问题的根本,将这些问题能够分成可以通用的类别进行整理再利用,像这个问题,解决后就总结出了3个safari浏览器对于JS的编写应该着重注意的地方。

    通过debug后,发现safari下在提交筛选信息的时候,得不到相关的筛选信息,等于说未提交任何筛选项给服务器端。

    问题解决方案:

    在javascript/DHTML.js下167行有对各种浏览器类型的定义,加入对safari浏览器的定义,需要支持的浏览器类型也可以一并加入,例如ie8。

    var isSafari = (navigator.userAgent.toLowerCase().indexOf(“safari”) == -1);

    在javascript/PromptFunctions.js下第7行对这些变量进行限制,如果检测到safari浏览器,不要对这4个变量进行全局声明,

    if(isSafari) {

    var promptJSAnswerName = “”;

    var promptJSListBoxName = “”;

    var promptJSDimensionName = “”;

    var promptJSMaxPin = -1;

    }

    原因可以debug此js的相关方法function BuildUserSelections(),在提交用户筛选信息时,检测到promptJSMaxPin变量的值为0,正常情况下promptJSMaxPin应该为此报表筛选的个数。

    通过debug得到的信息和以上的相关信息得到safari中JS的相关注意事项为:

    a. safari中不支持的全局变量值的改变

    b. safari对一些js异常不会产生报错信息,兼容这些设置。例如,区域宽度的数值范围

    c. 此事项是平时做东西测试的来的,不要将js的function方法定义至body区域内,在safari中不被允许

    3. 文档页面会报关于mstrRWControlImpl的相关错误

    在safari中,文档页面打开后,如果文档中含有表格类的报表会出现如下图的问题

    

    见javascript/grid.js文件的1741行,由于在safari浏览器下microstrategy.styleObj为nul引起的,将代码作如下修改,

    try{

    this.gridPosition = parseInt(microstrategy.styleObj.getAttValue(rwdObj, microstrategy.HTMLATTR_GRID_POS));

    this.gridArea = parseInt(microstrategy.styleObj.getAttValue(rwdObj, microstrategy.HTMLATTR_GRID_AREA_PCT)) / 100;

    } catch(e) {

    this.gridPosition = 1;

    this.gridArea = 0.5;

    }

    4. 筛选的时间控件显示位置问题

    在点击筛选项中的时间控件时,控件出现的位置会有偏差,正常的应该是仅靠时间控件点击按钮,下图为点击第二个筛选时出现的错误显示

    

    问题解决方案:

    在javascript/DHTML.js文件中的1409行,做以下修改

    if ((bIsIE4) || (!bIsIE4 && bIsW3C)) {

    

    if(obj && obj.name && obj.name.toLowerCase().indexOf(‘calendarbutton’) != -1) {

    

    if(microstrategy.cancelPromptResize == true) {

    

    var flagName = ‘html’;

    

    if(bIsFirefox) {

    flagName = ‘body’;

    }

    for (var i=0; (obj); i++) {

    lTop += obj.offsetTop;

    if (obj.offsetParent && obj.offsetParent.scrollTop && obj.offsetParent.tagName.toLowerCase() != flagName) {

    lTop -= obj.offsetParent.scrollTop;

    }

    obj = obj.offsetParent;

    }

    } else {

    

    lTop = obj.getBoundingClientRect().top;

    }

    } else {

    for (var i=0; (obj); i++) {

    lTop += obj.offsetTop;

    if (obj.offsetParent && obj.offsetParent.scrollTop && obj.offsetParent.tagName.toLowerCase() != ‘html’) {

    lTop -= obj.offsetParent.scrollTop;

    }

    obj = obj.offsetParent;

    }

    }

    return parseInt(lTop);

    } else {

    return getObjTop(vObject);

    }

    目前在使用过程中发现的相关问题就是这些,二次开发不是一个短期内能够做到完美的事情,发现一个解决一个,解决一个整理一个,努力让我们使用的软件达到最好的状况。以上是开发修改的一些相关内容,如有疑问欢迎一起探讨,这个领域需要所有开发者的一起努力。

建议继续学习:

  1. Microstrategy 8.1.2 Web Universal 集群及相关学习    (阅读:2037)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1