2014-08-29 77 views
1

我目前正在關注一個我認爲很容易解決的問題。但我沒有。有控制,允許我們顯示的用戶名或登錄的用戶,如可愛的殼headitemsSAPUI5從OData請求中獲取用戶名/用戶ID

var oShell = new sap.ui.ux3.Shell("myShell", { 
    headerItems: [ 
       new sap.ui.commons.TextView({ 
       text: oController.getUserName() }), 
       ], 
}); 

它看起來像這樣:

Header Item top right (currently a string)

在這裏我們定義headerItems,這在我看來預計會顯示一個用戶名/或當前登錄的用戶。但我怎樣才能收到它?我的想法是從早先做出的odata請求中獲得它。它需要我輸入用戶名和密碼 - >因此我想在我的控制器方法中讀取這個用戶名,但是如何?

getUserName : function() { 
     // return navigator.userAgent; 
     var model = sap.ui.getCore().getModel(); 
     return model.getProperty('sUser'); // doesnt work :(
}, 

我也嘗試從navigator.userAgent()獲取它,但是這些信息不屬於用戶。 任何人都知道如何接收它? 是的:我在谷歌搜索,發現一些線程討論關於用戶/登錄,但這些線程都沒有解決我的問題。否則,我想將sy-uname從SAP轉移到前端,但是如何發送單個文本?我不想爲此單一交易構建完整的服務......謝謝!

最終信息:如果您在oData-Model-Initialization期間未提供sUser和sPassword,則它將在運行時爲空。你無法從模型中訪問它,儘管我意識到這是一個自己的服務。謝謝無論如何,艾倫!

回答

3

用戶名在ODataModel的sap.ui.model.odata.ODataMetadata中。從zyrex評論問題

var getUserName = function() { 
    var model = sap.ui.getCore().getModel(); 
    var sUser = model.oMetadata.sUser; 
    // Display user logic here. 
}; 

oModel.attachMetadataLoaded(null,getUserName); 

更新答案:

var user = new sap.ui.commons.TextView(); 

var getUserNameCallBack = function(userName) { 
    user.setText(userName); 
} 

oController.getUserName(getUserNameCallBack); 

控制器的方法:

getUserName: function(callback) { 
    var userName = ''; 

    $.getJSON(sServiceUrl).done(function(data) { 
     userName = data.d.Name; 
     callback(userName); 

    }); 
} 
+0

嗨艾倫,控制檯說: 「oMetadata未定義或空」。如何初始化它?謝謝! – zyrex 2014-09-01 05:30:50

+0

你在使用ODataModel嗎? – Allen 2014-09-01 05:34:54

+0

是:\t的OnInit:函數(){ \t \t變種sServiceUrl = 'xxx' 的, \t \t變種oModel =新sap.ui.model.odata.ODataModel(sServiceUrl,TRUE); \t \t sap.ui.getCore()。setModel(oModel); \t}, – zyrex 2014-09-01 06:17:00