绑定OData子集合无法正常工作

时间:2017-02-17 08:17:11

标签: binding odata aggregation sapui5

给出以下数据源(OData V2): 类型:客户,项目,客户拥有项目集合 所以/Customer为我提供了一份客户列表, 相似/Project 并且/Customer(guid'xxxx')/Project向我提供了与客户相关的项目列表。

现在,鉴于/Customer上的视图(列表)正在向我展示客户。设置路由,以便选择单个客户移动到单独的CustomerDetail视图,该视图显示客户及其项目集合的详细信息。客户的详细信息显示完美,每个项目也获得一行,但是,名称,描述等项目字段未显示在列表中。进一步调查,单击列表项,从而调用事件处理程序,向我显示列表项具有BindingPath /[object Object],这不是我所期望的。

/Project上的列表绑定工作正常但显示所有项目,而不仅仅是客户的项目。

为了使事情变得更复杂,当我通过对话框向列表添加新项目(从而在OData模型上执行创建)时,我可以看到服务器有一个往返,并且OPENUI5正在重新查询项目(使用'/ Customer(guid'xxxx')/ Project instead of the initial query with / Customer(guid'xxxx')?$ expand = Project`。然后,列表完全填充!请注意,所有的时间,有我的绑定没有变化,这纯粹是OPENUI5的内部魔法。

odata源提供如下:

{
    "d" : {
        "__metadata" : {
            "id" : "http://BASEADDR/Data.svc/Customer(guid'XXX')",
            "uri" : "http://BASEADDR/Data.svc/Customer(guid'XXX')",
            "type" : "CNTM.Customer"
        },
        "Project" : [{
                "__metadata" : {
                    "id" : "http://BASEADDR/Data.svc/Project(guid'XXX')",
                    "uri" : "http://BASEADDR/Data.svc/Project(guid'XXX')",
                    "type" : "CNTM.Project"
                },
                "Id" : "XXX",
                "CustomerId" : "XXX",
                "Name" : "Noch eins",
                "Description" : "",
                "IsDeleted" : false
            }, ...
        ],
        "Id" : "XXX",
        "Name" : "TEST",
        "IsDeleted" : false
    }
}

客户包括多个项目的项目收集。

XML视图上的绑定是: <Table items="{Project}">

该项目的事件处理程序是:

onProjectItemPress: function (oEvent) {
  var oItem = oEvent.getSource();
  var oCtx = oItem.getBindingContext();
  var gId = oCtx.getProperty("Id");

  this.getRouter().navTo("project", {
    projectId: gId
  });
}

,控制台中的结果是

oCtx : constructor {oModel: constructor, sPath: "/[object Object]"}

我一直在其他项目中使用这种绑定方法,但这个相当简单的样本真的很奇怪......任何想法?

谢谢,问候

JörgFischer

0 个答案:

没有答案