我试图使用我桌子上的所有选定项目从odata模型中读取。该表有两个键,我称之为ID和NAME,可能是我只需要其中一个键的过滤器。仅使用1个过滤器不会改变结果。
然后,我为所有选定的项目创建过滤器。之后它使用过滤器从模型中读取,但总是返回1个结果,即表中的第一个条目。
我发现here您可以使用过滤器数组制作另一个过滤器,以便对过滤器执行AND或OR,所以我尝试了但没有改变。
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;
}
}
答案 0 :(得分:1)
从我可以理解的问题来看,我相信你想实现如下
第1行 - “ID”和“NAME”
第2行 - “ID”和“NAME”
第3行 - “ID”和“NAME”
您可以通过在嵌套过滤器中设置参数对象中的and参数来实现。
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;
}
}