带有后端调用的SAPUI5启动板注销事件

带有后端调用的SAPUI5启动板注销事件,sapui5,launchpad,Sapui5,Launchpad,因此,我发现SAP Launchpad容器API提供了一个选项来注册注销事件,并返回一个承诺()。 不幸的是,在实现之后,我发现UI5版本必须是1.81或更高版本,参数bAsync才能工作。在我的项目中,我们是1.78,所以对我没有承诺 有什么问题吗 我想在上述注销事件中进行后端调用。这不起作用,因为据我所知,在调试过程中,启动板会在注销事件“完成”后销毁所有内容(=事件中的每一行代码都已完成,忽略子函数)。超时等不起作用,因为他们的调用也会在代码处理完成后进行,这意味着调用被删除 我试过什么

因此,我发现SAP Launchpad容器API提供了一个选项来注册注销事件,并返回一个承诺()。 不幸的是,在实现之后,我发现UI5版本必须是1.81或更高版本,参数bAsync才能工作。在我的项目中,我们是1.78,所以对我没有承诺

有什么问题吗

我想在上述注销事件中进行后端调用。这不起作用,因为据我所知,在调试过程中,启动板会在注销事件“完成”后销毁所有内容(=事件中的每一行代码都已完成,忽略子函数)。超时等不起作用,因为他们的调用也会在代码处理完成后进行,这意味着调用被删除

我试过什么

  • 没有子函数的即时后端调用->由于与上面相同的原因无法工作
  • 无限循环,直到后端调用被处理->堆栈溢出
  • 在严格模式下使用timeout/await->await循环时,由于上述问题,超时无法工作
我认为什么可能有效

  • 暂停代码进程,直到后端调用完成
  • 使用完全不同的方法让我的逻辑处理注销(例如,完全自定义注销)
  • 在这里询问进一步的想法

有人知道如何解决这个问题吗?提前非常感谢。

由于代码格式不正确(我找不到原因),提交我的答案时出现了一些问题。所以我决定引用它,只是为了让提交的答案有效

好的,我已经找到了解决办法。这可能不是问题所在 从技术上讲,这是最好的,但效果很好,而且看起来很干净。 这来自s4/Hana系统,因此可能不是通用解决方案 (例如)它不考虑在左侧窗格中进行日志记录。 在我的启动板中不存在)

我做了什么

而不是将我的个人逻辑附加到Fiori注销事件 用我的个人逻辑创建了一个自定义注销按钮,后跟 正在调用SICF注销节点

我是怎么做到的

  • 创建启动板插件
  • Component.js:添加具有自定义注销功能的新标题项
  • style.css:在桌面(\uu list0…)和移动(\uu list1…)中隐藏原始注销按钮(logoutBtn),以防止跳过我的逻辑 通过默认注销注销
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";
}
#__list0-7-logoutBtn {
    display: none;
}
#__list1-7-logoutBtn  {
    display: none;
}