web-dev-qa-db-ja.com

SAPUI5:2つ以上の値を持つデータをフィルタリングする方法

私は現在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 [] ..に追加しますが、これは機能しません。

私はすでにドキュメントを見たり、さまざまな例を見たり、さまざまな方法を試したりしましたが、どうしようもありません。誰かがこの問題で私を助けてくれますか?

3
user3544563

要件については、このコードが機能します。

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

私は以下のコードでこれを達成しました:-

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

APIによると

手動フィルタリングの場合、常にFilterTypeを渡す必要があります

コードをに変更した場合

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

動作するはずです。

一番下の https://openui5.hana.ondemand.com/docs/guide/BindingAggregations.html も参照してください。

3
Qualiture

私は両方を使わなければなりませんでした。だから最後にこれは私のために働いた。

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

助けてくれてありがとう!

1
Fulop Laszlo

すべてが正しく行われたことを願っています。データをテーブルにバインドするときに複数の列をフィルタリングする方法は次のとおりです。

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

複数のフィルターを組み合わせるには、次のようにフィルターを作成する必要があります。

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を使用して複数の列でフィルタリングできます。

1
isumi

基準ごとに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);
1
Breakpoint
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

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)
]);
0
Caio Melzer