2014-08-29 2 views
1

В настоящее время я фокусируюсь на проблеме, которую, как я думал, будет легко решить. но я этого не сделал. Есть элементы управления, которые позволяют нам показать имя пользователя или зарегистрированного пользователя, например, прекрасные кожухотрубных headitems:SAPUI5 получить имя пользователя/пользователя из запроса OData

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, которые, на мой взгляд, предназначены для отображения имени пользователя или текущего пользователя. но как я могу его получить? моя идея - получить его из запроса одаты, который был сделан ранее. Он требует, чтобы я вводил имя пользователя и пароль -> таким образом, я хочу, чтобы читал это имя пользователя в моем контроллер-метод, но как?

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

Я также попытался получить его из navigator.userAgent(), но эта информация не принадлежит пользователю. Кто-нибудь знает, как его получить? И да: я искал в google и нашел несколько обсуждений о пользователях/логинах, но ни один из этих потоков не разрешил мою проблему. В противном случае я думал о передаче sy-uname из SAP во внешний интерфейс, но как вы могли отправить один текст? Я не хочу создавать полный сервис для этой единственной транзакции ... Спасибо!

Конечная информация: Если вы не предоставляете sUser и sPassword во время инициализации модели OData, она будет пустой во время выполнения. Вы не можете получить к нему доступ из модели, хотя я понял, что для этого нужен сервис. Спасибо, Аллен!

ответ

3

Имя пользователя находится в sap.ui.model.odata.ODataMetadata из ODataModel.

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

oModel.attachMetadataLoaded(null,getUserName); 

Update Ответ на комментарий вопрос zyrex:

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

+0

Вы используете ODataModel? – Allen

+0

да: \t OnInit: функция() { \t \t вар sServiceUrl = 'ххх', \t \t вар oModel = новый sap.ui.model.odata.ODataModel (sServiceUrl, правда); \t \t sap.ui.getCore(). SetModel (oModel); \t}, – zyrex