miércoles, 4 de julio de 2012

Cuentos de personalizaciones avanzadas en LightSwitch

El siguiente texto es una traducción de una parte del articulo publicado en el MSDN Magazine por Jan Van der Haegen titulado "Tales of Advanced LightSwitch Client Customizations".

El Mega-Filtro

Voy a ser honesto: mis conocimientos de SQL Server están actualmente un poco oxidados. ¿Quién me puede culpar por recurrir a LightSwitch con su diseñador de consultas visual impresionante que se adapta a todas mis necesidades? Bob, el gerente de una gran cadena de distribución con tiendas en numerosos países, me pidió un software para ayudarle a manejar el back-end de los negocios de la compañía. En concreto, quería una pantalla que le permitiera navegar por los tickets desde diversos puntos.

Esto es lo que me dijo Bob: "Un ticket proviene de una tienda en particular que pertenece a una cadena en particular, que se encuentra en una ciudad o región en particular. Está hecho para un cliente en particular, por un empleado en particular, en una fecha y hora determinada, y que contiene las ventas de unos determinados artículos, abonados con una forma de pago determinada. Sólo en raras ocasiones nuestros empleados están interesados ​​en consultar los tickets y lo hacen únicamente filtrando por la fecha de inicio o el importe total. Pero tenemos algunos casos que filtramos por las categorías que acabo de mencionar. " 

Historias como esta por lo general significan que el cliente no tiene realmente un caso en mente, pero quiere una aplicación haga lo que desea, cuando él quiera. Teniendo en cuenta que el cliente siempre tiene la razón, empecé a pensar en una mega-consulta que pudiera atender las necesidades de Bob.

Yo puedo crear una consulta muy grande en el diseñador de consultas LightSwitch sin mucho esfuerzo, pero he simplificado la consulta requerida porque una versión más realista  no cabría en una sola pantalla y no sería capaz de mostrarle toda la consulta (Figura 1).

Figura 1 - Una consulta avanzada en LightSwitch

La Figura 2 muestra una pantalla generada a partir de la consulta en la Figura 1. En la barra de comandos, hice clic en Agregar pantalla ("Add Screen") y luego seleccioné la pantalla de búsqueda de datos ("Search Data Screen"). De forma predeterminada, LightSwitch crea una pantalla y la abre en modo diseño.

Figura 2 - Pantalla generada desde la consulta de la Figura 1

En tiempo de ejecución, Bob puede ahora buscar tickets con cualquier combinación de los parámetros opcionales que se muestran en la Figura 3: Identificador de tienda, Cliente, Importe (mínimo o máximo), Hora de inicio y Hora de fin.

Figura 3 - Pantalla de búsqueda con los criterios de filtro

Bob probablemente no ha memorizado el identificador de cada tienda, de modo que el campo de búsqueda no es muy útil tal como está. Tiene que ser capaz de seleccionar una tienda por su nombre en lugar de tener que introducir el identificador manualmente.

Al igual que todas las cosas en LightSwitch, estamos a sólo un par de clics para darle a Bob lo que quiere. En el diseñador de pantalla, hice clic en el botón Agregar elemento de datos ("Add Data Item") en la barra de comandos, y después agregué una nueva propiedad local ("Local Property") de tipo Shop (Entity) como se muestra en la Figura 4 .

Figura 4 - Ventana Agregar elemento de datos ("Add Data Item")

Desde el lado izquierdo de la pantalla de diseño, arrastré esta entidad Shop al centro de la pantalla y eliminé el control de identificador de tickets, ya que no sería necesario. Despues puedo cambiar el control que está siendo utilizado por un Combobox ("Auto Complete Box") o un Selector de ventana modal ("Modal Window Picker"), que encaja en nuestra solución particular. La Figura 5 muestra el resultado de estas modificaciones en el árbol visual.

Figura 5 - Enlazando los filtros de la consulta en la pantalla de diseño

Esto se encarga de los controles, pero en la capa ViewModel (en el lado izquierdo de la pantalla de diseño), observe que el parámetro de consulta ShopId sigue vinculado a la propiedad local TicketShopId, que ya no aparece en la pantalla. Para corregir esto, he seleccionado ShopId en el panel de propiedades y cambiado el valor de enlace ("Parameter Binding")  a ShopId, como se puede ver en la Figura 5. La próxima vez que inicie la aplicación, la sección de criterios de filtro tiene un selector de ventana modal (o un combobox si hubiera querido) donde antes estaba el identificador de tienda, como se muestra en la Figura 6.

Figura 6 - Mejora en la pantalla de búsqueda

Cuando se hace clic en ... (puntos suspensivos) a la derecha de la caja de la tienda, se abre una ventana de selección modal como se ve en la Figura 7. Desde ahí, Bob y sus empleados pueden seleccionar la tienda en particular que desean revisar.

Figura 7 - Seleccionar tienda en una ventana modal

Bob quiere tener todas las posibilidades de uso que se le ocurra en una única pantalla (no es algo que recomiendo, porque la creación de una pantalla alrededor de cada proceso de negocio por separado o caso de uso es más efectivo). Eso es lo que Bob quería, sin embargo, para que le sirva de ayuda hay que repetir este proceso para parámetros tales como empleado, cadena, región, forma de pago, cliente, estación de trabajo, artículo, clasificación y otras categorías posibles que puedan surgir.