我希望按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)]);
}
},
任何帮助?
答案 0 :(得分:1)
从OData的角度来看,过滤器操作“Contains”被转换为OData操作“substring”。正如操作的名称所暗示的那样,它只能用于字符串。如果要对非字符串进行过滤,则必须使用FilterOperator.EQ,但这不允许您对属性的某些部分进行过滤。
如果您需要过滤数字属性的某些部分,例如要找到1234,您必须应用客户端过滤并构建一个为您进行过滤的例程。
而不是使用:
实例化过滤器new Filter("TypeID", FilterOperator.Contains, typeID);
您必须使用以下方法实例化过滤器:
new Filter("TypeID", fnTest);
请注意,客户端过滤可能会导致从后端提取大量数据。所以要谨慎使用它。
或者,你当然也可以尝试与负责后端逻辑的人交谈,看看他们是否可以将搜索属性重新定义为字符串而不是数值。