Как добавить событие клика в Tile в плагине FLP?

Я хочу добавить событие щелчка ко всем плиткам на панели запуска без изменения кода внутри плитки. Для этого я создаю плагин FLP. Чтобы прикрепить событие прессы к плитке, я попытался получить плитки, используя следующий код:



sap.ushell.Container.getService("LaunchPage").getGroups().then(function(aGroups) {
                for (var i = 0; i < aGroups.length; i++) {
                    var aTiles = sap.ushell.Container.getService("LaunchPage").getGroupTiles(aGroups[i]);
                    for (var j = 0; j < aTiles.length; j++) {
                    aTiles[j].getImplementationAsSapui5().getTileControl().attachPress(function(oEvent) {
                                console.log("Tile clicked")
                            });
                        }
                }
            });

Ошибки нет, но она не показывает, что плитка нажата при нажатии любой плитки. Если я получаю плитки, используя следующий код, он работает нормально:

    var aTiles = sap.ushell.utils.getVisibleTiles();
            for (var j = 0; j < aTiles.length; j++) {
                aTiles[j].attachPress(function(oEvent) {
                    console.log(oEvent.getSource().getBindingContext().getObject().object.getTitle());
                });
            }

Проблема в том, что он возвращает только видимые плитки на экране.

Может кто-нибудь, пожалуйста, помогите мне здесь?


person Raksha Jain    schedule 21.12.2020    source источник


Ответы (2)


Я буду использовать ваш код, и если я могу дать вам некоторую информацию, я отвечу снова.

Я даю вам две идеи для возможных обходных путей к вашим сомнениям:

  • В моем случае, чтобы выполнить некоторые пользовательские действия с домашними плитками, я создал пользовательский тип плитки, возможно, вы могли бы рассмотреть его.
  • Другое решение, которое я создал для отправки событий навигации Google Analytics, заключалось в создании подключаемого модуля SAPUI5 для обработки изменений хэша. Тогда я знаю, где я и куда я хочу пойти.

С Уважением

person Victor Mateo Cruz    schedule 21.12.2020
comment
Если я использую изменение хэша, оно будет срабатывать, даже когда в приложении происходит навигация. И как в этом случае я получу название плитки из хеш-значения? - person Raksha Jain; 21.12.2020
comment
В моем случае я использую переменную в плагине sapui5 для проверки некоторого поведения. Кроме того, для меня хэш был лучше, чем название, потому что SAP FLP является многоязычным, и для некоторых статистических данных хэш одинаков на испанском, английском и т. д. - person Victor Mateo Cruz; 21.12.2020
comment
ааа, я вижу преимущество использования хеша. Есть ли способ узнать группу, из которой нажимается плитка, для случаев, когда плитка присутствует в нескольких группах. - person Raksha Jain; 21.12.2020
comment
да, я надеюсь, что другая точка зрения поможет вам найти решение. - person Victor Mateo Cruz; 22.12.2020

Я решил это, прикрепив событие изменения хэша. Я получаю все имена плиток и хэш-значения с помощью службы launchPage, а затем использую это при изменении хэша, чтобы соответствовать хеш-значению, чтобы получить заголовок. Даже если плитка открывается напрямую с помощью URL-адреса, событие будет зафиксировано.


sap.ushell.Container.getService("LaunchPage").getGroups().then(function(aGroups) {
for (var i = 0; i < aGroups.length; i++) {
    var aGrpTiles = 
          sap.ushell.Container.getService("LaunchPage").getGroupTiles(aGroups[i]);
    for (var j = 0; j < aGrpTiles.length; j++) {
        var sTileTitle = sap.ushell.Container.getService("LaunchPage").getTileTitle(aGrpTiles[j]);
        var sTileTarget = sap.ushell.Container.getService("LaunchPage").getCatalogTileTargetURL(aGrpTiles[j]);
        if (sTileTitle.indexOf("App Launcher") === 0) {
         sTileTitle = sTileTarget;
        }       
        window.UserTiles.push({
            title: sTileTitle,
            url: sTileTarget
        });
    }
  }
}.bind(this));

window.addEventListener("hashchange", this._onHashChange.bind(this), true);

_onHashChange: function(oEvent) {
    var sOldHash = this._getHashFromURL(oEvent.oldURL);
    var sNewHash = this._getHashFromURL(oEvent.newURL);
    //handled for the change of URL while navigation within the app
    if (sOldHash !== sNewHash) {
        console.log("new tile");
        var tile = window.UserTiles.filter(function(o) {
          if (o.url) {
            return sap.ushell.utils.getBasicHash(o.url).indexOf(sHash) === 0;
          }
       });
       console.log("tile title:" + tile[0].title, "tile hash:"+ tile.url);
    }
}
person Raksha Jain    schedule 26.02.2021