Microstrategy 8.1.2 Web Universal 开发问题整理
做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);
}
目前在使用过程中发现的相关问题就是这些,二次开发不是一个短期内能够做到完美的事情,发现一个解决一个,解决一个整理一个,努力让我们使用的软件达到最好的状况。以上是开发修改的一些相关内容,如有疑问欢迎一起探讨,这个领域需要所有开发者的一起努力。
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:zifeng 来源: 淘宝数据平台团队
- 标签: Microstrategy Universal
- 发布时间:2010-07-27 23:23:34
- [69] Twitter/微博客的学习摘要
- [67] IOS安全–浅谈关于IOS加固的几种方法
- [65] android 开发入门
- [65] 如何拿下简短的域名
- [63] find命令的一点注意事项
- [62] Go Reflect 性能
- [61] 流程管理与用户研究
- [60] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [57] 读书笔记-壹百度:百度十年千倍的29条法则