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

时间:2017-06-15 07:16:12

标签: odata sapui5

我们正在创建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的数据。

1 个答案:

答案 0 :(得分:2)

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

让我们说你的&#34; BusinessPartner&#34; entity有一个名称字段,你想显示如下内容:

<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>

如果您直接尝试此操作,您将无法在&#34;供应商名称&#34;文本控制。这是因为,默认情况下,您不是要求ToSupplier导航展开(请参阅OData Spec中的第4.6章)。

您应该在详细视图上调用bindElement的地方执行此操作(在默认模板中,这是在详细控制器的_bindView方法中完成的)。展开可以作为参数传递给the binding本身,如下所示:

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

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