2017-02-24 70 views
2

我想执行下面的,其中条件。如何在UI5中创建过滤器?在多个字段上使用“或”和“AND”条件过滤

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); 

回答

2

这里是结合使用的OData从罗斯文多个过滤器的一个最小的例子:https://embed.plnkr.co/AoIZI4/。完整列表可以在here找到。

当实例化的过滤器,而不是pathoperator,并value1,使用属性filtersand如图中API reference到多个过滤器相结合。

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

  • 一个用于第一field-A NE 'O'其也用在初始结合在Plunker例如上述(滤波器1)
  • 而对于在其他两个具有and: false含义OR(过滤器2)的搜索事件处理程序。

过滤器1:

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

过滤器2:

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

最后,当用户输入搜索查询,我们结合这两个滤波器与and: true应用上ODataListBinding

onSearch: function(event) { 
    this.getList().getBinding("items").filter(new Filter({ 
    filters: [ 
     this.getInitialFilter(), 
     this.getSearchFilters(event.getParameter("query")) 
    ], 
    and: true 
    })); 
} 
+0

你好Boghyon,你有很大的帮助非常感谢。你的代码在这个例子中工作正常。但是,一旦我执行遵循你的步骤,它不起作用。是否因为我在视图中使用了结构?或者因为我的manifest.json是错误的?这里是显而易见的:请给我更多的提示,谢谢! – MinMin

+0

@MinMin对不起,我看不到你的清单。更好地提出一个新问题并彻底解释问题。你可能比从这里得到更快的帮助。 – boghyon

+1

最后我修复了它。这是因为我没有在DPC_EXT类中获取数据集方法中的三个过滤条件中的一个。感谢Boghyon给予的帮助。 – MinMin

1
var andFilter = []; 

var orFilter = []; 

orFilter.push(new sap.ui.model.Filter("title", sap.ui.model.FilterOperator.Equal, "filtervalue")); 

orFilter.push(new sap.ui.model.Filter("status", sap.ui.model.FilterOperator.Equal, "filtervalue")); 

andFilter.push(new sap.ui.model.Filter(orFilter, false)); 

orFilter = []; 

orFilter.push(new sap.ui.model.Filter("title", sap.ui.model.FilterOperator.Equal, "filtervalue1")); 

orFilter.push(new sap.ui.model.Filter("status", sap.ui.model.FilterOperator.Equal, "filtervalue1")); 

andFilter.push(new sap.ui.model.Filter(orFilter, false)); 

oBinding.filter(new sap.ui.model.Filter(andFilter, true)); 

那应该翻译为:

title=filtervalue || status=filtervalue && title=filtervalue1 || status=filtervalue1