首页 > 解决方案 > Fiori 启动板:使用没有 `attachLogoutEvent` 的自定义后端调用处理注销事件(UI5 < 1.81)

问题描述

所以,我发现启动板容器 API 提供了一个选项来注册注销事件并返回一个承诺(https://ui5.sap.com/#/api/sap.ushell.services.Container%23methods/attachLogoutEvent)。不幸的是,在实现之后我发现 UI5 版本必须是 1.81 或更高的参数bAsync才能工作。在我的项目中,我们处于 1.78,所以对我没有任何承诺。

有什么问题?

我想在所述注销事件中进行后端调用。这不起作用,因为据我了解我的调试,启动板会在我的注销事件“完成”之后销毁所有内容(= 事件中的每一行代码都已完成,忽略子功能)。超时等不起作用,因为它们的调用也将在代码进度已经完成之后,这意味着调用被删除。

我尝试了什么?

我认为什么可能有效?

有谁知道如何解决 UI5 1.78的问题?

标签: sapui5sap-fiori

解决方案


好吧,我已经找到了解决方案。它可能不是技术上最好的,但它可以工作并且结果看起来足够干净。这是来自 S4/HANA 系统,所以它可能不是一个通用的解决方案(例如,它不考虑在我的启动板中不存在的左侧窗格中注销)。

我做了什么?

我没有将我的个人逻辑附加到 Fiori 注销事件,而是使用我的个人逻辑创建了一个自定义注销按钮,然后调用 SICF 注销节点。

我是怎么做到的?

  • 创建启动板插件
  • Component.js中,添加一个具有自定义注销功能的新标题项
    // ushellLib required from "sap/ushell/library"
    
    var oRenderer = ushellLib.Container.getRenderer("fiori2");
    oRenderer.addHeaderEndItem("sap.ushell.ui.shell.ShellHeadItem", {
      id: "logoutButton",
      icon: "sap-icon://log",
      // ...
      press: [this._logout, this],
    }, true, false);
    
    _logout: function() {
      this._callMyStuff();
      window.location.href = "/sap/public/bc/icf/logoff";
    },
    
  • 在中,隐藏桌面 ( ) 和移动 ( )style.css中的原始注销按钮 (logoutBtn),以防止通过默认注销注销来跳过我的逻辑。 __list0...__list1...
    #__list0-7-logoutBtn {
      display: none;
    }
    #__list1-7-logoutBtn  {
      display: none;
    }
    

推荐阅读