как закрыть страницы CrossApplicationNavigation из скрипта кнопкой - PullRequest
0 голосов
/ 31 мая 2019

В приложении, которое я сейчас разрабатываю, У меня есть несколько гиперссылок на стандартные транзакции бэкэнда sap, такие как BP, PDL и так далее. Я открываю их с помощью CrossApplicationNavigation. они открывают новую вкладку.

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

Я попробовал следующее: Скрипт для закрытия других вкладок или браузера

вот мой код:

            var oCrossAppNavigator = sap.ushell.Container.getService("CrossApplicationNavigation");
            var oExtUi = oEvent.getSource().getText();
            var hash = oCrossAppNavigator.hrefForExternal({
                target: {
                    semanticObject: "ZSIMM_PDL",
                    action: "display"
                },
                params: {
                    "UtilitiesPDL": oExtUi
                }
            });
            var url = window.location.href.split("#")[0] + hash;
            this._oComponent = sap.ui.component(sap.ui.core.Component.getOwnerIdFor(this.getView()));
            this._myModel = this._oComponent.getModel("oModelWindow");
            this._myModel.setProperty("/Window", window);
            sap.m.URLHelper.redirect(url, true);
        },   

таким образом, я открываю новую вкладку с моим semanticObject. и я регистрирую это в моей модели.

следующий шаг - метод, связанный с моей кнопкой:

            this._myModel = this._oComponent.getModel("oModelWindow");
            var aWindow = this._myModel.getData().Window;
            aWindow.close();    

Я загружаю окно открытой вкладки. инструкция close не работает, она пишет: «Скрипты могут закрывать только те окна, которые были им открыты».

что я понимаю в CrossApplicationNavigation, это то, что он открыл новую вкладку и перенаправил с помощью sap.m.URLHelper.redirect (url, true); знает ли текущий экран перед вызовом нового, какую страницу он открывает? и есть ли способ закрыть его вручную?

1 Ответ

0 голосов
/ 31 мая 2019

Я нашел решение, которое заключается в следующем: при открытии кросс-приложения-навигации я кладу в память открытую вкладку:

            var oExtUi = oEvent.getSource().getText();
            var hash = oCrossAppNavigator.hrefForExternal({
                target: {
                    semanticObject: "ZSIMM_PDL",
                    action: "display"
                },
                params: {
                    "UtilitiesPDL": oExtUi
                }
            });
            var url = window.location.href.split("#")[0] + hash;
            this._oComponent = sap.ui.component(sap.ui.core.Component.getOwnerIdFor(this.getView()));
            this._myModel = this._oComponent.getModel("oModelWindow");
            var aWindow = this._myModel.getData().Windows;
            aWindow.push(window.open(url, "_blank"));
            this._myModel.setProperty("/Windows", aWindow);

и в методе кнопки я вызываю все вкладки и закрываю их так:

            this._oComponent = sap.ui.component(sap.ui.core.Component.getOwnerIdFor(this.getView()));
            this._myModel = this._oComponent.getModel("oModelWindow");
            //then you can iterate over them and close them all like this:
            var oWindow = this._myModel.getData().Windows;

            for (var i = 0; i < oWindow.length; i++) {
                oWindow[i].close();
            }

таким образом, при нажатии кнопки все остальные вкладки закрываются.

...