2015-05-28 37 views
2

我們有一個OData的網址綁定到UI5的ODataModel

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

我們能結合屬於根級別項目到每個SalesOrder。但是,如果綁定數據從SalesOrderItems這是一個孩子到SalesOrder的情況下,我們遇到問題。

我們無法將SalesOrderItems的字段綁定到我們的任何對象。我們嘗試使用{SalesOrderItems/results/QuantityUnit},{SalesOrderItems/QuantityUnit},但沒有多少運氣。

你可以請建議任何替代品嗎?

有SalesOrder和SalesOrderItem

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

// bind into the table. 
`pastOrder_S3.bindAggregation("items","BusinessPartners('BusinessPartnerId')/SalesOrders/?$expand=SalesOrderItems",oTemplate_S3);` 

之間。這裏1..M基數,我們有一個名爲 '的SalesOrderItems' 我們需要閱讀的SalesOrderItems內部性質的子屬性。

+0

請分享您用於設置OData模型的代碼。 – Timo

回答

6

將聚合綁定到OData集合時,expand參數(以及任何其他此參數的參數)必須單獨給出,而不是集合URI的一部分。

在簡單地說,你必須做到以下幾點:

oTable.bindAggregation("items", { 
    path: "/BusinessPartners('BusinessPartnerId')/SalesOrders", 
    template: oTemplate, 
    parameters: { 
     expand: "SalesOrderItems" 
    } 
}); 

時退房bindAggregation和更多細節ODataListBinding constructor文檔。

您將面臨的另一個問題是,您在SaleOrder和SaleOrderItems之間有1:n的基數。這意味着您將只能使用此導航屬性來綁定聚合,而不是直接綁定屬性(所以您需要在另一個表中有類似的表)。

您必須清楚地定義SaleOrderItems應顯示哪些內容以使其「展平」(例如進行聚合,或選擇第一個等)。這很可能意味着必須在OData服務中進行更改,否則您將不得不在UI5中使用自定義控件,或者使用JSONModel而不是/與OData一起使用。