2017-02-24 23 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