在多个字段上使用"OR"和"AND"条件进行过滤

Min*_*Min 2 sapui5

我想实现下面的地方条件.如何在UI5中创建过滤器?

field-A NE 'O' and ( field-B contains 'search-text' or field-C contains 'search-text' )

后端业务场景:

  1. field-A NE 'O'绑定列表时应用过滤器.
  2. 应用过滤器( field-B contains 'search-text' or field-C contains 'search-text' )以在搜索字段上实现搜索功能.

过滤实例:

new sap.ui.model.Filter("field-A", sap.ui.model.FilterOperator.NE, "O");
new sap.ui.model.Filter("field-B", sap.ui.model.FilterOperator.contains, search-text);
new sap.ui.model.Filter("field-C", sap.ui.model.FilterOperator.contains, search-text);
Run Code Online (Sandbox Code Playgroud)

Bog*_*ann 9

以下是使用Northwind的OData组合多个过滤器的最小示例:https://embed.plnkr.co/AoIZI4/.完整列表可以在这里找到.

当实例化的过滤器,来代替path,operator以及value1,使用属性filtersand如图所示的多个过滤器组合API参考.

在我们的例子中,我们定义了三个过滤器

  • 一个用于第一个Filter也用于上面的Plunker示例中的初始绑定(过滤器1)
  • 而对于其他两个在搜索事件处理程序中的field-A NE 'O'含义and: false(过滤器2).

过滤器1:

getInitialFilter: function() {
  return new Filter("Field-A", FilterOperator.NE, "O");
},
Run Code Online (Sandbox Code Playgroud)

过滤器2:

getSearchFilters: function(query) {
  return new Filter({
    filters: [
      new Filter("Field-B", FilterOperator.Contains, query),
      new Filter("Field-C", FilterOperator.Contains, query),
    ],
    and: false,
  });
},
Run Code Online (Sandbox Code Playgroud)

最后,当用户输入搜索查询时,我们将这两个过滤器与OR应用于ODataListBinding相结合.

onSearch: function(event) {
  this.byId("myList").getBinding("items").filter(new Filter({
    filters: [
      this.getInitialFilter(),
      this.getSearchFilters(event.getParameter("query")),
    ],
    and: true,
  }), FilterType.Application);
},
Run Code Online (Sandbox Code Playgroud)