我们正在创建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
的数据。
好吧,你可以在一个请求中实际获得它。
假设您的“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"
}
});
您可以根据需要随意扩展任意数量的导航(您可以在该参数中将导航作为逗号分隔列表进行传递)。这里唯一的限制是你的后端应该支持扩展/可能对扩展的深度有一些限制。