¿Qué es Property Technology y para qué sirve?

Domina la Propiedad .Filter en WINDEV y WEBDEV

24/08/2022

Valoración: 4.76 (5657 votos)

En el desarrollo de aplicaciones, una de las tareas más comunes y cruciales es la presentación de datos al usuario. Rara vez queremos mostrar miles de registros de una base de datos de una sola vez. Lo ideal es ofrecer vistas filtradas, segmentadas y relevantes que faciliten la interacción y la toma de decisiones. En el ecosistema de WINDEV, WEBDEV y WINDEV Mobile, contamos con una herramienta excepcionalmente sencilla y potente para esta tarea: la propiedad .Filter. A primera vista, puede parecer una simple propiedad más, pero comprender su funcionamiento, sus matices y sus limitaciones puede marcar una gran diferencia en el rendimiento y la usabilidad de nuestras aplicaciones.

¿Cuál es la diferencia entre propriété y Property?
Así, por ejemplo, propriété expresa, al mismo tiempo, la propiedad y la cualidad; property designa la propiedad y la peculiaridad, lo "propio" en sentido mercantil y en sentido individual, indica el valeur, el value, el valor; commerce el tráfico comercial; échange, exchange,

Este artículo se sumerge en las profundidades de la propiedad .Filter. Exploraremos desde su sintaxis más básica hasta sus interacciones más complejas con los ficheros de datos, especialmente en los controles de tipo Tabla. Si alguna vez te has preguntado cómo aplicar un filtro rápido a un combo sin escribir una consulta SQL, o cómo optimizar la carga de datos cuando cambias múltiples criterios de visualización, estás en el lugar correcto. Acompáñanos en este recorrido para dominar una de las propiedades más útiles del WLanguage.

Índice de Contenido

¿Qué es Exactamente la Propiedad .Filter?

La propiedad .Filter es un mecanismo integrado en el WLanguage que permite identificar y modificar el filtro aplicado a los registros de diversos controles enlazados a un fichero de datos o una consulta. Su principal objetivo es ofrecer una forma rápida y directa de limitar los datos que se muestran en la interfaz de usuario, basándose en un criterio de búsqueda simple.

La característica fundamental de este filtro es que opera bajo la lógica "Comienza por" (o "Starts with"). Esto significa que cuando aplicas un valor al filtro, el control solo mostrará aquellos registros cuyo ítem de búsqueda comience con la cadena de texto que has especificado. Por ejemplo, si aplicas el filtro "BAR" a una lista de ciudades, solo se mostrarán "Barcelona", "Barranquilla" o "Barquisimeto", pero no "Guebar".

Esta propiedad está disponible para una variedad de controles, siempre y cuando estén basados en un fichero de datos:

  • Controles Tabla y Tabla TTreeview (en modo navegación).
  • Controles Lista y Lista Imagen.
  • Controles Combo.
  • Controles Looper (o Repetidor).

Es importante destacar que, por defecto, el filtro aplicado con .Filter solo afecta a la visualización en el control y no modifica el fichero de datos subyacente. Esto lo convierte en una herramienta ideal para filtros de UI temporales y rápidos. Sin embargo, como veremos más adelante, existe una excepción crucial en el caso de los controles Tabla que puede cambiar este comportamiento.

Sintaxis y Ejemplos de Uso Práctico

La belleza de la propiedad .Filter reside en su simplicidad. Su sintaxis es directa y se puede utilizar tanto para leer el filtro actual como para establecer uno nuevo.

Leer el Filtro Actual

Para saber qué filtro está aplicado actualmente sobre un control, simplemente tienes que leer el valor de su propiedad .Filter.

Sintaxis:

sFiltroActual = MiControl.Filter

Ejemplo:

Imaginemos que tenemos un campo de entrada donde el usuario puede escribir un filtro y queremos mostrar el filtro activo en una etiqueta.

// Código en el evento "Cada modificación" de un campo de entrada EDT_Filtro
TABLE_Clientes.Filter = EDT_Filtro
LIB_FiltroActivo = "Filtro actual: '" + TABLE_Clientes.Filter + "'"

Modificar o Establecer un Filtro

Para aplicar un nuevo filtro, simplemente asigna una cadena de texto a la propiedad. Si deseas eliminar cualquier filtro existente y mostrar todos los registros, asigna una cadena vacía ("").

¿Qué es la Property y cómo funciona?
la Property no se aplica sólo a la control Tabla, sino también a la el archivo de datos en la que se basa la control. Por lo tanto, una exploración realizada en el archivo base de la control será filtrada. A el archivo de datos se le aplica automáticamente un filtro ( HFilter) en el que se basa control Tabla.

Sintaxis:

MiControl.Filter = "NuevoValorDeFiltro"

Ejemplo 1: Filtrar una tabla de clientes por ciudad

Supongamos que tenemos una tabla TABLE_Clientes enlazada a un fichero de datos de clientes, donde el ítem de búsqueda es el campo "Ciudad". Si queremos mostrar solo los clientes de París, el código sería tan simple como esto:

// Aplicar el filtro para mostrar solo clientes cuya ciudad empieza por "PARIS"
TABLE_Clientes.Filter = "PARIS"

Ejemplo 2: Filtrar un combo dinámicamente

Tenemos un combo COMBO_Producto que muestra una larga lista de productos. Queremos que al hacer clic en un botón, solo se muestren los productos que comienzan con "LAP".

// Código en el evento "Clic" de un botón
COMBO_Producto.Filter = "LAP"

Ejemplo 3: Eliminar el filtro

Para volver a mostrar todos los productos en el combo anterior, simplemente hacemos:

// Código para resetear el filtro
COMBO_Producto.Filter = ""

El Comportamiento Especial en Controles Tabla

Aquí es donde la propiedad .Filter revela su faceta más interesante y potente. Cuando trabajamos con un control Tabla basado en un fichero de datos, su comportamiento puede cambiar drásticamente dependiendo de una única casilla en la descripción del control: "Utilizar la función HFilter para navegar por el archivo".

Comprender la diferencia entre tener esta opción marcada o desmarcada es fundamental para evitar comportamientos inesperados y para aprovechar al máximo el rendimiento de la aplicación.

Tabla Comparativa de Comportamientos

CaracterísticaOpción DESMARCADA (Por defecto)Opción MARCADA (Usa HFilter)
¿A qué afecta el filtro?Únicamente a la visualización de registros dentro del control Tabla.Afecta tanto al control Tabla como al fichero de datos subyacente.
¿Se modifica el fichero de datos?No. Si realizas una lectura sobre el fichero (ej. HReadFirst), recorrerás todos los registros sin filtro.Sí. Se aplica un HFilter automáticamente. Cualquier navegación posterior sobre el fichero estará filtrada.
Filtros de columna (lupa)Las opciones de búsqueda y orden en las columnas (lupa, clic en cabecera) se mantienen.Esta opción está diseñada precisamente para mantener la funcionalidad de búsqueda y orden en las columnas filtradas.
Conflicto con HFilter previoNo hay conflicto. El .Filter de la tabla y un posible HFilter en el fichero son independientes.Si existe un HFilter definido ANTES de mostrar la tabla, el .Filter de la tabla tendrá prioridad y lo sobreescribirá.

En resumen, si necesitas un filtro visual rápido que no impacte el resto de tu lógica de negocio, deja la casilla desmarcada. Si, por el contrario, quieres que toda la navegación de datos subsiguiente respete el filtro de la tabla y además necesitas mantener las funcionalidades interactivas de las columnas, debes marcar esta opción.

Optimización al Cambiar Múltiples Propiedades

Un escenario común es la necesidad de cambiar no solo el filtro, sino también el fichero de datos o el ítem de ordenación de un control. Por ejemplo, permitir al usuario elegir entre ver "Clientes" o "Proveedores" y ordenarlos por "Nombre" o "Código".

Las propiedades implicadas serían .BrowsedFile, .BrowsedItem y .Filter. Un error común es modificar estas propiedades una por una:

// MÉTODO NO RECOMENDADO
TABLE_Datos.Filter = "NUEVO_FILTRO"
TABLE_Datos.BrowsedItem = "NuevoItemOrdenacion"
TABLE_Datos.BrowsedFile = "NuevoFichero"

Cada una de estas asignaciones provoca que el control reinicie la iteración y recargue los datos. En ficheros grandes, esto puede resultar en una experiencia de usuario lenta y con parpadeos. La forma correcta y optimizada de hacerlo es detener temporalmente la iteración, aplicar todos los cambios y luego reiniciarla.

Método recomendado para optimización:

// 1. Detener la iteración vaciando la propiedad .BrowsedFile
TABLE_Datos.BrowsedFile = ""

// 2. Modificar todas las propiedades necesarias
TABLE_Datos.Filter = "NUEVO_FILTRO"
TABLE_Datos.BrowsedItem = "NuevoItemOrdenacion"

// 3. Reiniciar la iteración asignando el fichero de datos final
TABLE_Datos.BrowsedFile = "NuevoFichero"

Este método asegura que el control solo se recargue una vez, después de que todas las configuraciones hayan sido aplicadas, mejorando drásticamente el rendimiento.

Limitaciones y Alternativas a Considerar

A pesar de su utilidad, .Filter no es una solución universal y tiene limitaciones importantes que debemos conocer para saber cuándo utilizar herramientas más avanzadas como la función HFilter.

¿Qué es la Property y cómo funciona?
la Property no se aplica sólo a la control Tabla, sino también a la el archivo de datos en la que se basa la control. Por lo tanto, una exploración realizada en el archivo base de la control será filtrada. A el archivo de datos se le aplica automáticamente un filtro ( HFilter) en el que se basa control Tabla.
  1. Solo filtros "Comienza por": No puedes usar .Filter para buscar subcadenas ("contiene"), terminaciones ("termina con") o realizar comparaciones numéricas (mayor que, menor que).
  2. No funciona con claves compuestas: Si el ítem de búsqueda de tu control está basado en una clave compuesta, .Filter no funcionará. En este caso, la alternativa obligatoria es usar la función HFilter.
  3. No identifica filtros de usuario: Si has habilitado los filtros interactivos en una tabla con TableEnableFilter, no podrás leer los filtros que el usuario aplique a través de la interfaz usando la propiedad .Filter. Son dos mecanismos independientes.

Cuando te encuentres con alguna de estas limitaciones, la solución recomendada es utilizar HFilter, una función mucho más versátil que te permite construir condiciones de filtro complejas sobre el fichero de datos directamente.

Preguntas Frecuentes (FAQ)

¿Puedo usar .Filter para buscar algo que esté en medio de una cadena de texto?

No. La propiedad .Filter está estrictamente limitada a búsquedas de tipo "Comienza por". Para búsquedas de tipo "contiene", debes recurrir a la función HFilter o filtrar los datos a través de una consulta (query) con la cláusula LIKE '%texto%'.

¿Cuál es la diferencia principal entre usar .Filter y la función HFilter?

La principal diferencia radica en el alcance y la complejidad. .Filter es simple, se aplica a un control específico, y solo realiza filtros "Comienza por". HFilter es una función potente que se aplica directamente al fichero de datos, afecta a toda la aplicación que navegue por ese fichero y permite condiciones complejas (AND, OR, >, <, CONTAINS, etc.).

¿Qué sucede si aplico un .Filter a una tabla que ya tiene un HFilter activo?

Depende de la configuración de la tabla. Si la casilla "Utilizar la función HFilter..." está desmarcada, ambos filtros pueden coexistir con resultados a veces confusos. Si la casilla está marcada, el .Filter de la tabla tendrá prioridad y reemplazará el HFilter que estuviera activo en el fichero de datos.

¿Funciona la propiedad .Filter en WINDEV Mobile?

Sí. La documentación oficial confirma que la propiedad .Filter está disponible y funciona de la misma manera en las tres plataformas del ecosistema PC SOFT: WINDEV, WEBDEV y WINDEV Mobile.

Conclusión

La propiedad .Filter es una herramienta formidable en el arsenal de cualquier desarrollador de WLanguage. Ofrece una solución elegante, rápida y de bajo código para una de las necesidades más recurrentes en el desarrollo de software: el filtrado de datos en la interfaz de usuario. Su simplicidad para aplicar y remover filtros en tablas, combos y loopers la convierte en la opción ideal para búsquedas rápidas y dinámicas.

Sin embargo, su verdadero dominio proviene de entender sus matices, especialmente el comportamiento dual en los controles Tabla y sus limitaciones inherentes. Saber cuándo .Filter es suficiente y cuándo es momento de escalar a la potencia de HFilter es clave para construir aplicaciones robustas, eficientes y con una gran experiencia de usuario.

Si quieres conocer otros artículos parecidos a Domina la Propiedad .Filter en WINDEV y WEBDEV puedes visitar la categoría Juegos.

Subir