我们正在创建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
的数据。
答案 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"
}
});
您可以根据需要随意扩展任意数量的导航(您可以将导航作为逗号分隔列表传递给该参数)。这里唯一的限制是你的后端应该支持扩展/可能对扩展的深度有一些限制。