jueves, 19 de julio de 2012

Navegación personalizada de registros: Calendario de partidos de fútbol

Muchas veces necesitamos crear secuencias de navegación sobre la misma entidad, haciendo un corte por uno de sus elementos. Por ejemplo, tenemos el calendario de un campeonato de fútbol y queremos mostrarlo listando los partidos para cada fecha del campeonato, teniendo la posibilidad de navegar para atrás y para adelante en las fechas, por ejemplo algo como lo siguiente:


Las flechas de la parte superior permiten navegar hacia la fecha anterior y siguiente respectivamente.

Para desarrollar esto en GeneXus partimos de una transaccion Partidos:


A la cual le aplicamos el Pattern Work With for Smart Devices y definimos un List con el siguiente Layout:


Además en la grilla de dicho Layout configuramos Data Selector = FiltroJornada, siendo la definición del Data Selector de la siguiente forma:


El procedimiento GetJornadaSesion simplemente trae el valor del a Jornada "actual" de la Web Session

Rules:
parm(out: &JornadaNumero)
Source:
&JornadaNumero = &WebSession.Get('JornadaVer').ToNumeric()

Luego necesitamos editar el código de los eventos "FechaAnterior" y "FechaSiguiente" asociados a las imágenes de las flechas para ir para atrás y adelante.

Event 'Fecha Anterior'
   Composite
      SetJornadaSesionRestar.Call()
      SDActions.Refresh()
   EndComposite
EndEvent


Event 'Fecha Siguiente'
   Composite
      SetJornadaSesion.Call()
      SDActions.Refresh()
   EndComposite
EndEvent

Los procedimientos SetJornadaSesion y SetJornadaSesionRestar lo que hacen es obtener el valor de la Jornada "actual" de la sesión, sumar o restar 1 a dicho valor y volver a almacenarlo en la WebSession. También en este caso chequean que no se vaya de rango dicho valor, o sea, que no tome un valor menor que 1 o mayor al valor de la última fecha.

El último paso necesario para que esta implementación funcione correctamente es deshabilitar el caching en el List para que la lista de partidos se actualice correctamente, configurando la propiedad Enable Data Caching en False en la instancia del Pattern Work With for Smart Devices de la transacción Partidos. Esto se debe a como está implementado el caching en aplicaciones GeneXus para Smart Devices, sumado a que el filtro que se maneja para el List se almacena en la Web Session.

Listo! Ya tenemos implementado nuestro calendario de partidos de la forma deseada. La ventaja principal de esta implementación es que permite iniciar la visualización en cualquiera de las fechas, simplemente tenemos que configurar el valor de la jornada actual en la Web Session y llamar al List creado.

La aplicación Liga MVD (liga de fútbol amateur de Uruguay) utiliza esta implementación para mostrar el calendario de partidos, para verlo en funcionamiento se puede descargar la vesión para iPhone/iPad desde el Apple AppStore y la versión para Android desde el Google Play.

No hay comentarios:

Publicar un comentario en la entrada