web-dev-qa-db-fra.com

SAPUI5: Comment filtrer des données avec 2 ou plusieurs valeurs

J'essaie actuellement quelques trucs avec/dans SAPUI5 et j'ai implémenté une recherche très simple comme celle-ci:

    var filters = [];
    var query = evt.getParameter("query");
    if (query && query.length > 0) {
        var nameFilter = new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query);

        filters.Push(nameFilter);
    }

    var list = this.getView().byId("list");
    var binding = list.getBinding("items");
    binding.filter(filters);

Maintenant, j'ai le problème suivant: avec cette logique, je peux simplement chercher, ou plutôt filtrer, par le nom d'une personne. J'ai aussi quelques champs supplémentaires comme l'âge, le sexe, etc., et je souhaite également effectuer une recherche en fonction de l'âge ou du sexe. J'ai donc essayé de créer un deuxième filtre, comme "genderFilter", qui utilise le champ "genre". Après cela, ajoutez ce deuxième filtre avec la méthode .Push () aux filtres [] .. mais cela ne fonctionne pas.

J'ai déjà essayé de regarder la documentation, regardé différents exemples, essayé différentes manières - mais je suis impuissant. S'il vous plaît quelqu'un peut m'aider avec ce problème?

3
user3544563

Pour l'exigence, ce code fonctionnera.

var list = this.getView().byId("list");
var binding = list.getBinding("items");
if( !query ) {
    binding.filter( [] );
} 
else {
   binding.filter( [ new sap.ui.model.Filter([
      new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query ),
      new sap.ui.model.Filter("gender", sap.ui.model.FilterOperator.Contains, query )
   ],false)
]
6
Saddamhussain

J'ai réalisé ceci avec le code ci-dessous: -

var oFilter = new sap.ui.model.Filter("name",sap.ui.model.FilterOperator.Contains,searchString);
var oFilter1 = new sap.ui.model.Filter("ID",sap.ui.model.FilterOperator.Contains,searchString);
var comFil = new sap.ui.model.Filter([oFilter,oFilter1]);
var oList = sap.ui.getCore().byId("dealerList");
oList.getBinding("items").filter(comFil,sap.ui.model.FilterType.Application);
3
Deepak Sharma

Selon l'API

Pour le filtrage manuel, vous devez toujours passer le FilterType

Si vous changez votre code en

 list.getBinding("items").filter(filters, sap.ui.model.FilterType.Application);

ça devrait marcher.

Voir aussi https://openui5.hana.ondemand.com/docs/guide/BindingAggregations.html tout en bas.

3
Qualiture

J'espère avoir tout compris: voici comment filtrer plus d'une colonne lors de la liaison de données à une table:

oTable.bindRows({
    path : "/modelData",
    filters:  [new sap.ui.model.Filter("severity", sap.ui.model.FilterOperator.EQ, '2'),
               new sap.ui.model.Filter("severity", sap.ui.model.FilterOperator.EQ, '3')]  
});
1
Frank Provost

pour combiner plusieurs filtres, vous devez écrire le filtre de cette façon:

new sap.ui.model.Filter({
    filters: [
    new sap.ui.model.Filter(col1, , ,val),
    new sap.ui.model.Filter(col2, , ,val)
    ],
    and: false
})

Source: https://sapui5.hana.ondemand.com/docs/api/symbols/sap.ui.model.Filter.html#constructor

Ensuite, vous pouvez filtrer dans plusieurs colonnes avec OR.

1
isumi

Avoir un seul filtre dans le tableau filters pour chacun des critères et cela devrait fonctionner,

var filters = [];
var sFilter;
var query = evt.getParameter("query");
if (query && query.length > 0) {

    if(query == "name" )
    {
       sFilter = new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query);
    }
    else if(query == "gender")
    {
       sFilter = new sap.ui.model.Filter("gender", sap.ui.model.FilterOperator.Contains, query);
    }
     //and so on...

    filters.Push(sFilter);
}

var list = this.getView().byId("list");
var binding = list.getBinding("items");
binding.filter(filters);
1
Breakpoint

Je devais utiliser les deux. Donc à la fin cela a fonctionné pour moi.

var oFilters = new sap.ui.model.Filter({
                filters: [
                    oFilter,
                    oFilter2
                ],
                and: false
            });
evt.getSource().getBinding("items").filter(oFilters, sap.ui.model.FilterType.Application);

Merci pour l'aide!

0
Fulop Laszlo
var afilters = [];
var query = evt.getParameter("query");

afilters.Push(new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query);
afilters.Push(new sap.ui.model.Filter("age", sap.ui.model.FilterOperator.Contains, query);

var list = this.getView().byId("list");
var binding = list.getBinding("items");

binding.filter(new sap.ui.model.Filter({filters: afilters, and: true|false}));
0
tmdiwakara

Un moyen simple de lier deux filtres ou plus.

var sQuery = oEvent.getParameter("value");
var oBinding = oEvent.getSource().getBinding("items");
oBinding.filter([
    new sap.ui.model.Filter("column A", sap.ui.model.FilterOperator.Contains, sQuery), 
    new sap.ui.model.Filter("column B", sap.ui.model.FilterOperator.Contains, sQuery)
]);
0
Caio Melzer