使用 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 枚举作为字段过滤网格的主要内容,如果未能解决你的问题,请参考以下文章

OData:通配符(startswith)过滤 url 请求中的数字(ID)字段

Angular 2 Kendo 网格不支持 odata v4

我们可以使用OData客户端为syncfusion网格创建我们的请求但是使用正常响应(Reqular WebAPI)

如何使用 AutoMapper 将 json 请求 dto 中的 OData 枚举字符串映射到实体枚举属性

扩展属性中的 Odata 过滤不起作用

如何正确地将 OData 与 ASP.net Core 集成