向odata服务添加多重过滤器的问题 [英] Problem in adding multi filter to odata service

查看:280
本文介绍了向odata服务添加多重过滤器的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have the following code. I am trying to read 3 different values for PO from input fields then displaying the result in list. Program is working fine for single input but for multiple inputs i am facing issues.

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的实例-

At the above oBinding.filter I am receiving following error. Filter in Aggregation of Multi filter has to be instance of sap.ui.model.Filter -

无法获取未定义或空引用的属性替换"

Unable to get property 'replace' of undefined or null reference

请帮助.

推荐答案

您将过滤器包装在没有意义的1000层数组中.

You wrapped your filters in 1000 layers of Arrays which doesn't make sense.

只需创建一个包含过滤器对象的单个数组:

Just create a single array which contains Filter objects:

// Filter, FilterOperator, and FilterType required from "sap/ui/model/*"
const aFilter = [
  new Filter("Ebeln", FilterOperator.Contains, sV1),
  new Filter("Ebeln", FilterOperator.Contains, sV2),
  new Filter("Ebeln", FilterOperator.Contains, sV3),
];
oListBinding.filter(aFilter, FilterType.Application);


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


I know this isn't a code review but some suggestions:

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

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

Also you used Hungarian notation but every one of your variable names begins with o. o means object. Some of your variables are not objects but strings (like oV1, better would be sV1) or arrays.

这篇关于向odata服务添加多重过滤器的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆