Sapui5 ui5中的多值过滤器

Sapui5 ui5中的多值过滤器,sapui5,Sapui5,我想为2个不同的值运行一个过滤器2次。下面的过滤器运行良好,搜索工厂A中是否存在物料M。我要搜索的是工厂A和工厂B中是否存在物料M。因此,我要为工厂A运行下面的过滤器2次搜索,如果物料存在,则为工厂B运行。如果物料存在,则调用成功函数。最好的方法是什么? (植物就像钥匙) Controller.js var sServiceURL = self.getOwnerComponent().getMetadata().getManifestEntry("sap.app").dataSources["A

我想为2个不同的值运行一个过滤器2次。下面的过滤器运行良好,搜索工厂A中是否存在物料M。我要搜索的是工厂A和工厂B中是否存在物料M。因此,我要为工厂A运行下面的过滤器2次搜索,如果物料存在,则为工厂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);
                }
            });

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

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(新的sap.ui.model.Filter(“plant”,sap.ui.model.FilterOperator.EQ,self.plant))的替代品

多谢各位。我已经编辑了我的代码。(贴在上面)。但现在我得到了一个错误-Uncaught(在promise中)TypeError:无法读取未定义的属性“replace”。就像你提到的,如果两种植物中都存在一种物质,我想实现这一目标。此外,希望检查以下组合:类似(PlantA&&MatA&&Order)&(PlantB&&MatA&&Order)的组合。提前感谢。
self.plantB
可能未定义,这可能会导致第一个问题。至于另一个问题,您可以使用上面所述的
新过滤器
逻辑在查询中获得括号-我已经再次编辑了代码并准确地替换了行。除此之外,我还添加了filters.push。我签入调试所有值都在那里。早些时候,它成功地进行了fn调用,然后在控制台中给出了错误。现在将出现错误fn,并表示通过过滤器值。但在调试中,所有值都存在。有什么想法吗?如果到达error函数,您的odata服务将返回一个错误。您的后端可能无法满足您要通过的筛选器的需要。如果有一种方法可以调用read两次,请在首次读取成功时设置标志。但它先是1,然后是2。read(sPath,{filters:filters1,success:function(oData,response){resolve(oData);来到这里->1,2 success=true;(2)},error:function(oError){reject(oError);success=false;});}if(success){(1)OdataModel.read(sPath,{filters:filters,success:self.fn.bind(self),error:function(oError){self.fn1(oError);};