2017-04-06 2 views
0

Ich habe eine Tabelle mit mehreren Spalten und auch eine Suchleiste an der Spitze, die die folgende Funktion ausführt. Ich dachte, dass angesichts des unten stehenden Codes nur die Spalte "field1" gesucht würde, aber wenn ich nach einem Begriff in einer anderen Spalte suche, wird er angezeigt. Jetzt ist mein Problem, dass ich eine neue Spalte hinzufügen möchte, die ich zu dieser Suche hinzufügen möchte. Ich versuche Zugabe zu dem filters Array wie dieseFiltertabelle überprüft mehrere Spalten

new filter("fieldIWant",FilterOperator.Contains,sValue)

aber es wird nicht funktionieren. Ich habe die Spalte unsichtbar gemacht, weil ich nicht möchte, dass sie auf dem Tisch angezeigt wird, aber ich möchte, dass sie immer noch durchsucht werden kann. Ich denke, meine erste Frage ist, warum die Suchleiste für mehrere Felder funktioniert, wenn ich nur "field1" angegeben habe.

onSearchPressed : function() { 
    var sValue = this.byId("searchField").getValue(); 
    var aFilters = []; 

    var filters = [new Filter("field1","EQ",sValue)]; 
    aFilters = filters; 
    var oFilter = new Filter({aFilters : filters}); 
    if (!aFilters) { 
     aFilters = []; 
    } 
    this._aSearchFilters = aFilters; 
    if (this._aSelectFilters) { 
     aFilters = aFilters.concat(this._aSelectFilters); 
    } 
    if (this._aQuickFilters) { 
     aFilters =aFilters.concat(this._aQuickFilters); 
    } 

    var oBinding = this.byId("catalogTable").getBinding("items"); 
    oBinding.filter(aFilters); 
}, 

HINWEIS: Das war prewritten Code und ist nicht von mir, so will ich keine großen Änderungen vornehmen, sondern verstehen, warum es funktioniert, wie es der Fall ist. _aSelectFilters und _aQuickFilters enthalten keine Suche nach Spalten, sie sind für etwas anderes.

Antwort

1

Möglicherweise möchten Sie Ihre Metadatendatei überprüfen; sieh dir den Saft an: filterbares Etikett. Wenn es auf "false" gesetzt ist und Sie immer noch filtern können, müssen Sie das Backend überprüfen. Wenn sie auf "True" gesetzt sind, funktioniert die Art und Weise, wie Sie es mit mehreren new Filter(...) getan haben, gut.

0

Hope this helfen Ihnen

onSearchPressed : function() { 
var sValue = this.byId("searchField").getValue(); 
var  aFilters = []; 
var searchFilter1 = new  sap.ui.model.Filter("key_of_column1",sap.ui.model.FilterOperator.Contains, sValue); 
var searchFilter2 = new sap.ui.model.Filter("key_of_column2",sap.ui.model.FilterOperator.Contains, sValue); 
var searchFilter3 = new sap.ui.model.Filter("key_of_column3",sap.ui.model.FilterOperator.Contains, sValue); 
//Add as many columns you have 
aFilters.push(searchFilter1); 
aFilters.push(searchFilter2); 
aFilters.push(searchFilter3); 

var table = this.byId("catalogTable"); 
     table.getBinding("items").filter(aFilters); 
+0

Das habe ich gemacht, anstatt zu pushen habe ich nur die Filter im Array 'filters' verkettet. Dies erklärt auch nicht, warum ich Filter für mehrere Spalten erhalte: – SAPUI5GUY