UI5 OData将多个实体绑定到sap.m.Table

时间:2016-01-21 13:38:29

标签: xml odata sapui5

我正在使用Northwind数据库测试UI5应用程序。我想把两个实体放在一起(ProductsSuppliers)。我想在表格中显示每种产品的供应商。

我已设法使用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>

2 个答案:

答案 0 :(得分:0)

首先,扩展完整的Supplier实体没有任何问题。它不应该对响应的大小/加载时间产生巨大影响。

事实上,如果您打开 Chrome开发工具并跟踪当前请求和我的解决方案的时间,两次都会非常相似(没有选择会更快)

enter image description here

enter image description here

比较响应的大小肯定会有所不同。

  • 如果没有$ select,您会获得Content-Length:2547
  • 使用$ select,您获得Content-Length:836(所以只有三分之一)

请注意,该单元是字节!所以这两个请求仍然很小。

但回答你的问题:从理论上讲,$select运算符与嵌套网址相结合可以为你提供帮助。

但是,请记住在OData v4中添加的嵌套URL。

这是为您提供所需结果的网址

http://services.odata.org/V4/Northwind/Northwind.svc/Products?$select=ProductName,UnitPrice&$expand=Supplier($select=CompanyName)

您可以看到我在主要实体(产品)上应用了$select。如果您想要Products中的所有媒体资源,只需要CompanyName的{​​{1}},只需将父级Suppliers更改为$select

http://services.odata.org/V4/Northwind/Northwind.svc/Products?$select=*&$expand=Supplier($select=CompanyName)

答案 1 :(得分:0)

你需要做两件事:

<强> 1。设置参数:

 items="{
   path: '/Products',
   parameters:{expand : 'Supplier'}
   sorter: {
            path: 'ProductName',
            descending: false
           }
 }"

<强> 2。绑定Navigation属性以获取属性

<Text text="{Supplier/CompanyName}"/>
  

请注意,您有供应商错误,因为Supplier是   导航财产

PS:它非常详细&amp;来自Marc

的有用见解