BIEE header栏新增下拉菜单

浏览: 2336

简述

BIEE提供了对外开放的接口,使得global header中可以添加链接按钮,但无法提供header上的下拉菜单。

参见《System Administrator's Guide for Oracle Business Intelligence Enterprise Edition》的Providing Custom Links in Presentation Services章节。

 

但通过修改BIEE相应的js,其实是可以在header栏中添加下拉菜单的。

通过chrome浏览器的脚本跟踪,可以看到BIEE的header栏是通过header.js脚本生成的。

header.js脚本存在于四个目录(BIEE HOME= D:\app\OBI):

?  原始ear目录:D:\app\OBI\Oracle_BI1\bifoundation\jee\analytics.ear\analytics.war\res\b_mozilla

(上述路径为ear和war包解压形成)

?  Web目录:D:\app\OBI\Oracle_BI1\bifoundation\web\appv2\res\b_mozilla

?  Domail临时目录silp1v:D:\app\OBI\user_projects\domains\bifoundation_domain\servers\AdminServer\tmp\_WL_user\analytics_11.1.1\silp1v\war\res\b_mozilla

?  Domail临时目录z45ouk:

D:\app\OBI\user_projects\domains\bifoundation_domain\servers\AdminServer\tmp\_WL_user\analytics_11.1.1\z45ouk\analytics.war\res\b_mozilla

注意:Domail临时目录可被删除,在下次启动weblogic中间件时,会从ear重新解压复制相应文件到临时目录中。

 

增加header栏下拉菜单时,建议修改ear目录和web目录的header.js脚本,然后复制到domail临时目录中。

 

修改思路

初始状态下,header栏已经有较多的下拉菜单,如“仪表盘”、“新建”、“打开”…,可以参考这些下拉菜单的生成方法,复制并修改相关代码,生成新的下拉菜单。

 

如本次新增下拉菜单就参考了“新建”的生成方法:

“新建”菜单的生成命令如下(header.js,523行):

k.push(new saw.header.Menubar.MenuModel("new",saw.header.getLocalizedString("kmsgHeaderNew"),saw.header.getResUrl("catalog/new_ena.png"),new obips.Callback(this,this.onNewMenuClicked),new obips.Callback(this,this.onDisplayNewMenu),saw.header.getLocalizedString("kmsgHeaderNewDropDownMenu")));
k.push(null)

 

解读代码:

saw.header.getLocalizedString("kmsgHeaderNew")获取的是菜单的localized名称
saw.header.getResUrl("catalog/new_ena.png")获取的是菜单旁图标的引用
new obips.Callback(this,this.onNewMenuClicked)表示菜单可进行点击相关操作
new obips.Callback(this,this.onDisplayNewMenu)表示菜单的下拉显示对象(主要)
saw.header.getLocalizedString("kmsgHeaderNewDropDownMenu")表示下拉动作的localized命名

 

经过调整,新加命令如下,代码位置可置于上述代码之后:

(可根据具体需要来重新定义位置,此段代码加在“新建”代码之后,新增的菜单位置即在“新建”菜单之后,同理:如加在“仪表盘”代码之后,则位置即在“仪表盘”菜单之后)

k.push(new saw.header.Menubar.MenuModel("new",saw.header.getLocalizedString("kmsgHeaderNew1"),saw.header.getResUrl("catalog/new_ena.png"),new obips.Callback(this,this.onNewMenuClicked),new obips.Callback(this,this.onDisplayzhangcMenu),saw.header.getLocalizedString("kmsgHeaderNewDropDownMenu1")));
k.push(null)

 

注意上述代码中红色部分:

kmsgHeaderNew1表示为新加入的菜单新生成一个localized名称

kmsgHeaderNewDropDownMenu1表示为新菜单的下拉菜单新生成一个localized名称

关键的onDisplayzhangcMenu表示点击菜单时引用的新function

注:生成localized名称的方法在“附:修改localized名称”中详述

 

onDisplayzhangcMenu及相关代码如下:

saw.header.NavBar.prototype.onDisplayzhangcMenu=function(c,b){
this.zhangcMenuDiv=saw.createChildElement(document.body,"div","HeaderPopupWindow");
this.zhangcMenuDiv.id="zhangcMenuHeaderMainDiv";
h="http://www.baidu.com";
u="http://www.google.com.hk";
v=this.createzhangcLink()+":zhangc";
w=" target="_blank"";
document.getElementById("zhangcMenuHeaderMainDiv").innerHTML="baidu
google
Current Path";
saw.header.Menubar.getManager().showPopupPanel(c.menuSpan,this.zhangcMenuDiv);
}
;
 
saw.header.NavBar.prototype.createzhangcLink=function(){
var a="";
var c=document.getElementById("idViewStateDiv");
var g=c.getAttribute("statePath");
var e=obips.views.ViewController.getController(g);
a+=saw.commandToURL("Dashboard");
a+="&PortalPath="+saw.encodeURIComponent(e.getViewEnvParam("PortalPath"));
a+="&Page="+saw.encodeURIComponent(e.getViewEnvParam("Page"));
var f="";
var i=document.getElementById("idPageID");
f=i.getAttribute("pageID");
a+="&PageIdentifier="+saw.encodeURIComponent(f);
return a}
;

此段代码可放置在“新建”菜单对应的显示function:onDisplayNewMenu之后,具体位置可自订。

saw.header.getResUrl("catalog/new_ena.png")如果需要修改,也可参照生成localized名称的方法自行调整。

 

结果显示

修改完header.js文件后,复制到前文提及的4个目录中,重启BIEE(中间件)即可出现新的的header栏。

 

新增菜单栏的效果如下:

Clipboard Image.png

推荐 1
本文由 newkoa 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册