在SAPUI5上从一个XMLview(列表)传递到另一个XMLview(列表)的参数

在SAPUI5上从一个XMLview(列表)传递到另一个XMLview(列表)的参数,sapui5,Sapui5,我是SAPUI5的新手,寻求您的建议以解决一个问题。我的要求是: 第1页显示产品的XMLview列表。 第2页显示了XMLview上该产品在仓库中的存储箱列表。 第3页显示存储箱的详细信息 我创建了一个oDATA,两个实体类型:Product和Bin,都实现了GetEntitySet,我认为oDATA的结果很好。我的问题是在第二个XMLview页面上,我很难设置sap.m.list上的项目。。。我的XML如下所示,问题是所有的硬编码,我试图实现的是传递产品/工厂/仓库第一页的值。。。请告知如何动

我是SAPUI5的新手,寻求您的建议以解决一个问题。我的要求是:

第1页显示产品的XMLview列表。 第2页显示了XMLview上该产品在仓库中的存储箱列表。 第3页显示存储箱的详细信息

我创建了一个oDATA,两个实体类型:Product和Bin,都实现了GetEntitySet,我认为oDATA的结果很好。我的问题是在第二个XMLview页面上,我很难设置sap.m.list上的项目。。。我的XML如下所示,问题是所有的硬编码,我试图实现的是传递产品/工厂/仓库第一页的值。。。请告知如何动态解析此值分配。非常感谢

<Page
    title="Warehouse Storage Bin List"
    showNavButton="true"
    navButtonPress="handleNavButtonPress" >

    <List items="{/Bin?$filter=Lgnum eq 'XXX'  and Matnr eq 'XXXXXX' and Werks eq 'XXXX'}">
        <ObjectListItem type="Active" 
         press="handleListItemPress" 
         title="{StgeBin}" intro="{StgeType}" number="{Stock}" 
         numberUnit="">
            <attributes ObjectAttribute=""></attributes>
        </ObjectListItem>
    </List>

 </Page>


BR,J

我想您已经知道如何在sap.m中的页面之间导航了。如果没有,则这是您正在搜索的主要方法(使用
sap.m.App
,如果使用
sap.m.SplitApp
,则会有更多方法):

注意参数
oData
- 此可选对象可以携带任何应提供给目标页面的有效负载数据。目标页面上的“beforeShow”事件将包含此数据对象作为“data”属性

因此,假设您在第一个视图中使用sap.m.List来触发到第二个视图的导航。它可能是这样的:

View1.view.xml

<Page title="Products">
    <List items="{/Products}" selectionChange="onSelectionChange">
        <StandardListItem title="{title}" />
    </List>
</Page>
View2.controller.js

onSelectionChange : function(oEv) {
  var oItem = oEv.getParameter("listItem");
  var oApp = // get your App
  // Binding path will be something like "/Products/4" (fifth item selected)
  oApp.to("view2", "slide", { path : oItem.getBindingContextPath() })
}
onInit : function() {
  var self = this;
  this.getView().addEventDelegate({
    onBeforeShow: function(oEv) {
      var detailBindingPath = oEv.data.path;
      // establish view2 bindings based on the selected binding path
      var oList = self.getView().byId("List");
      oList.bindItems(detailBindingPath +"/Bin", <YOUR_TEMPLATE>, null, [
        new sap.ui.model.Filter("Lgnum", sap.ui.model.FilterOperator.EQ, 'XXX'),
        new sap.ui.model.Filter("Matnr", sap.ui.model.FilterOperator.EQ, 'XXXXXX'),
        new sap.ui.model.Filter("Werks", sap.ui.model.FilterOperator.EQ, 'XXXX') 
      ]);
    }
  });
}
onInit:function(){
var self=这个;
此.getView().addEventDelegate({
onBeforeShow:功能(oEv){
var detailBindingPath=oEv.data.path;
//基于选定的绑定路径建立view2绑定
var oList=self.getView().byId(“列表”);
oList.bindItems(detailBindingPath+“/Bin”,null[
新的sap.ui.model.Filter(“Lgnum”,sap.ui.model.FilterOperator.EQ,“XXX”),
新的sap.ui.model.Filter(“Matnr”,sap.ui.model.FilterOperator.EQ,“XXXXXX”),
新的sap.ui.model.Filter(“Werks”,sap.ui.model.FilterOperator.EQ,“XXXX”)
]);
}
});
}
您必须在代码中建立绑定,因为在视图创建期间您不知道绑定路径

希望我得到了你想要做的。没有运行代码,所以如果遇到问题,请告诉我


克里斯

谢谢克里斯。我遵循了您列出的步骤。但是,我同意您的方法,在View2.controller.js onBeforeShow中。。。我没有获取detailBindingPath(在调试中不可用),并且在var oList xxxxx行中没有“UncaughtTypeError:undefined不是函数”。不知道我是否错过了什么。我尝试了另一种方式来获得价值。。。似乎没有一个起作用。再次感谢您的帮助。我在回答中稍微修改了onInit。您必须将“this”放入匿名函数上下文(var self=this;)。oEv看起来怎么样?谢谢Chris,我用oEv让这个部件工作起来了。我现在在绑定中,谢谢你的帮助。你好,克里斯,在这里添加更多。。。在我的例子中,我使用第1页作为产品列表,第2页作为基于第1页上选择的产品的存储箱列表,然后取出所有的存储箱。所以您的beforeshow oList.bindItems需要更多建议。。。我必须使用url/Bin?$过滤器使其工作。对于列表项=??,您建议在我的xml视图中放置什么???我是放进垃圾箱还是空的或其他东西。。。这似乎是我的最后一个街区。再次感谢,需要添加一行遗漏。。。在调试该bindItem时,它发出错误=>Uncaught错误:元素sap.m.List#Bin--List!的聚合项缺少模板或工厂函数。。我的代码如下(目前为硬代码)oList.bindItems(“/Bin?$filter=Lgnum eq'XXX'和Matnr eq'XXXXXX'和Werks eq'XXXX'”);你好,克里斯,谢谢。
onInit : function() {
  var self = this;
  this.getView().addEventDelegate({
    onBeforeShow: function(oEv) {
      var detailBindingPath = oEv.data.path;
      // establish view2 bindings based on the selected binding path
      var oList = self.getView().byId("List");
      oList.bindItems(detailBindingPath +"/Bin", <YOUR_TEMPLATE>, null, [
        new sap.ui.model.Filter("Lgnum", sap.ui.model.FilterOperator.EQ, 'XXX'),
        new sap.ui.model.Filter("Matnr", sap.ui.model.FilterOperator.EQ, 'XXXXXX'),
        new sap.ui.model.Filter("Werks", sap.ui.model.FilterOperator.EQ, 'XXXX') 
      ]);
    }
  });
}