我们如何将多个过滤器传递给OData读取

时间:2017-06-20 11:03:36

标签: sapui5

我遇到的情况是必须将10个以上的输入值作为过滤器传递给后端。是否还有其他选项来创建和传递过滤器,而不是在控制器中为每个输入文件创建过滤器?

3 个答案:

答案 0 :(得分:1)

例如,如果您想以更复杂的方式通过XML视图以声明方式控制过滤器内容,则可以采用以下方法:

  1. 分配给所有受影响的输入a" customData"属性,定义" filterProperty"和" filterOperation"
  2. 为所有受影响的输入分配相同的" fieldGroupId"
  3. 在过滤器按钮触发器上,通过" getControlsByFieldGroupId"获取所有输入。方法并使用自定义数据构建过滤器,每个输入通过"数据"功能调用
  4. 使用自定义数据包括视图的命名空间: xmlns:data="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"

    customData doc

    XML中的

    <Input fieldGroupIds="InputGroup" data:filterName="Id" data:filterOperation="EQ" /> <Input fieldGroupIds="InputGroup" data:filterName="Name" data:filterOperation="Constains" /> <Input fieldGroupIds="InputGroup" data:filterName="Color" data:filterOperation="LT" />

    JS中的

    var aInputs = oView.getControlsByFieldGroupId("InputGroup");

    var aFilters = aInputs.map(function(oInput) {
        var sFilterName = oInput.data("filterName");
        var sFilterOperation = oInput.data("filterOperation");
    
        return new Filter(sFilterName, sFilterOperation, oInput.getValue());
    });
    

    See example

答案 1 :(得分:0)

您可以为每个输入创建过滤器,并将其推送到您将根据需要使用的过滤器数组。

E.g:

var oFilter1 = new sap.ui.model.Filter("Input1", sap.ui.model.FilterOperator.Contains, value1);
var oFilter2 = new sap.ui.model.Filter("Input2", sap.ui.model.FilterOperator.Contains, value2);
var oFilter3 = new sap.ui.model.Filter("Input3", sap.ui.model.FilterOperator.Contains, value3);
var oFilter4 = new sap.ui.model.Filter("Input4", sap.ui.model.FilterOperator.Contains, value4);
var allFilters = new sap.ui.model.Filter([oFilter1, oFilter2, oFilter3, oFilter4], false); 

有关详细信息,请查看here

答案 2 :(得分:-1)

    //Create an array
    var aFilters = [];
        if (yourVal1) {
            aFilters.push(new sap.ui.model.Filter("Dimension", sap.ui.model.FilterOperator.EQ, yourVal1));
        }
        if (yourVal2) {
            aFilters.push(new sap.ui.model.Filter("Language", sap.ui.model.FilterOperator.EQ, yourVal1));
        }

        this.getModel().read("/YourEntitySet", {
            filters: aFilters,
            success: function(oData) {
                // use the response as required.
            },
            error: function() {

            }
        });