我正在使用Northwind数据库测试UI5应用程序。我想把两个实体放在一起(Products
和Suppliers
)。我想在表格中显示每种产品的供应商。
我已设法使用parameters:{expand : 'Supplier'}
的{{1}}参数中的items
使其工作,但这会带回每个字段的所有数据。
因此它会返回类似于以下内容的内容(前两列从sap.m.Table
拉出,最后一列从/Products
拉出:
/Supplier
目前我的路径设置为:
ProductName UnitPrice SupplierName
Bread 10 Big Bread Co
我尝试使用以下方式访问供应商公司名称:
items="{
path: '/Products',
sorter: {
path: 'ProductName',
descending: false
}
}"
然而,我可以理解为什么这不起作用,但我无法弄清楚如何让它发挥作用。
感谢您的帮助。
请看下面我尝试过的内容:
<Text text="{Suppliers/CompanyName}"/>
产品:
<Table
id="table"
width="auto"
class="sapUiResponsiveMargin"
items="{
path: '/Products',
sorter: {
path: 'ProductName',
descending: false
}
}"
noDataText="{worklistView>/tableNoDataText}"
busyIndicatorDelay="{worklistView>/tableBusyDelay}"
growing="true"
growingScrollToLoad="true"
updateFinished="onUpdateFinished">
<!-- parameters:{expand : 'Category'}, -->
<headerToolbar>
<Toolbar id="toolbar">
<Title id="tableHeader" text="{worklistView>/worklistTableTitle}" />
<ToolbarSpacer />
<SearchField id="searchField" tooltip="{i18n>worklistSearchTooltip}" search="onSearch" width="auto" />
</Toolbar>
</headerToolbar>
<columns>
<Column id="nameColumn">
<Text text="{i18n>tableNameColumnTitle}" id="nameColumnTitle" />
</Column>
<Column id="unitNumberColumn" hAlign="End">
<Text text="{i18n>tableUnitNumberColumnTitle}" id="unitNumberColumnTitle" />
</Column>
<Column>
<Text text="SupplierName" id="SupplierName" />
</Column>
</columns>
<items>
<ColumnListItem type="Navigation" press="onPress">
<cells>
<ObjectIdentifier title="{ProductName}" />
<ObjectNumber number="{ path: 'UnitPrice', formatter: '.formatter.numberUnit' }" />
<Text text="{Suppliers/CompanyName}" />
</cells>
</ColumnListItem>
</items>
</Table>
供应商:
<EntityType Name="Product">
<Key>
<PropertyRef Name="ProductID" />
</Key>
<Property xmlns:p6="http://schemas.microsoft.com/ado/2009/02/edm/annotation" Name="ProductID" Type="Edm.Int32" Nullable="false" p6:StoreGeneratedPattern="Identity" />
<Property Name="ProductName" Type="Edm.String" Nullable="false" MaxLength="40" FixedLength="false" Unicode="true" />
<Property Name="SupplierID" Type="Edm.Int32" />
<Property Name="CategoryID" Type="Edm.Int32" />
<Property Name="QuantityPerUnit" Type="Edm.String" MaxLength="20" FixedLength="false" Unicode="true" />
<Property Name="UnitPrice" Type="Edm.Decimal" Precision="19" Scale="4" />
<Property Name="UnitsInStock" Type="Edm.Int16" />
<Property Name="UnitsOnOrder" Type="Edm.Int16" />
<Property Name="ReorderLevel" Type="Edm.Int16" />
<Property Name="Discontinued" Type="Edm.Boolean" Nullable="false" />
<NavigationProperty Name="Category" Relationship="NorthwindModel.FK_Products_Categories" ToRole="Categories" FromRole="Products" />
<NavigationProperty Name="Order_Details" Relationship="NorthwindModel.FK_Order_Details_Products" ToRole="Order_Details" FromRole="Products" />
<NavigationProperty Name="Supplier" Relationship="NorthwindModel.FK_Products_Suppliers" ToRole="Suppliers" FromRole="Products" />
</EntityType>
答案 0 :(得分:0)
首先,扩展完整的Supplier
实体没有任何问题。它不应该对响应的大小/加载时间产生巨大影响。
事实上,如果您打开 Chrome开发工具并跟踪当前请求和我的解决方案的时间,两次都会非常相似(没有选择会更快)
比较响应的大小肯定会有所不同。
Content-Length:2547
Content-Length:836
(所以只有三分之一)请注意,该单元是字节!所以这两个请求仍然很小。
但回答你的问题:从理论上讲,$select
运算符与嵌套网址相结合可以为你提供帮助。
但是,请记住在OData v4中添加的嵌套URL。
这是为您提供所需结果的网址
您可以看到我在主要实体(产品)上应用了$select
。如果您想要Products
中的所有媒体资源,只需要CompanyName
的{{1}},只需将父级Suppliers
更改为$select
答案 1 :(得分:0)
你需要做两件事:
<强> 1。设置参数:
items="{
path: '/Products',
parameters:{expand : 'Supplier'}
sorter: {
path: 'ProductName',
descending: false
}
}"
<强> 2。绑定Navigation属性以获取属性
<Text text="{Supplier/CompanyName}"/>
PS:它非常详细&amp;来自Marc 的有用见解请注意,您有供应商错误,因为
Supplier
是 导航财产