SAPUI5 - FilterOperator.Contains无法正常工作

时间:2016-04-01 10:25:27

标签: sap sapui5

我有一个包含网站信息的模型。

如果我在“SearchString”的开头搜索(使用FilterOperator.Contains),输入列表就可以正常填充,但如果我搜索不在字符串开头的字符串,则不会返回任何内容

例如... SearchString =“100 My Town”

'100'的条目有效。 “我的”条目不是!

也没有显示错误。

控制器:

handleSuggest: function (oEvent) {
    var sTerm = oEvent.getParameter("suggestValue");
    var aFilters = [];
    if (sTerm) {
         aFilters.push(new Filter("SearchString", sap.ui.model.FilterOperator.Contains, sTerm ));
    }

    oEvent.getSource().getBinding("suggestionItems").filter(aFilters);

},

查看:

<Input              
                    id="shopInput"
                    type="Text"
                    placeholder="Enter Shop Number ..."
                    showSuggestion="true"
                    suggest="handleSuggest"    
                    suggestionItems="{/SiteSet}"
                    change="validateInput"
                    liveChange="liveChange"
                    valueStateText="Shop Number must be valid"
                    suggestionItemSelected="suggestionItemSelected">
                    <suggestionItems>
                        <core:Item text="{SearchString}" />
                    </suggestionItems>

任何想法?

3 个答案:

答案 0 :(得分:1)

我现在在https://sapui5.netweaver.ondemand.com/sdk/explored.html#/entity/sap.m.Input/samples

的input.suggestions.custom部分找到了解决方案。
handleSuggest : function(oEvent) {
  var view = this.getView();
  var sTerm = oEvent.getParameter("suggestValue")
  view.byId("shopInput").setFilterFunction(function(sTerm, oItem) {
 // A case-insensitive 'string contains' style filter
     return oItem.getText().match(new RegExp(sTerm, "i"));
 });

},

答案 1 :(得分:0)

据我所知,您缺少在Suggestion项目中设置ID,这使您可以搜索它?您的过滤器在SiteId上运行,但您的Suggestion项目仅绑定到SearchString。

这应该有所帮助:

<suggestionItems>
      <core:Item key="{SiteId}" text="{SearchString}" />
</suggestionItems>

答案 2 :(得分:0)

我还有另一个与FilterOperator有关的问题。

我的情况涉及:

  • oData V2
  • 使用Olingo的后端Java
  • Apache前端

我将这个过滤器放入了控制器:

aFilter.push(new Filter("description", FilterOperator.Contains, `'${fDescription}'`));

但是过滤器不起作用。

然后,我对问题进行了调查并确定了FilterOperator。其中包含的内容在SAPUI5框架中并未正确建立查询参数。

因为ODataUtils._createFilterSegment函数上的src / sap / ui / model / odata / ODataUtils.js包不包含后缀“ eq true”:

case "Contains":
        return "substringof(" + oValue1 + "," + sPath + ")";

在odata.org(https://www.odata.org/documentation/odata-version-2-0/uri-conventions/)中搜索并符合样本:

$filter=substringof('Alfreds', CompanyName) eq true

要解决此问题,我已通过以下方式将控制器更改为使用FilterOperator.EQ:

aFilter.push(new Filter(`substringof('${fDescription}',description)`, FilterOperator.EQ, true));