ComponentContainer称为多次调用的app方法

2020-09-19 11:52发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好专家

先决条件:我有三个应用程序 App1 App2 App3 。 可以直接通过 CrossAppNavigator.toExternal 调用 App1

 var oCrossAppNavigator = sap.ushell.Container.getService(" CrossApplicationNavigation");
 var hash =((oCrossAppNavigator && oCrossAppNavigator.hrefForExternal({
   目标:{
     语义对象:"应用",
     动作:" App1"
     },
     参数:{
       " Purreqnr":sItem.Purreqnr
       }
     }))||  "";
 oCrossAppNavigator.toExternal({
   目标:{
     shellHash:哈希
     }
   }); 

或通过sap.ui.core.ComponentContainer打开它:

//Edit.controller.js
 _onRouteMatched:函数(oEvent){
   oArgs = oEvent.getParameter(" arguments");
   oView = this.getView();
   var oPage = oView.byId(" page");
   var oCompData = {
     PurchaseRequisition:oArgs.Purreqnr
   };
   如果(!jQuery.isEmptyObject(this.editComponent)){
     this.editComponent.destroy();
     删除this.editComponent;
   }
   if(!jQuery.isEmptyObject(this.editContainer)){
     this.editContainer.destroy();
     删除this.editContainer;
   }
   oPage.destroyContent();
   尝试{
     this.editContainer = new sap.ui.core.ComponentContainer(" atbComponentContainer",{
       生命周期:sap.ui.core.ComponentLifecycle.Container});
     oPage.addContent(this.editContainer);
     this.editComponent = sap.ui.getCore()。createComponent({
       网址:"/img/sap/bc/ui5_ui5/zapps/zapp1",
       名称:" app1",
       componentData:oCompData
     });
     this.editComponent.setContainer(this.editContainer);
     this.editContainer.setComponent(this.editComponent);
   } catch(err){
    //
   }
 } 

两个变体均正常运行, App2 通过ComponentContainer打开 App1 App3 导航至 App1 ,然后返回。/p>

问题显示用户何时从 App3 中打开 App1 几次(例如5次)。 每次用户从 App1 返回到 App3 时,都会分别调用 App1 onExit() 这是正确的。 然后无需刷新即可转到 App2 ,导航到"编辑"视图,由 ComponentContainer 打开 App1

用户从 Edit 视图导航回到 Home 视图,然后再次导航至 Edit 视图之后,将出现 this.editComponent。 destroy(); 调用,因此它将清除 App1 的先前实例,并将创建一个新实例。 但是在 this.editComponent.destroy(); 时刻,调试器将在 App1 的 onExit()中停止6次(5次) 来自App3,1来自App2)。 因此,即使已调用此方法,SAPUI5缓存中的某个位置也会存储先前打开的应用程序实例,并为其调用 onExit()。

然后,在每次导航后 Edit -> Home -> Edit 查看 onExit()中调试器停止的数量 将增加1(每次导航)。

但是如果我强制刷新页面(Ctrl + F5)并尝试多次导航编辑-> 主页-> 编辑, em> onExit()将被调用一次。 仅在 CrossAppNavigator.toExternal 导航,然后是 sap.ui.core.ComponentContainer

之后,才会出现多个实例。

是错误还是应清除某些缓存?

编辑1:我们有sap.ui.version = 1.44.27

上传的库版本

关于

雅罗斯拉夫

(75.3 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好专家

先决条件:我有三个应用程序 App1 App2 App3 。 可以直接通过 CrossAppNavigator.toExternal 调用 App1

 var oCrossAppNavigator = sap.ushell.Container.getService(" CrossApplicationNavigation");
 var hash =((oCrossAppNavigator && oCrossAppNavigator.hrefForExternal({
   目标:{
     语义对象:"应用",
     动作:" App1"
     },
     参数:{
       " Purreqnr":sItem.Purreqnr
       }
     }))||  "";
 oCrossAppNavigator.toExternal({
   目标:{
     shellHash:哈希
     }
   }); 

或通过sap.ui.core.ComponentContainer打开它:

//Edit.controller.js
 _onRouteMatched:函数(oEvent){
   oArgs = oEvent.getParameter(" arguments");
   oView = this.getView();
   var oPage = oView.byId(" page");
   var oCompData = {
     PurchaseRequisition:oArgs.Purreqnr
   };
   如果(!jQuery.isEmptyObject(this.editComponent)){
     this.editComponent.destroy();
     删除this.editComponent;
   }
   if(!jQuery.isEmptyObject(this.editContainer)){
     this.editContainer.destroy();
     删除this.editContainer;
   }
   oPage.destroyContent();
   尝试{
     this.editContainer = new sap.ui.core.ComponentContainer(" atbComponentContainer",{
       生命周期:sap.ui.core.ComponentLifecycle.Container});
     oPage.addContent(this.editContainer);
     this.editComponent = sap.ui.getCore()。createComponent({
       网址:"/img/sap/bc/ui5_ui5/zapps/zapp1",
       名称:" app1",
       componentData:oCompData
     });
     this.editComponent.setContainer(this.editContainer);
     this.editContainer.setComponent(this.editComponent);
   } catch(err){
    //
   }
 } 

两个变体均正常运行, App2 通过ComponentContainer打开 App1 App3 导航至 App1 ,然后返回。/p>

问题显示用户何时从 App3 中打开 App1 几次(例如5次)。 每次用户从 App1 返回到 App3 时,都会分别调用 App1 onExit() 这是正确的。 然后无需刷新即可转到 App2 ,导航到"编辑"视图,由 ComponentContainer 打开 App1

用户从 Edit 视图导航回到 Home 视图,然后再次导航至 Edit 视图之后,将出现 this.editComponent。 destroy(); 调用,因此它将清除 App1 的先前实例,并将创建一个新实例。 但是在 this.editComponent.destroy(); 时刻,调试器将在 App1 的 onExit()中停止6次(5次) 来自App3,1来自App2)。 因此,即使已调用此方法,SAPUI5缓存中的某个位置也会存储先前打开的应用程序实例,并为其调用 onExit()。

然后,在每次导航后 Edit -> Home -> Edit 查看 onExit()中调试器停止的数量 将增加1(每次导航)。

但是如果我强制刷新页面(Ctrl + F5)并尝试多次导航编辑-> 主页-> 编辑, em> onExit()将被调用一次。 仅在 CrossAppNavigator.toExternal 导航,然后是 sap.ui.core.ComponentContainer

之后,才会出现多个实例。

是错误还是应清除某些缓存?

编辑1:我们有sap.ui.version = 1.44.27

上传的库版本

关于

雅罗斯拉夫

(75.3 kB)
付费偷看设置
发送
4条回答
大道至简
1楼-- · 2020-09-19 12:08

我正在使用toExternal,但这从未发生在我身上,也许您可​​以告诉我们您的UI5版本? 如果是错误,则可能已修复。

顺便说一句,这就是我的用法,以防万一:

 this.oCrossAppNav = sap.ushell.Container.getService(" CrossApplicationNavigation");
 this.oCrossAppNav.toExternal({
 目标:{
 语义对象:"语义对象",
 动作:"动作"
 }
 });
 
路亽曱_Ryan
2楼-- · 2020-09-19 12:14

克里斯蒂安(Hello Cristian)

我们有sap.ui.version = 1.44.27。 还添加了SAP库的屏幕截图。

CJones
3楼-- · 2020-09-19 12:26

更好地避免了第二种方法,而仅使用交叉导航

小熊yu生菜
4楼-- · 2020-09-19 12:17

,您可以在清单文件的路由配置中使用模式来处理 ,或在routmatched函数中,只需使用 getComponentData()。startupParameters 处理crossnavogator(外部导航)中的模式/参数,并坚持使用适当的视图/应用程序,这样就可以避免刷新时默认应用程序加载。

一周热门 更多>