SAP UI5应用获取当前登录账号ID
封装了一个公共方法,方便在SAP UI5应用中获取当前登录ID。
以下是自己在项目中遇到的情况并逐步思维扩展的想法。
1. 通过在fioriLaunchpad磁贴中打开应用,获取当前登录ID可以直接sap.ushell.Container.getService("UserInfo").getId() 获取。
sap.ushell.Container.getService("UserInfo").getId() //另外sap.ushell.Container.getService("UserInfo")还有账号的其它很多信息,见下面截图。
2.直接通过bsp应用程序目录访问单个UI5应用,例如 /sap/bc/ui5_ui5/sap/Demo/index.html。此时sap.ushell.Container返回的结果是underfiend。
这个时候解决方案是在单个应用的html文件引入以下4行代码。
<script src="/sap/public/bc/ui2/services/sap/ui2/srvc/error.js"></script> <script src="/sap/public/bc/ui2/services/sap/ui2/srvc/utils.js"></script> <script src="/sap/public/bc/ui2/shell-api/sap/ui2/shell/startup.js"></script> <script src="/sap/public/bc/ui2/shell-api/sap/ui2/shell/shell.js"></script>
然后我们就可以在js文件通过sap.ui2.shell里面的方法获取登入账号ID。
let oUser = sap.ui2.shell.getUser(); oUser.load({}, function() { oUser.getId(); //oUser.getId()就是获取到当前登录ID,另外oUser里面还有账号的其它很多信息,见下面截图。 }, function() {});
总结:上面获取当前登录账号的两种方式看起来好像有点局限性。
一个针对FioriLaunchpad打开的应用;
一个针对单个bsp应用目录打开时可以加载该工程的html,从而在html引入了4个js文件。
但是换种想法,我们可以在js代码中动态加载那4个js文件到html中。
这样就可以把第二种方法封装成一个公共方法,让它也适用于fioriLaunchpad打开的应用。这样也不需要在每个UI5应用的html中单独引入那4个js文件。
(注:getCurUser()方法中的if判断其实可以省略,直接都走else里面的逻辑。只是个人感觉还是让fioriLaunchpad打开的应用直接调sap.ushell.Container.getService("UserInfo").getId()方法获取ID就行,不用去加载那4个js文件。)
//调用方法示例,getCurUser()、_loadScript(url, callback)都是可以封装在某个公共方法文件中的 this.getCurUser().then(function(sUserId) { sUserId;// sUserId就是当前登录账号ID }); /** * Get Current Login UserID **/ getCurUser: function() { var that = this; return new Promise(function(resolve) { if (sap.ushell.Container !== undefined) { resolve(sap.ushell.Container.getService("UserInfo").getId()); } else { var Promise1, Promise2, Promise3, Promise4; Promise1 = new Promise(function(reslove) { that._loadScript("/sap/public/bc/ui2/shell-api/sap/ui2/shell/shell.js", function() { reslove(""); }); }); Promise2 = new Promise(function(reslove) { that._loadScript("/sap/public/bc/ui2/services/sap/ui2/srvc/error.js", function() { reslove(""); }); }); Promise3 = new Promise(function(reslove) { that._loadScript("/sap/public/bc/ui2/services/sap/ui2/srvc/utils.js", function() { reslove(""); }); }); Promise4 = new Promise(function(reslove) { that._loadScript("/sap/public/bc/ui2/shell-api/sap/ui2/shell/startup.js", function() { reslove(""); }); }); Promise.all([Promise1, Promise2, Promise3, Promise4]).then(function() { var oUser = sap.ui2.shell.getUser(); oUser.load({}, function() { resolve(oUser.getId()); }, function() {}); }); } }); }, _loadScript: function(url, callback) { var script = document.createElement("script"); script.type = "text/javascript"; if (typeof(callback) !== "undefined") { if (script.readyState) { script.onreadystatechange = function() { if (script.readyState === "loaded" || script.readyState === "complete") { script.onreadystatechange = null; callback(); } }; } else { script.onload = function() { callback(); }; } } script.src = url; document.body.appendChild(script); }
post SAP-Garson
原文链接:https://blog.csdn.net/qq_28872573/article/details/116750052文章来自于网络,如果侵犯了您的权益,请联系站长删除!