BIEE header欄新增下拉選單

newknight發表於2013-11-27

 

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欄。

 

新增選單欄的效果如下:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10009036/viewspace-1061276/,如需轉載,請註明出處,否則將追究法律責任。

相關文章