我目前正在关注一个我认为很容易解决的问题。但我没有。有些控件允许我们显示用户名或登录用户,例如可爱的 shell-headitems :
var oShell = new sap.ui.ux3.Shell("myShell", {
headerItems: [
new sap.ui.commons.TextView({
text: oController.getUserName() }),
],
});
看起来像这样:
在这里我们定义headerItems,我认为这是为了显示用户名/或当前登录的用户。但我怎么才能收到呢?我的想法是从之前提出的odata请求中获取它。它要求我输入用户名和密码 - >因此,我想在 controller-method 中读取此用户名,但是如何?
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,则在运行时它将为空。你不能从模型中访问它,虽然我为此实现了自己的服务..无论如何,感谢Allen!
答案 0 :(得分:3)
用户名位于ODataModel的sap.ui.model.odata.ODataMetadata
。
var getUserName = function() {
var model = sap.ui.getCore().getModel();
var sUser = model.oMetadata.sUser;
// Display user logic here.
};
oModel.attachMetadataLoaded(null,getUserName);
更新来自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);
});
}