0

I am trying to read from an odata model using all the selected items from my table. The table has two keys, I called them ID and NAME, it could be that i only need filters for one of the keys. Using only 1 filter did not change the result.

I then create filters for all of the items that are selected. Later it reads from the model using the filters but always comes back with 1 results, the first entry in the table.

I found here that you can make another filter using the filter array to do AND or OR on the filters, so I tried that but nothing changed.

var table = this.byId("table");
var items = table.getSelectedItems();
var filters = [];
for (var i = 0; i < items.length; i++) {
    var item = items[i].getBindingContext().getObject();
    var id = new Filter("ID", FilterOperator.Contains, item.ID);
    var name = new Filter("NAME", FilterOperator.Contains, item.NAME);
    filters.push(id);
    filters.push(name);
}

var model = this.getOwnerComponent().getModel();
model.read("/assessments", {
    filters: [new sap.ui.model.Filter(filters, false)],
    success: function(odata) {
        var results = odata.results;
    }
}
Grayden Hormes
  • 855
  • 1
  • 15
  • 34

1 Answers1

1

From what I could understand from you question, I believe you want to achieve as below

Row 1 - "ID" AND "NAME"

  • OR

Row 2 - "ID" AND "NAME"

  • OR

Row 3 - "ID" AND "NAME"

You could do that by setting the and argument in the parameter object in a nested filter.

var table = this.byId("table"),
    items = table.getSelectedItems(),
    aFilters = [];
for (var i = 0; i < items.length; i++) {
    var item = items[i].getBindingContext().getObject();
    var oFilter = new Filter({
        filters:[
            new Filter("ID", FilterOperator.Contains, item.ID),
            new Filter("NAME", FilterOperator.Contains, item.NAME)
        ],
        and : true
    })
    aFilters.push(oFilter);
}

var model = this.getOwnerComponent().getModel();
model.read("/assessments", {
    filters: [new sap.ui.model.Filter(aFilters, false)],
    success: function(odata) {
        var results = odata.results;
    }
}
Stephen S
  • 3,936
  • 2
  • 23
  • 33