私は現在SAPUI5でいくつかのことを試していますが、次のような非常に単純な検索を実装しました。
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);
今、私は次の問題を抱えています:このロジックを使用すると、人の名前で検索するか、フィルタリングすることができます。年齢、性別などの追加フィールドもいくつかあり、年齢や性別も検索したいと思います。そこで、「gender」フィールドを使用する「genderFilter」のような2番目のフィルターを作成しようとしました。この後、.Push()メソッドを使用してこの2番目のフィルターをfilters [] ..に追加しますが、これは機能しません。
私はすでにドキュメントを見たり、さまざまな例を見たり、さまざまな方法を試したりしましたが、どうしようもありません。誰かがこの問題で私を助けてくれますか?
要件については、このコードが機能します。
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)
]
私は以下のコードでこれを達成しました:-
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);
APIによると
手動フィルタリングの場合、常にFilterTypeを渡す必要があります
コードをに変更した場合
list.getBinding("items").filter(filters, sap.ui.model.FilterType.Application);
動作するはずです。
一番下の https://openui5.hana.ondemand.com/docs/guide/BindingAggregations.html も参照してください。
私は両方を使わなければなりませんでした。だから最後にこれは私のために働いた。
var oFilters = new sap.ui.model.Filter({
filters: [
oFilter,
oFilter2
],
and: false
});
evt.getSource().getBinding("items").filter(oFilters, sap.ui.model.FilterType.Application);
助けてくれてありがとう!
すべてが正しく行われたことを願っています。データをテーブルにバインドするときに複数の列をフィルタリングする方法は次のとおりです。
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')]
});
複数のフィルターを組み合わせるには、次のようにフィルターを作成する必要があります。
new sap.ui.model.Filter({
filters: [
new sap.ui.model.Filter(col1, , ,val),
new sap.ui.model.Filter(col2, , ,val)
],
and: false
})
ソース: https://sapui5.hana.ondemand.com/docs/api/symbols/sap.ui.model.Filter.html#constructor
次に、ORを使用して複数の列でフィルタリングできます。
基準ごとにfilters
配列にフィルターを1つだけ設定すると、機能するはずです。
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);
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}));
2つ以上のフィルターをバインドする簡単な方法。
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)
]);