如何使用按钮从脚本关闭 CrossApplicationNavigation 页面
how to close CrossApplicationNavigation pages from script with button
在我目前正在开发的应用程序上,
我有几个指向标准 sap 后端事务的超链接,例如 BP、PDL 等。
我通过 CrossApplicationNavigation 打开它们。
他们打开新标签。
在我的主应用程序上,我实现了一个按钮来关闭每个选项卡并返回到根视图。
我尝试了以下方法:
Script to close other tabs or browser
这是我的代码:
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);
},
这样,我用我的语义对象打开了新标签。我在我的模型中注册它。
下一步是与我的按钮链接的方法:
this._myModel = this._oComponent.getModel("oModelWindow");
var aWindow = this._myModel.getData().Window;
aWindow.close();
我正在加载我打开的选项卡的 window。
关闭指令不起作用,它写道:
"Scripts may close only the windows that were opened by it."
我在 CrossApplicationNavigation 中的理解是它打开了一个新选项卡并使用 sap.m.URLHelper.redirect(url, true) 进行重定向;
调用新屏幕之前的当前屏幕是否知道它打开了哪个页面?
请问有手动关闭的方法吗?
我找到了以下解决方案:
打开 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");
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();
}
这样一来,当单击该按钮时,所有其他选项卡都会关闭。
在我目前正在开发的应用程序上, 我有几个指向标准 sap 后端事务的超链接,例如 BP、PDL 等。 我通过 CrossApplicationNavigation 打开它们。 他们打开新标签。
在我的主应用程序上,我实现了一个按钮来关闭每个选项卡并返回到根视图。
我尝试了以下方法: Script to close other tabs or browser
这是我的代码:
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);
},
这样,我用我的语义对象打开了新标签。我在我的模型中注册它。
下一步是与我的按钮链接的方法:
this._myModel = this._oComponent.getModel("oModelWindow");
var aWindow = this._myModel.getData().Window;
aWindow.close();
我正在加载我打开的选项卡的 window。 关闭指令不起作用,它写道: "Scripts may close only the windows that were opened by it."
我在 CrossApplicationNavigation 中的理解是它打开了一个新选项卡并使用 sap.m.URLHelper.redirect(url, true) 进行重定向; 调用新屏幕之前的当前屏幕是否知道它打开了哪个页面? 请问有手动关闭的方法吗?
我找到了以下解决方案: 打开 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");
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();
}
这样一来,当单击该按钮时,所有其他选项卡都会关闭。