Maldivas Interfaces 1 - Sistemas de Búsqueda
Una de las funcionalidades mas importantes en la mayoría de los programas de gestión son las interfaces de búsqueda, un interface de búsqueda debe ser rápido y usarse con facilidad, de el depende en gran medida la versatilidad del programa. En Maldivas utilizamos varias formas diferentes de realizar búsquedas, el primero lo conocí en una Entidad Bancaria hace varios años y desde entonces siempre lo implemento en mis aplicaciones. La mayor parte de los interfaces de búsqueda que he visto, suelen partir de una lista de campos que permiten que el usuario seleccione uno de ellos, introduzca un valor y realice la búsqueda.
El sistema que presento aquí, es relativamente sencillo de implementar y aporta varias ventajas.
El primer paso cuando pulsamos sobre el botón de búsqueda, es situar el formulario en blanco. Quedaría mas o menos así:
Si el usuario introduce el valor en el campo identificativo, la búsqueda se realiza de forma automática, ya que este campo es único. En este caso, cuando introduzco el valor 23 en el código, el registro es buscado y mostrado de forma automática.
Cuando realizamos una búsqueda por otros campos podemos introducir información en varios de ellos, en el ejemplo siguiente introducimos varios valores. Utilizamos para activar el proceso dos teclas de función, F11 que realiza la búsqueda del primer registro coincidente y F12 que realiza la búsqueda de todos los registros que cumplan las condiciones determinadas por los valores introducidos. En este último caso, si el proceso encuentra un solo registro, este se muestra directamente en el formulario.
En este caso la búsqueda solo encuentra un registro que cumple las condiciones especificadas y lo muestra.
Si realizamos una búsqueda de las zonas que tengan el valor "Nacional" el sistema encuentra varios registros y los muestra en un formulario diferente.
En el, podemos seleccionar el registro que nos interese visualizar o realizar otras funciones como filtrar mas los resultados o imprimir el conjunto de registros seleccionados, para realizar este tipo de operaciones el sistema permite limitar los campos que se quieren imprimir, puesto que en un informe A4, seria difícil poder visualizar todos los campos, en el ejemplo limitaremos los campos al código, nombre y la zona_iva.
Después de esto, el formulario muestra las columnas seleccionadas.
A continuación podríamos exportarlos a PDF quedando el informe así:
Ventajas:
Este sistema permite realizar búsquedas complejas utilizando varios campos, con la ventaja de aprovechar posteriormente los resultados para realizar informes sencillos en varios formatos.
Al usuario le resulta muy cómodo de utilizar ya que habitualmente conoce la ubicación de los campos y no tiene que perder tiempo en buscarlos a través de una lista de campos.
Evitaremos tener que introducir los códigos que muchas veces desconocemos, en el siguiente ejemplo, vemos que será mas sencillo realizar la búsqueda a partir de la selección del valor de un combo que acordarnos del código de la forma de pago, en este caso "Compensación" que corresponde con el valor "0002", que es el utilizaríamos para realizar la búsqueda en otros sistemas.
Si utilizamos una entidad, dataset o cualquier objeto enlazado al formulario debemos crear un nuevo objeto vacío y mostrarlo en el formulario. Una vez introducidos los datos el sistema, este debe comparar los valores del objeto con uno vacío para obtener aquellos campos y valores que han cambiado. Esta información conjuntamente a la información de los metadatos del objeto, permiten generar en tiempo de ejecución una sentencia Sql para realizar la búsqueda.
Si utilizáis un modelo basado en DataSet necesitareis la información de la clase para obtener los metadatos y el estado de las filas para realizar la comparación. Podéis encontrar mas información en:
http://msdn.microsoft.com/es-es/library/system.data.datarowstate(VS.80).aspx
Si vuestra intención es utilizar Entity FrameWork deberéis utilizar de los metadatos de la entidad y comparar los valores anteriores con los actuales. Podéis encontrar mas información en:
http://msdn.microsoft.com/en-us/library/system.data.objects.objectstateentry.aspx
En Maldivas utilizamos la técnica de reflexión para obtener la información de los metadatos y los valores de la clase para realizar la consulta. De esta forma podemos generar una sentencia sql en tiempo de ejecución en base a los campos que han cambiado similar a esta:
"SELECT * FROM Gestion.Interlocutores_zonas WHERE Nombre LIKE '%' + @nombre+ '%' AND Zona_iva LIKE '%' + @zonaIva + '%')"
Si os fijáis introducimos la cláusula like en los campos de tipo string, para buscar valores que se encuentren en cualquier parte del campo.
Otro de los sistemas de búsqueda que hemos incorporado es el que se observa en la barra de herramientas situada en la parte superior del formulario.
Este proceso nos permite realizar búsquedas de una forma mucho mas "rápida", en cuanto al trabajo por parte del usuario se refiere y funciona de la siguiente manera:
El usuario introduce cualquier valor, un número, una fecha, una cadena, etc, el sistema analiza los campos de la entidad que tienen el mismo tipo del valor buscado, en el caso por ejemplo de una fecha el sistema solo preguntara por aquellos campos que sean de tipo datetime, en este ejemplo vamos a introducir una cadena, "Interior", vemos como el sistema realiza una búsqueda y obtiene un conjunto de registrosque tienen esta cadena en cualquiera de sus campos de tipo string.
La gran ventaja de este sistema es la facilidad de uso por parte del usuario, y la gran desventaja es que la velocidad de búsqueda es mas baja ya que la sentencia Sql que se genera tiene que evaluar todos los campos de tipos similares, para ver esto la consulta del ejemplo anterior seria algo como:
"SELECT * FROM Gestion.Interlocutores_zonas WHERE Codigo LIKE '%' + @valor + '%' OR Zona_iva LIKE '%' + @valor + '%' OR Zona_politica LIKE '%' + @valor + '%' OR Zona_tipo LIKE '%' + @valor + '%' OR Zona_cc LIKE '%' + @valor + '%' OR Nombre LIKE '%' + @valor + '%' )"
Por supuesto si la tabla tiene 100 campos, la sentencia que se puede generar es inmensa, aunque las pruebas que hemos realizados sobre tablas de unos 10000 registros con 200 campos se realiza en menos de tres segundos. Lógicamente esto dependerá de diferentes factores como Hardware del Servidor, Índices y otros factores.
Por último el sistema de búsqueda que nos proporciona el uso de los controles que utilizamos, de la marca Devexpress, en este caso el grid situado a la izquierda nos permite cambiar el orden y buscar sobre cualquier campo.
Al igual que en la cláusula like de Sql si eliminamos el símbolo % filtraría todos los registros que comiencen por el valor introducido
El control esta sincronizado con el formulario, de manera que si nos situamos en cualquiera de los registros del grid, el formulario muestra sus datos.
Otra de las ventajas de estos controles es que permiten visualizar y modificar las condiciones de filtrado en tiempo de ejecución:
Además de estas opciones de búsqueda, hemos implementado el sistema de desplazamiento de registros, ordenación y filtrado que permite al usuario trabajar con un conjunto de registros, hablare de ellos, en el próximo post sobre Interfaces.