如何从OData服务的导航属性中获取数据

问题描述 投票:0回答:1

我们正在创建Master Details UI5应用程序。我正在调用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的数据。

odata sapui5
1个回答
2
投票

好吧,你可以在一个请求中实际获得它。

假设您的“BusinessPartner”实体有一个名称字段,您希望显示如下内容:

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

您可以根据需要随意扩展任意数量的导航(您可以在该参数中将导航作为逗号分隔列表进行传递)。这里唯一的限制是你的后端应该支持扩展/可能对扩展的深度有一些限制。

© www.soinside.com 2019 - 2024. All rights reserved.