Sapui5 OData与$expand绑定

Sapui5 OData与$expand绑定,sapui5,netweaver,Sapui5,Netweaver,我们必须将ODataURL绑定到UI5的ODataModel ('0100000000')/SalesOrders/?$expand=SalesOrderItems 我们能够绑定属于每个SalesOrder的根级别项目。但是,如果将saleorderitems中的数据绑定到saleorder,我们就会遇到问题 我们无法将SalesOrderItems的字段绑定到任何对象。我们尝试使用{salesforderitems/results/QuantityUnit},{salesforderitems

我们必须将ODataURL绑定到UI5的ODataModel

('0100000000')/SalesOrders/?$expand=SalesOrderItems

我们能够绑定属于每个SalesOrder的根级别项目。但是,如果将
saleorderitems
中的数据绑定到
saleorder
,我们就会遇到问题

我们无法将SalesOrderItems的字段绑定到任何对象。我们尝试使用
{salesforderitems/results/QuantityUnit}
{salesforderitems/QuantityUnit}
,但运气不好

你能给我一些建议吗

SalesOrder和SalesOrderItem之间有1..m基数

// 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}"
                })             
             ]
    });


这里有一个名为“SalesOrderItems”的子属性,我们需要读取SalesOrderItems中的属性。

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

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

oTable.bindAggregation("items", {
    path: "/BusinessPartners('BusinessPartnerId')/SalesOrders",
    template: oTemplate,
    parameters: {
       expand: "SalesOrderItems"
    }
});
有关更多详细信息,请查看和文档

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


您必须明确定义SaleOrderItems中应显示的内容,以便能够“展平”它(例如,进行聚合,或选择第一个,等等)。这很可能意味着必须在OData服务中进行更改,或者您必须使用UI5中的自定义控件或JSONModel,而不是与OData一起使用。

请共享用于设置OData模型的代码。
oTable.bindAggregation("items", {
    path: "/BusinessPartners('BusinessPartnerId')/SalesOrders",
    template: oTemplate,
    parameters: {
       expand: "SalesOrderItems"
    }
});