2014-08-29 62 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