问题描述
因此,我发现SAP Launchpad Container API提供了一个选项,用于注册注销事件并返回承诺(https://sapui5.hana.ondemand.com/1.81.0/#/api/sap.ushell.services.Container%23methods/attachLogoutEvent)。 不幸的是,在实现之后,我发现UI5版本必须为1.81或更高版本,参数bAsync才能正常工作。在我的项目中,我们的价格是1.78,所以对我没有任何希望。
出什么问题了?
我想在所述注销事件中进行后端调用。这是行不通的,因为据我所了解的调试,在我的注销事件“结束”之后(即事件中的每一行代码都已通过,忽略了子功能),启动板会破坏所有内容。超时等不起作用,因为它们的调用也将在代码进度完成之后进行,这意味着调用将被删除。
我尝试了什么?
我认为什么可行?
有人对解决问题有想法吗?预先非常感谢。
解决方法
由于代码格式不正确(我找不到原因),提交我的答案时遇到了一些问题。所以我决定引用它,只是为了使答案的提交起作用。
好的,我找到了解决方案。可能不是 从技术上讲是最好的,但是它可以正常工作,并且结果看起来足够干净。 这是来自s4 / Hana系统,因此它可能不是通用解决方案 (例如,它不考虑在左侧窗格中注销 在我的启动板中不存在。
我做了什么?
我没有将个人逻辑附加到Fiori注销事件上 使用我的个人逻辑创建了一个自定义退出按钮,随后 调用SICF注销节点。
我是怎么做到的?
- 创建启动板插件
- Component.js:使用自定义注销功能添加新的标题项
var oRenderer = sap.ushell.Container.getRenderer("fiori2"); oRenderer.addHeaderEndItem("sap.ushell.ui.shell.ShellHeadItem",{ id : "logoutButton",icon : "sap-icon://log",tooltip : this.getModel("i18n").getResourceBundle().getText('btnLogoutTooltip'),text : this.getModel("i18n").getResourceBundle().getText('btnLogoutText'),ariaLabel : this.getModel("i18n").getResourceBundle().getText('btnLogoutAriaLabel'),press : this._logout.bind(this),},true,false);
_logout : function(){ this._callMyStuff(); window.location.href = "/sap/public/bc/icf/logoff"; }
- style.css:在桌面(__list0 ...)和移动设备(__list1 ...)中隐藏原始注销按钮(logoutBtn),以防止通过以下方式跳过我的逻辑 通过默认注销注销。
#__list0-7-logoutBtn { display: none; } #__list1-7-logoutBtn { display: none; }