SAPUI5过滤器仅适用于字符串

时间:2016-06-27 08:11:59

标签: javascript odata sapui5

我希望按TypeID过滤我的列表,但我的ID是数字(int32),而“包含”过滤器不适用于数字,我认为。

onSearch : function (oEvt) {
    var sQuery = oEvt.getSource().getValue();
    var list = this.getView().byId("myList");
    var binding = list.getBinding("items");         

    if (sQuery && sQuery.length > 0) {
        binding.filter( [ new sap.ui.model.Filter([
           new sap.ui.model.Filter("TypeID", sap.ui.model.FilterOperator.Contains, window.global.TypeID  )    //Error: request failed due to invalid system query options value!
        ],false)]);
    }
},

任何帮助?

1 个答案:

答案 0 :(得分:1)

从OData的角度来看,过滤器操作“Contains”被转换为OData操作“substring”。正如操作的名称所暗示的那样,它只能用于字符串。如果要对非字符串进行过滤,则必须使用FilterOperator.EQ,但这不允许您对属性的某些部分进行过滤。

如果您需要过滤数字属性的某些部分,例如要找到1234,您必须应用客户端过滤并构建一个为您进行过滤的例程。

而不是使用:

实例化过滤器
new Filter("TypeID", FilterOperator.Contains, typeID);

您必须使用以下方法实例化过滤器:

new Filter("TypeID", fnTest);

请注意,客户端过滤可能会导致从后端提取大量数据。所以要谨慎使用它。

或者,你当然也可以尝试与负责后端逻辑的人交谈,看看他们是否可以将搜索属性重新定义为字符串而不是数值。