2017-06-15 54 views
0

我們正在創建Master Details UI5應用程序。我打電話給OData服務,並能夠顯示來自主列表中設置的實體的數據。在細節部分,我們正在創建一個表單,並且我想要顯示來自導航實體集的數據。當我開始知道我們不能在一次調用中調用導航實體集時,該如何完成?如何從OData服務的導航屬性獲取數據

<EntityType Name="Product" sap:content-version="1"> 
    <Key> 
     <PropertyRef Name="ProductID"/> 
    </Key> 
    <Property Name="ProductID" Type="Edm.String" Nullable="false" MaxLength="10" sap:label="Product ID" sap:updatable="false"/> 
    <Property Name="TypeCode" Type="Edm.String" Nullable="false" MaxLength="2" sap:label="Type Code"/> 
    <NavigationProperty Name="ToSalesOrderLineItems" Relationship="GWSAMPLE_BASIC.Assoc_Product_SalesOrderLineItems" FromRole="FromRole_Assoc_Product_SalesOrderLineItems" ToRole="ToRole_Assoc_Product_SalesOrderLineItems"/> 
    <NavigationProperty Name="ToSupplier" Relationship="GWSAMPLE_BASIC.Assoc_BusinessPartner_Products" FromRole="ToRole_Assoc_BusinessPartner_Products" ToRole="FromRole_Assoc_BusinessPartner_Products"/> 
</EntityType> 

我想顯示的數據爲ToSupplier

回答

2

那麼,你可以在一個請求實際上得到它。

比方說,你的「業務夥伴」實體有一個名稱字段,要顯示這樣的事情:

<Panel> 
    <Text id="txtProductID" text="Product ID Comes Here"/> 
    <Text id="txtSupplierName" text="Supplier BP Name Comes Here"/> 
</Panel> 

你可以做什麼,是使用常規的綁定語法(相對綁定),如它通常是在細節的意見進行:

<Panel> 
    <Text id="txtProductID" text="{ProductID}"/> 
    <Text id="txtSupplierName" text="{ToSupplier/Name}"/> 
</Panel> 

如果您想直接嘗試這個,你就不會得到在「供應商名稱」文本控制任何東西。這是因爲,默認情況下,您並未要求ToSupplier導航爲擴展(請檢查OData Spec中的章節4.6)。

您應該在詳細視圖中調用bindElement(在默認模板中,這是通過詳細控制器的_bindView方法完成的)。展開可以作爲參數傳遞給the binding本身就像這樣:

oView.bindElement({ 
    path: sMyPathToAProduct, 
    parameters: { 
     expand: "ToSupplier" 
    } 
}); 

可以展開儘可能多的導航,你喜歡和深,只要你喜歡(你可以通過導航作爲一個逗號在參數分隔列表)。這裏唯一的約束是你的後端應該支持擴展/可能會對擴展的深度有一些限制。

+0

另一個問題:如果我想從我的主控制器中的ToSupplier中獲取值並希望在控制檯中打印這些值? –

+0

您有兩種選擇:擴展主列表的所有項目的ToSupplier導航(您可以直接在XML中執行此操作,當您綁定項目時,例如'items =「{path:'/ ProductSet ',參數:{expand:'ToSupplier'}}「')。然後,您可以從項目的綁定上下文中獲取數據本身。或者,您可以在需要數據時進行程序化讀取(查看[ODataModel#read](https://openui5.hana.ondemand.com/#docs/api/symbols/sap.ui.model.odata.v2。 ODataModel.html#讀))。 –

相關問題