【问题标题】:SAP UI5 Search - Binding to XML-ViewSAP UI5 搜索 - 绑定到 XML 视图
【发布时间】:2017-10-10 05:48:09
【问题描述】:

我正在尝试构建一个 SAPUI5 应用程序来显示我公司的当前传输。作为数据源,我们使用 manifest.json 中引用的 SAP 后端服务。

我的 metadata.xml:

<EntityType Name="Transporteintrag" sap:content-version="1">
   <Key>
       <PropertyRef Name="Id"/>
   </Key>
   <Property Name="Id" Type="Edm.Int32" Nullable="false" sap:label="Zahl" sap:creatable="false" sap:updatable="false"/>
   <Property Name="Land" Type="Edm.String" Nullable="false" MaxLength="3" sap:label="Land" sap:creatable="false" sap:updatable="false"/>
   <Property Name="Kunnr" Type="Edm.String" Nullable="false" MaxLength="10" sap:label="Warenempfänger" sap:creatable="false" sap:updatable="false"/>
   <Property Name="Name1" Type="Edm.String" Nullable="false" MaxLength="30" sap:label="Name 1" sap:creatable="false" sap:updatable="false"/>
   <Property Name="AnzMat" Type="Edm.Int32" Nullable="false" sap:label="Zahl" sap:creatable="false" sap:updatable="false"/>
   <Property Name="Gesber" Type="Edm.String" Nullable="false" MaxLength="10" sap:label="Characterfeld der Länge 10" sap:creatable="false" sap:updatable="false"/>
   <Property Name="Tknum" Type="Edm.String" Nullable="false" MaxLength="10" sap:label="Transportnummer" sap:creatable="false" sap:updatable="false"/>
</EntityType>
<EntityContainer Name="ZVERSAND_SRV_Entities" m:IsDefaultEntityContainer="true" sap:supported-formats="atom json xlsx">
    <EntitySet Name="Transporteintrag_S" EntityType="ZVERSAND_SRV.Transporteintrag" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:searchable="true" sap:content-version="1"/>
    <EntitySet Name="Transporteintrag_T" EntityType="ZVERSAND_SRV.Transporteintrag" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:searchable="true" sap:content-version="1"/>
    <EntitySet Name="Transporteintrag_F" EntityType="ZVERSAND_SRV.Transporteintrag" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:searchable="true" sap:content-version="1"/>
    <EntitySet Name="Transporteintrag_D" EntityType="ZVERSAND_SRV.Transporteintrag" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:searchable="true" sap:content-version="1"/>
</EntityContainer>

我通过使用 XML 和数据绑定来连接我的模型来构建视图。

Page1.view.xml

<SearchField xmlns="sap.m" width="100%" placeholder="Suchen" id="__field0" liveChange="handleLiveSearch"/>

<Table id="Table_0_0" width="100%" noDataText="Das ist jetzt doof ..." mode="None" showSeparators="All" growing="true" growingThreshold="5000" growingScrollToLoad="true" items="{/Transporteintrag_D}">
<columns>
    <Column hAlign="Left" vAlign="Top" minScreenWidth="Phone" demandPopin="true" popinDisplay="Inline" mergeDuplicates="false">
        <header>
            <Text text="WE" width="auto" maxLines="2" wrapping="true" textAlign="Begin" textDirection="Inherit" class="custom_font_table"/>
        </header>
        <footer/>
    </Column>
</columns>
<items>
    <ColumnListItem type="Active">
        <cells>
            <Text text="{= ${Name1}.substr(0,30)}" width="auto" maxLines="1" wrapping="false" textAlign="Begin" textDirection="Inherit" class="custom_font_table row_height"/>
        </cells>
    </ColumnListItem>
</items>
<headerToolbar>
    <core:Fragment xmlns:core="sap.ui.core" fragmentName="Versand_Clean.view.TableHeaderFragment" type="XML" id="__toolbar_X0"/>
</headerToolbar>
</Table>

DataBinding 工作正常。但是,当在浏览器中打开应用程序时,所有数据都显示在我的sap.m.table 中。

为了给最终用户更多的可用性,我正在尝试实现一个实时搜索字段。

这是我的问题: 我正在我的 Page1.controller.js 中构建 liveChange 函数

handleLiveSearch: function (oEvent) {
   var searchQuery = oEvent.getSource().getValue();
   var oFilter = [new sap.ui.model.Filter("WE", sap.ui.model.FilterOperator.Contains, searchQuery)];
   var oView = this.getView();
   var oTable = oView.byId("Table_0_0");
   var oBinding = oTable.getBinding("items");
   if(searchQuery === "")
   {
       oBinding.filter( [] );
       oBinding.refresh(true);
   }
   else
   {
       oBinding.filter(oFilter);
       oBinding.refresh(true);
   }
}

我的问题是在 searchField 中输入的。输入第一个字符后,我的表不显示任何数据。当我清空搜索字段时,我的数据会再次显示。

我的代码有什么问题?

编辑: 为了检查过滤器是否应用于表格,我打开了 Google Chrome 开发者工具和标签源。现在我能够看到过滤器应用于表格。但是表仍然没有更新值。

表中目前有 3 个值。只有一个包含“Delphi”。

【问题讨论】:

    标签: javascript jquery xml sapui5


    【解决方案1】:

    问题在于过滤您尝试的属性在元数据中不存在。

     var oFilter = [new sap.ui.model.Filter("WE", sap.ui.model.FilterOperator.Contains, searchQuery)];
    

    WE 更改为 Name1

    var oFilter = [new sap.ui.model.Filter("Name1", sap.ui.model.FilterOperator.Contains, searchQuery)];
    

    【讨论】:

    • 我已经尝试过这个解决方案。但搜索功能仍然无法正常工作。我的表打字后和以前一样。没有任何变化。
    【解决方案2】:

    除了萨达姆侯赛因的编辑之外,它还必须是:

    oBinding.filter(oFilter, sap.ui.model.FilterType.Application);
    

    【讨论】:

    • 他的回答没有任何改变。我编辑了我的帖子。如您所见,过滤器已应用于 oTable。但是浏览器中的表格仍然没有更新。
    【解决方案3】:

    这里的问题是包含运算符。此运算符在 SAP 的 OData 实施中无法正常工作。当您创建这样的过滤器时,您可以使用一个小技巧并应用tolower 函数:

    var searchQuery = searchQuery.toLowerCase();
    // this step is important for the OData query
    searchQuery = "'" + searchQuery + "'"; 
    var filter = new sap.ui.model.Filter("tolower(Name1)", sap.ui.model.FilterOperator.Contains, searchQuery);
    var oFilter = [ filter ];
    

    另一方面,您可以使用另一个比较运算符,例如 EQ,但您的搜索字符串必须完全匹配:

    var oFilter = [new sap.ui.model.Filter("Name1", sap.ui.model.FilterOperator.EQ, searchQuery)];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 2020-11-20
      相关资源
      最近更新 更多