首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与$expand的OData绑定

与$expand的OData绑定
EN

Stack Overflow用户
提问于 2015-05-29 04:07:13
回答 1查看 19.9K关注 0票数 3

我们必须将一个OData url绑定到ui5的ODataModel

https://sapes1.sapdevcenter.com/sap/opu/odata/sap/ZCD204_EPM_DEMO_SRV/BusinessPartners('0100000000')/SalesOrders/?$expand=SalesOrderItems

我们能够绑定属于每个SalesOrder的根级项。然而,在将数据从SalesOrderItems绑定到SalesOrder时,我们遇到了问题。

我们无法将SalesOrderItems的字段绑定到我们的任何对象。我们尝试过使用{SalesOrderItems/results/QuantityUnit}{SalesOrderItems/QuantityUnit},但没有太多运气。

你能推荐一些替代方案吗?

在SalesOrder和SalesOrderItem之间有一个1..m基数

代码语言:javascript
复制
// model of oData

var model = sap.ui.model.odata.ODataModel("proxy/https/sapes1.sapdevcenter.com/sap/opu/odata/sap/ZCD204_EPM_DEMO_SRV/",true,'username','password');
//app is defined in index.html here we are setting model to the app.

App.setModel(model);

// create a table

var pastOrder_S3= new sap.m.Table("PastOrder_S3",{
            inset:true,
            //visibleRowCount: 2,
            firstVisibleRow: 2,
            fixedColumnCount: 2,
            columns:[
                     new sap.m.Column({
                         header:new sap.m.Label("item").setText("Items"),
                         hAlign:"Left",
                         width:"20px",
                         demandPopin:true,
                         popinDisplay:"Block",
                         minScreenWidth: sap.m.ScreenSize.Medium
                     }),
                     new sap.m.Column({
                         header:new sap.m.Label("orderdetail").setText("OrderDetails"),
                         hAlign:"Left",
                         width:"200px",
                         demandPopin:true,
                         popinDisplay:"Block",
                         minScreenWidth: sap.m.ScreenSize.Medium
                     })
});

//create a template to bind into the table using model.

var oTemplate_S3= new sap.m.ColumnListItem({
        type: sap.m.ListType.Active,
        cells: [

        new sap.m.Text({
        text:"{ProductName} \n {ProductID}"
                }),    

           new sap.m.Text({
                text:"OrderId: {SalesOrderID} \n {DeliveryDate} \n {TotalSum}{Currency}"
                })             
             ]
    });
代码语言:javascript
复制
// bind into the table.
`pastOrder_S3.bindAggregation("items","BusinessPartners('BusinessPartnerId')/SalesOrders/?$expand=SalesOrderItems",oTemplate_S3);`

这里我们有一个名为' salesorderitems‘的子属性,我们需要读取salesorderitems中的属性。

EN

回答 1

Stack Overflow用户

发布于 2017-04-23 15:24:29

将聚合绑定到OData集合时,必须单独给出expand参数(以及任何其他参数),而不是集合URI的一部分。

简而言之,您必须执行以下操作:

代码语言:javascript
复制
oTable.bindAggregation("items", {
    path: "/BusinessPartners('BusinessPartnerId')/SalesOrders",
    template: oTemplate,
    parameters: {
       expand: "SalesOrderItems"
    }
});

有关更多详细信息,请查看bindAggregationODataListBinding constructor文档。

您将面临的另一个问题是在SaleOrder和SaleOrderItems之间存在这种1:n基数。这意味着您只能使用此导航属性来绑定聚合,而不能直接绑定属性(因此,您需要在另一个表中包含类似于表的内容)。

你必须清楚地定义应该从SaleOrderItems中显示什么才能“扁平化”它(例如,做一个聚合,或者选择第一个,等等)。这很可能意味着必须在OData服务中进行更改,或者您必须使用UI5或JSONModel中的自定义控件,而不是/与OData控件一起使用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30516153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档