BIEE header栏新增下拉菜单


 

BIEE header栏新增下拉菜单:

简述

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

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

 

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

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

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

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

(上述路径为earwar包解压形成)

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

Domail临时目录silp1vD:\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.js523行):

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}

;

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

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

 

结果显示

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

 

新增菜单栏的效果如下:

请使用浏览器的分享功能分享到微信等