SAPUI5路线导航,其中有从表选择中选择的行,以传递到第二个屏幕

2020-09-27 01:45发布

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

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


你好

我有一个带有2个屏幕的SAPUI5应用程序,我试图将所选行从我的第一个屏幕传递到第二个屏幕,

但是我无法在第二个屏幕上显示数据,绑定上下文为空

您能告诉我编码中有什么问题吗?

这是我manifest.json的一部分

 {
     "路由":{
         " config":{
             " viewPath":" DI_Warehouse_Replenishment.view",
             " controlId":" V_Root",
             " viewLevel":1
             " controlAggregation":"页面",
             " routerClass":" sap.m.routing.Router"
         },
         "目标":{
             " Target_REHeader":{
                 " viewType":" XML",
                 " transition":" slide",
                 " clearAggregation":正确,
                 " viewName":" V_REHeader",
                 " viewLevel":1
             },
             " Target_REDetail":{
                 " viewType":" XML",
                 " transition":" slide",
                 " clearAggregation":正确,
                 " viewName":" V_REDetail",
                 " viewLevel":2
             }
         },
         "路线":[{
             " name":" Target_REHeader",
             " pattern":"",
             " titleTarget":"",
             " greedy":错误,
             " target":[" Target_REHeader"]
         },{
             " name":" Target_REDetail",
             " pattern":" Target_REDetail/{replPath}",
             " titleTarget":"",
             " greedy":错误,
             " target":[" Target_REDetail"]
         }]
     }
 }

 

主页视图xml

 
     <列>
         <!- ->
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
             <标签/>
         
     <项目>
         
             <单元格>
                 <!-<文本text =" {REPL> Itemline}"/>->
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
             
         

主页controller.js(我在传递到第二个屏幕之前将"/"替换为" R",然后在第二个屏幕中以另一种方式进行操作,因为我在路径中包含多个/这样

/items/25

 showSelected:function(evt){
 var oView = this.getView();
 如果(oView.byId(" ContentTable")。getSelectedItem()!== null){
     var o = oView.byId(" ContentTable")。getSelectedItem()。getBindingContext(" REPL")。getObject();
     var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
     var pathr = this.getView()。byId(" ContentTable")。getSelectedItem()。getBindingContext(" REPL")。getPath()。toString()。replace(/\//g," R");
     oRouter.navTo(" Target_REDetail",{
         replPath:路径
     });
 }其他{
     MessageBox.show("未选择行",sap.m.MessageBox.Icon.ERROR);
 }
 }
 });

 

第二页controller.js

 onInit:function(){
        //获取路由器信息
         var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
         oRouter.getRoute(" Target_REDetail")。attachPatternMatched(this._onObjectMatched,this);
         var oView = this.getView();
     },

 _onObjectMatched:函数(oEvent){
 var pathr = oEvent.getParameter(" arguments")。replPath.toString()。replace(/R/g,"/");
 this.getView()。bindElement({
 路径:路径,
 型号:" REPL"
 });
 alert(this.getView()。getBindingContext(" REPL")。getProperty(" EUsername")));
 },

 

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

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


你好

我有一个带有2个屏幕的SAPUI5应用程序,我试图将所选行从我的第一个屏幕传递到第二个屏幕,

但是我无法在第二个屏幕上显示数据,绑定上下文为空

您能告诉我编码中有什么问题吗?

这是我manifest.json的一部分

 {
     "路由":{
         " config":{
             " viewPath":" DI_Warehouse_Replenishment.view",
             " controlId":" V_Root",
             " viewLevel":1
             " controlAggregation":"页面",
             " routerClass":" sap.m.routing.Router"
         },
         "目标":{
             " Target_REHeader":{
                 " viewType":" XML",
                 " transition":" slide",
                 " clearAggregation":正确,
                 " viewName":" V_REHeader",
                 " viewLevel":1
             },
             " Target_REDetail":{
                 " viewType":" XML",
                 " transition":" slide",
                 " clearAggregation":正确,
                 " viewName":" V_REDetail",
                 " viewLevel":2
             }
         },
         "路线":[{
             " name":" Target_REHeader",
             " pattern":"",
             " titleTarget":"",
             " greedy":错误,
             " target":[" Target_REHeader"]
         },{
             " name":" Target_REDetail",
             " pattern":" Target_REDetail/{replPath}",
             " titleTarget":"",
             " greedy":错误,
             " target":[" Target_REDetail"]
         }]
     }
 }

 

主页视图xml

 
     <列>
         <!- ->
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
         <栏目>
             <标签/>
         
             <标签/>
         
     <项目>
         
             <单元格>
                 <!-<文本text =" {REPL> Itemline}"/>->
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
                 
             
         

主页controller.js(我在传递到第二个屏幕之前将"/"替换为" R",然后在第二个屏幕中以另一种方式进行操作,因为我在路径中包含多个/这样

/items/25

 showSelected:function(evt){
 var oView = this.getView();
 如果(oView.byId(" ContentTable")。getSelectedItem()!== null){
     var o = oView.byId(" ContentTable")。getSelectedItem()。getBindingContext(" REPL")。getObject();
     var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
     var pathr = this.getView()。byId(" ContentTable")。getSelectedItem()。getBindingContext(" REPL")。getPath()。toString()。replace(/\//g," R");
     oRouter.navTo(" Target_REDetail",{
         replPath:路径
     });
 }其他{
     MessageBox.show("未选择行",sap.m.MessageBox.Icon.ERROR);
 }
 }
 });

 

第二页controller.js

 onInit:function(){
        //获取路由器信息
         var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
         oRouter.getRoute(" Target_REDetail")。attachPatternMatched(this._onObjectMatched,this);
         var oView = this.getView();
     },

 _onObjectMatched:函数(oEvent){
 var pathr = oEvent.getParameter(" arguments")。replPath.toString()。replace(/R/g,"/");
 this.getView()。bindElement({
 路径:路径,
 型号:" REPL"
 });
 alert(this.getView()。getBindingContext(" REPL")。getProperty(" EUsername")));
 },

 
付费偷看设置
发送
5条回答
骆驼绵羊
1楼-- · 2020-09-27 02:04

嗨,

您不必传递完整的路径,而只需传递所选行的键,而在第二个视图中使用键构建路径,请找到以下代码片段:

 var键= this.getView()。byId(" ContentTable")。getSelectedItem()。getBindingContext(" REPL")。getProperty(" KeyFieldName");
     oRouter.navTo(" Target_REDetail",{
         replPath:键
     }); 
 _onObjectMatched:function(){
     var key = oEvent.getParameter(" replPath")。key;
     var sObjectPath = this.getModel(" REPL")。createKey(" Objects",{
 KeyFieldName:键
 });
     this.getView()。bindElement({
          路径:"/" + sObjectPath,
          型号:" REPL"
     });
 } 

"对象"是实体集名称。

还要确保模型" REPL"是全局模型,并且在两个视图上都已设置。

此致

Rahul

粗暴的香蕉
2楼-- · 2020-09-27 02:17

您可以在component.js的init方法内创建全局模型:

 var oData = {
 产品集合:[{
 产品编号:123,
 SupplierName:" ABC"
 },{
 产品编号:456,
 SupplierName:" MNP"
 }]
 };

 var oJSONModel = new sap.ui.model.json.JSONModel(oData);
 this.setModel(oJSONModel," myModel");
 

现在您可以在视图和控制器内部访问此模型,如下所示:

 var oModel = this.getView()。getModel(" myModel"); 
Climb_Ma
3楼-- · 2020-09-27 02:04

谢谢,明天我会尝试。

但是,当您谈论全局模型时," REPL"仅在主页中定义,这是manifest.json中" ZREPLENISHMENT"的JSON本地副本,我在表上使用REPL进行本地过滤。

我将尝试使用" ZREPLENISHMENT"而不是" REPL",我感觉它会起作用,我会告诉你:)

"型号":{
 " i18n":{
 " type":" sap.ui.model.resource.ResourceModel",
 "设置":{
 " bundleName":" DI_Warehouse_Replenishment.i18n.i18n"
 }
 },
 " ZREPLENISHMENT":{
 " type":" sap.ui.model.odata.v2.ODataModel",
 "设置":{
 " defaultOperationMode":"服务器",
 " defaultBindingMode":" TwoWay",
 " defaultCountMode":"请求"
 },
 " dataSource":" ZFGREPLENISHMENT_SRV",
 " preload":是
 },
 " GETPLANT":{
 " type":" sap.ui.model.odata.v2.ODataModel",
 "设置":{
 " defaultOperationMode":"服务器",
 " defaultBindingMode":" OneTime",
 " defaultCountMode":"请求"
 },
 " dataSource":" ZGET_PLANT_SRV",
 " preload":是
 }
 
灬番茄
4楼-- · 2020-09-27 02:14

我还没有开始工作,因为REPL不是manifest.json内的全局模型,并且REPL基于REHeaderSet,

 onInit:function(){
 var oView = this.getView();
 var oData = new ODataModel("/img/sap/opu/odata/sap/ZFGREPLENISHMENT_SRV/",true);
 oData.read("/img/REHeaderSet",null,null,true,function(response){
 var newArray = response.results;
 var model = new JSONModel({
 "项目":newArray
 });
 oView.setModel(model," REPL");
 },函数(错误){});
 }
 

我正在搜索如何在manifest.json中定义一个虚拟全局模型,该模型只能在视图和控制器内部使用?

如果我能做到这一点,那么我可以在第二个视图上使用REPL

小灯塔
5楼-- · 2020-09-27 02:04

,或者如果有可能摆脱REPL并在本地过滤ZREPLENISHMENT模型,那 很好

一周热门 更多>