向odata服务添加多重过滤器的问题

问题描述 投票:0回答:3

我有以下代码。我正在尝试从输入字段中读取PO的3个不同值,然后在列表中显示结果。程序对于单个输入运行正常,但是对于多个输入,我遇到了问题。

var oV1 = this.getView().byId("oInput").getValue();
var oV2 = this.getView().byId("oInput1").getValue();
var oV3 = this.getView().byId("oInput2").getValue();                                     


var oFilter = [new sap.ui.model.Filter("Ebeln", sap.ui.model.FilterOperator.Contains, oV1)];          
var oFilter1 = [new sap.ui.model.Filter("Ebeln", sap.ui.model.FilterOperator.Contains, oV2)];
var oFilter2 = [new sap.ui.model.Filter("Ebeln", sap.ui.model.FilterOperator.Contains, oV3)];



var orFilter =new Array(new sap.ui.model.Filter({filters:[oFilter, oFilter1, oFilter2],and:true}));

   var oView1 = this.getView();
   var oTable = oView1.byId("myTable");
   var oBinding = oTable.getBinding("items");
   if(oV1 === "")
   {
       oBinding.filter( [] );
       oBinding.refresh(true);
   }
   else
   {
     oBinding.filter(orFilter);

在上面的oBinding.filter中,我收到以下错误。多重过滤聚合中的过滤器必须是sap.ui.model.Filter-

的实例

无法获得未定义或空引用的属性'替换'

请帮助。

filter odata sapui5
3个回答
1
投票
只需创建一个包含过滤器

objects >>:的单个数组

const aFilter = [ new sap.ui.model.Filter("Ebeln", sap.ui.model.FilterOperator.Contains, oV1), new sap.ui.model.Filter("Ebeln", sap.ui.model.FilterOperator.Contains, oV2), new sap.ui.model.Filter("Ebeln", sap.ui.model.FilterOperator.Contains, oV3) ]; ... oBinding.filter(aFilter)

Afaik,您无法将具有相同属性(例如"Ebeln")的过滤器与AND合并。一个条目永远不能满足所有三个条件,因此您将获得零结果。

我知道这不是代码审查,但有一些建议:


没有人使用new Array()。只需使用[]

[您也使用匈牙利符号,但是每个变量名称都以o开头。 o表示对象。您的某些变量不是对象而是字符串(例如oV1,最好是sV1)或数组。


0
投票

-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.