---
title: Expresiones de filtrado y clasificación
slug: develop/es/expresiones-de-filtrado-y-clasificacion
docTags: 
createdAt: 2025-03-11T07:03:28.938Z
---

Esta página describe las expresiones de filtrado y ordenación en la Main API.

## Expresiones de filtrado y ordenación 

Este ejemplo describe la entidad player, pero la misma solución se implementa para todas las demás entidades (por ejemplo, grupos, feeds, playlists, etc.). 

### Ejemplo

La BSN.Cloud Main API actualmente expone los siguientes métodos de administración de player que aceptan expresiones opcionales de filtrado y ordenación:

:::BlockQuote
GET \~/\{\{version}}/REST/Devices/\[?marker=\{string}]\[\&pageSize=\{byte}]\[\&filter=\{expression}]\[\&sort=\{expression}]
:::

que recupera la lista paginada incluyendo hasta 100 instancias de 'Device' comenzando desde el marcador especificado, coincidiendo con la expresión de filtro especificada y ordenada de acuerdo con la expresión de ordenación especificada.

:::BlockQuote
GET \~/\{\{version}}/REST/Devices/Regions/\{\*locationPath}/\[?filter=\{expression}]
:::

que recupera la lista de 'DevicesRegion' proporcionando la información agregada de ubicaciones de instancias de 'Device' que coinciden con la ruta de ubicación y la expresión de filtro especificadas.

:::BlockQuote
GET \~/\{\{version}}/REST/Devices/Count/\[?filter=\{expression}]
:::

que recupera el número de instancias de 'Device' que coinciden con la expresión de filtro especificada.

:::BlockQuote
PATCH \~/\{\{version}}/REST/Devices/\[?filter=\{expression}]
:::

(en desarrollo) que aplica los cambios especificados a las instancias de 'Device' que coinciden con la expresión de filtro especificada.

:::BlockQuote
DELETE \~/\{\{version}}/REST/Devices/\[?filter=\{expression}]
:::

que elimina las instancias de 'Device' que coinciden con la expresión de filtro especificada.

## Criterios de expresiones de filtro

- Cada expresión de filtro puede contener uno o más criterios combinados mediante operadores AND/OR y opcionalmente agrupados mediante paréntesis.
- Cada criterio puede basarse en el nombre de una propiedad, una etiqueta del sistema o una etiqueta personalizada.
- Todos los nombres de propiedades se basan en el contrato de datos de la versión objetivo de la Main API

## Etiquetas del sistema y personalizadas

Además de las propiedades, cada instancia de entidad 'Player' puede tener un conjunto diferente de etiquetas del sistema y personalizadas especificadas por el cliente, expuestas mediante la propiedad `[Dictionary<string, object>] Etiquetas` y administradas mediante los siguientes métodos de la BSN.Cloud Main API:

:::BlockQuote
PUT \~/\{version}/REST/Devices/\{playerId\:int}/
:::

:::BlockQuote
PUT \~/\{version}/REST/Devices/\{serial}/
:::

:::BlockQuote
PATCH \~/\{version}/REST/Devices/\{playerId\:int}/
:::

:::BlockQuote
PATCH \~/\{version}/REST/Devices/\{serial}/
:::

:::BlockQuote
GET \~/\{version}/REST/Devices/\{playerId\:int}/Tags/
:::

:::BlockQuote
GET \~/\{version}/REST/Devices/\{serial}/Tags/
:::

:::BlockQuote
POST \~/\{version}/REST/Devices/\{playerId\:int}/Tags/
:::

:::BlockQuote
POST \~/\{version}/REST/Devices/\{serial}/Tags/
:::

:::BlockQuote
DELETE \~/\{version}/REST/Devices/\{playerId\:int}/Tags/
:::

:::BlockQuote
DELETE \~/\{version}/REST/Devices/\{serial}/Tags/
:::

Cada etiqueta del sistema y personalizada debe especificarse explícitamente para la instancia de entidad objetivo, pero la lista de etiquetas del sistema disponibles está predefinida por los propietarios del producto y asignada a algunas propiedades, por lo que sus valores siempre deben estar sincronizados. Por ejemplo, la etiqueta del sistema asignada a la propiedad Player Health Status se llama:

`string::[Device].<HealthStatus>`

## Menciones de propiedades y etiquetas en expresiones

Las menciones de propiedades y etiquetas en expresiones son diferentes: las propiedades están envueltas entre corchetes y separadas por puntos, mientras que las etiquetas están envueltas entre signos de menor y mayor y opcionalmente pueden estar precedidas por el nombre de la entidad objetivo entre corchetes, y el tipo de datos está separado por doble punto como puede ver en el ejemplo anterior. Cada propiedad y etiqueta tiene un tipo de datos fuerte; para las propiedades y etiquetas del sistema, se define en el contrato de datos de una versión objetivo de la API y para las etiquetas personalizadas se resuelve ya sea a partir del nombre completamente calificado o del primer valor asignado. Además, existe una solicitud para admitir etiquetas personalizadas sin valores que actúen como etiquetas identificadoras. El tipo de datos define qué operadores y funciones son aplicables a una propiedad o etiqueta determinada en las condiciones.

Las propiedades y etiquetas del tipo de datos **booleano** normalmente admiten los siguientes operadores:

:::BlockQuote
ES TRUE
:::

:::BlockQuote
ES FALSE
:::

Las propiedades y etiquetas de tipos de datos **numérico** normalmente admiten los siguientes operadores:

:::BlockQuote
ES \{number}
:::

:::BlockQuote
NO ES \{number}
:::

:::BlockQuote
ES MAYOR QUE \{number}
:::

:::BlockQuote
ES MENOR QUE \{number}
:::

:::BlockQuote
ESTÁ EN EL RANGO \{number} Y \{number}
:::

:::BlockQuote
NO ESTÁ EN EL RANGO \{number} Y \{number}
:::

:::BlockQuote
ESTÁ EN (\{number}, \{number}, ...)
:::

:::BlockQuote
NO ESTÁ EN (\{number}, \{number}, ...)
:::

Las coordenadas GPS también admiten expresiones como:

:::BlockQuote
GPS LOCATION (\[Latitude] AND \[Longitude]) IN (\{latitude}, \{longitude}, \{distance})
:::

:::BlockQuote
GPS LOCATION (\[Latitude] AND \[Longitude]) NOT IN (\{latitude}, \{longitude}, \{distance})
:::

Las propiedades y etiquetas del tipo de datos **cadena** normalmente admiten los siguientes operadores:

:::BlockQuote
ES NULL
:::

:::BlockQuote
NO ES NULL
:::

:::BlockQuote
ES '\{expression}'
:::

:::BlockQuote
NO ES '\{expression}'
:::

:::BlockQuote
COMIENZA CON '\{string}'
:::

:::BlockQuote
TERMINA CON '\{string}'
:::

:::BlockQuote
CONTIENE '\{string}'
:::

:::BlockQuote
NO CONTIENE '\{string}'
:::

:::BlockQuote
CONTIENE TODOS ('\{string}', '\{string}', ...)
:::

:::BlockQuote
CONTIENE CUALQUIERA ('\{string}', '\{string}', ...)
:::

:::BlockQuote
ESTÁ EN ('\{string}', '\{string}', ...)
:::

:::BlockQuote
NO ESTÁ EN ('\{string}', '\{string}', ...)
:::

Las expresiones utilizadas en los operadores IS y IS NOT pueden incluir los comodines '\*', '?', '\[' + ']'.

Las propiedades y etiquetas del tipo de datos **Fecha y hora** (timestamp) normalmente admiten los siguientes operadores:

:::BlockQuote
ES '\{DateTime}'
:::

:::BlockQuote
NO ES '\{DateTime}'
:::

:::BlockQuote
ES DESPUÉS DE '\{DateTime}'
:::

:::BlockQuote
ES ANTES DE '\{DateTime}'
:::

:::BlockQuote
EN LOS ÚLTIMOS (\{interval}, \{range}, '\{DateTime}')&#x20;
:::

donde \{interval} es uno de los valores de enumeración \{ "YEARS", "MONTHS", "DAYS" }

:::BlockQuote
NO EN LOS ÚLTIMOS (\{interval}, \{range}, '\{DateTime}')&#x20;
:::

donde \{interval} es uno de los valores de enumeración \{ "YEARS", "MONTHS", "DAYS" }

:::BlockQuote
ESTÁ EN EL RANGO '\{DateTime}' Y '\{DateTime}'
:::

:::BlockQuote
NO ESTÁ EN EL RANGO '\{DateTime}' Y '\{DateTime}'
:::

:::BlockQuote
ESTÁ EN ('\{DateTime}', '\{DateTime}')
:::

:::BlockQuote
NO ESTÁ EN ('\{DateTime}', '\{DateTime}')
:::

El formato del valor '\{DateTime}' debe seguir ISO 8601 y normalmente es como '2021-12-20T18:25:01.123Z'.

Las propiedades y etiquetas del tipo de datos **Intervalo de tiempo** (intervalo de tiempo) normalmente admiten los siguientes operadores:

:::BlockQuote
ES '\{TimeSpan}'
:::

:::BlockQuote
NO ES '\{TimeSpan}'
:::

:::BlockQuote
ES MAYOR QUE '\{TimeSpan}'
:::

:::BlockQuote
ES MENOR QUE '\{TimeSpan}'
:::

:::BlockQuote
ESTÁ EN ('\{TimeSpan}', '\{TimeSpan}')
:::

:::BlockQuote
NO ESTÁ EN ('\{TimeSpan}', '\{TimeSpan}')
:::

El formato del valor '\{TimeSpan}' debe seguir ISO 8601 y normalmente es como '3.18:25:01'.

Las propiedades y etiquetas de los tipos de datos **matriz numérica** normalmente admiten los siguientes operadores:

:::BlockQuote
ES NULL
:::

:::BlockQuote
NO ES NULL
:::

:::BlockQuote
CONTIENE TODOS ('\{number}', '\{number}', ...)
:::

:::BlockQuote
CONTIENE CUALQUIERA ('\{number}', '\{number}', ...)
:::

Las propiedades y etiquetas del tipo de datos **matriz de cadenas** normalmente admiten los siguientes operadores:

:::BlockQuote
ES NULL
:::

:::BlockQuote
NO ES NULL
:::

:::BlockQuote
CONTIENE TODOS ('\{string}', '\{string}', ...)
:::

:::BlockQuote
CONTIENE CUALQUIERA ('\{string}', '\{string}', ...)
:::

Las propiedades y etiquetas del tipo de datos **objeto** normalmente admiten los siguientes operadores:

:::BlockQuote
ES NULL
:::

:::BlockQuote
NO ES NULL
:::

Las expresiones de ordenación solo pueden contener un nombre de propiedad completamente calificado o una etiqueta con el calificador opcional ASC/DESC, pero deberían admitir más en el futuro.
