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?
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)
]
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);
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.
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')]
});
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.
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);
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!
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}));
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)
]);