简述
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栏。
新增菜单栏的效果如下: