ui5中的多值过滤器

时间:2018-09-09 01:51:15

标签: sapui5

我想为2个不同的值运行2次过滤器。下面的过滤器运行正常,并搜索工厂A中是否存在物料M。我要搜索的是工厂A和工厂B中存在物料M。因此,如果物料是否存在,我想对工厂A运行以下过滤器两次如果存在,则为工厂B运行。如果两个地方都存在,则调用成功函数。最好的方法是什么? (植物就像钥匙一样)

Controller.js

var sServiceURL = self.getOwnerComponent().getMetadata().getManifestEntry("sap.app").dataSources["ABC"].uri;
            var OdataModel = new sap.ui.model.odata.v2.ODataModel(sServiceURL);
            var sPath = "/materialSet";
        var filters = [];

                filters.push(new sap.ui.model.Filter([
                new sap.ui.model.Filter("plant", sap.ui.model.FilterOperator.EQ, self.plantA),
                new sap.ui.model.Filter("plant", sap.ui.model.FilterOperator.EQ, self.plantB)
            ], true));


            filters.push(new sap.ui.model.Filter("Material", sap.ui.model.FilterOperator.EQ, materialNo));
            filters.push(new sap.ui.model.Filter("type", sap.ui.model.FilterOperator.EQ, orderType));

            OdataModel.read(sPath, {
                filters: filters,
                success: self.sucess.bind(self),
                error: function(oError) {
                    self.error(oError);
                }
            });

1 个答案:

答案 0 :(得分:3)

您可以通过以下方式在同一字段上添加多个过滤器:

new Filter([
     new sap.ui.model.Filter("plant", sap.ui.model.FilterOperator.EQ, self.plantA),
     new sap.ui.model.Filter("plant", sap.ui.model.FilterOperator.EQ, self.plantB)
], false);

这会导致像这样的呼叫

  

和(植物= 1或植物= 2)

如果要检查零件在两个工厂中是否都可用,请将其最后一个参数设为true或留空:

new Filter([
     new sap.ui.model.Filter("plant", sap.ui.model.FilterOperator.EQ, self.plantA),
     new sap.ui.model.Filter("plant", sap.ui.model.FilterOperator.EQ, self.plantB)
], true);
  

和(植物= 1和植物= 2)

因此,将其合并为filters.push(new sap.ui.model.Filter("plant", sap.ui.model.FilterOperator.EQ, self.plant));的替代品。