Programando el Evento Refresh de un Web Panel Teníamos un web panel que desplegaba información de los clientes y permitía filtrar la información desplegada por nombre completo del cliente. Si ahora queremos ver bajo el grid el total gastado entre todos los clientes, vamos a tener que calcularlo y desplegarlo en una variable, dado que no tenemos un atributo en la base de datos con esa información.… Insertamos entonces dentro de una tabla…una nueva variable &totalFlightPrices, basada en el atributo FlightFinalPrice… ¿Dónde asignamos valor a esta variable? Cuando se realiza la carga del grid, antes de cargar cada línea hay que ir sumándole a la variable el total gastado por ese cliente. El evento que ocurre para cada línea y antes de cargarla en el grid es el LOAD, por lo cual es en este evento en el que hay que ir sumando. Cada vez que se cargue una nueva línea del grid, … … al valor que tenía la variable, le sumamos el precio de los vuelos del cliente que se carga en esa oportunidad… Page 1 Veámoslo en ejecución. F5. Video filmado con GeneXus X Evolution 2 Como primera cosa observemos que la variable es de entrada Ya habíamos dicho que si no modificamos nada, las que se encuentren en la parte fija lo serán. Como en este caso queremos que sea de salida, tendremos que indicárselo F5. Suma: 30450 Page 2 Si ahora filtramos por Heminway, cuyos vuelos suman 4150… debería decir 4150 Video filmado con GeneXus X Evolution 2 Sin embargo se sumó a la cantidad anterior 30450, la nueva 4150… Es que debemos poner en 0 la variable antes de que se comience a cargar el grid… cada vez que se vuelva a cargar. El momento oportuno es el evento Refresh, que como el evento Load, puede programarse. 3 Observemos que el orden en que aparecen aquí escritos los eventos no tiene ninguna importancia. De hecho, acabamos de ver que antes de comenzar a cargar el grid se ejecuta el Evento Refresh y a continuación y para cada línea se ejecuta el código escrito dentro del Evento Load (al revés de como aparecen escritos). Page Ejecutemos, F5 Ahora al filtrar por ejemplo por B… está mostrando la cantidad correcta. Video filmado con GeneXus X Evolution 2 Esto es porque se produce el Refresh que pone en cero la variable y produce un acceso a la base de datos… Donde por cada registro de la tabla a ser cargado, se produce un evento Load, que calcula el valor de la variable &flightPrices, desplegándolo en el grid, pero además incrementa el de la variable &totalFlightPrices Page 4 Que luego de ejecutarse los 3 Loads, quedará con su valor final. Video filmado con GeneXus X Evolution 2