SAPUI5启动板注销事件与后端调用

问题描述

因此,我发现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;
}