XML中的多个过滤器

时间:2018-11-30 11:32:43

标签: sapui5

所以我有一个列表,但是我想过滤掉类型'05''01'而不显示在列表中。以下代码对'05'有效,但对'01'无效。我将如何编写它以添加另一个值?

items="{
  path: 'Entries',
  filters: [{
    path: 'Type',
    operator : 'NE',
    value1 : '05',
    value2: '01'
  }]
}"

我尝试了这种方法,我认为这是合乎逻辑的方法,但是随后它开始显示05和01。因此,我假设这是使用 OR 过滤器,而不是过滤器 AND 过滤器组合。

items="{
  path:'Entries',
  filters: [{
    path: 'Type',
    operator: 'NE',
    value1: '05'
  }, {
    path: 'Type',
    operator: 'NE',
    value1: '01'
  }]
} 

2 个答案:

答案 0 :(得分:2)

这是XML视图中的语法:

items="{
  path: '/Products',
  filters: [
    {
      filters: [
        {
          path: 'ProductName',
          operator: 'StartsWith',
          value1: 'Sir '
        },
        {
          path: 'Discontinued',
          operator: 'EQ',
          value1: false
        },
      ],
      and: true
    }
  ]
}"

工作示例:https://embed.plnkr.co/wAlrHB?show=view/Home.view.xml,preview

参数filters等待一组过滤器信息对象。过滤器信息对象受以下属性组合的约束:

  • pathoperatorvalue1(和value2(如果适用))
  • 或者filtersand。 <-这就是我们所需要的。

API参考:sap.ui.model.Filter


第二种方法不起作用的原因是,两个过滤器都指向同一路径('Type'),这导致OR逻辑。

  

应用于单个表列的所有过滤器都进行“或”运算,而对不同表列中的过滤器进行“与”运算。请使用过滤器的自动分组(在适用的情况下)或使用显式的AND / OR过滤器,不支持两者的混合。 [source]

答案 1 :(得分:1)

sap.ui.model.Filter一起使用的value2参数仅对某些sap.ui.model.FilterOperators(例如BT)有效。要解决此问题,我们可以设置多个sap.ui.model.FilterOperator.NE过滤器,在您的情况下,可以为值1和2过滤属性"Type"

默认情况下,如果您将多个过滤器组合在一起,它们在逻辑上与OR组合在一起,那么在您进行EQ过滤器时是有意义的,但对于必须使用NE过滤器的情况则没有意义使用AND。幸运的是,sap.ui.model.Filter类具有一个参数,让我们定义它。


在我的示例中,我有一个sap.m.Table,该绑定到以下“水果”对象:

var Fruits = {
   "Fruits": [{
     "id": "1",
     "name": "Apple"
    }, {
     "id": "2",
     "name": "Blueberry"
    }, {
     "id": "3",
     "name": "Cranberry"
    }]
};

就像您的问题一样,我想从表中同时过滤"id" 1和2。这可以通过以下方法实现:

var oTable = this.getView().byId("idListFruits");
oTable.getBinding("items").filter(new Filter({
   filters: [
     new Filter({
         filters: [
             new Filter("id", sap.ui.model.FilterOperator.NE, "1"),
             new Filter("id", sap.ui.model.FilterOperator.NE, "2")
         ], and: true
     })
   ]
}));

通过这种方式,我既可以将NE过滤器应用于表,也可以将AND参数设置为true,以指示对过滤器应用了“ AND”逻辑结合。

我的表格输出:

My fruits table without both ids 1 and 2[4]