使用 OData 枚举作为字段过滤网格

Posted

技术标签:

【中文标题】使用 OData 枚举作为字段过滤网格【英文标题】:Filtering a grid with an OData Enum as a field 【发布时间】:2018-04-22 08:41:54 【问题描述】:

我正在尝试使用枚举字段过滤网格数据源。

OData api 似乎已弃用/删除了在服务器端处理无前缀枚举的能力。

我将以下内容添加到网格的过滤器中。

let fd1: FilterDescriptor = 
  field: 'orderStatus',
  operator: 'eq',
  value: "SOPSModel.OrderStatusEnum'Open'",
  ignoreCase: false

this.filter.filters.push(fd1);

问题似乎是 kendo-data-query 中提供的 toOdataString 函数将 Enum 标识为字符串,然后对其进行引号和转义,这使得服务器端 API 拒绝枚举并失败。

我设置了自己的过滤器解析器,它工作正常,但是使用已添加到网格中的新过滤选项,我真的需要一个适当的解决方案。

那么,谁能指出 Telerik 如何处理 OData 枚举的方向?

【问题讨论】:

【参考方案1】:

我使用这个例子来改变传输参数映射:

https://docs.telerik.com/kendo-ui/api/javascript/data/datasource/configuration/transport.parametermap

类似:

dataSource: 
    type: "odata-v4",
    transport: 
        read: 
            dataType: "json",
            url: datasourceURL          
        ,            
        parameterMap: function (data, type)                
            var c = kendo.data.transports["odata-v4"].parameterMap(data, type);


// transform your c exactly how you wish to make the call to the service and put it on a string

return c; 

【讨论】:

以上是关于使用 OData 枚举作为字段过滤网格的主要内容,如果未能解决你的问题,请参考以下文章