Programando el evento Load de un Web Panel

Anuncio
Programando el evento Load de un Web Panel
Comenzamos esta demo habiendo ya agregado al segundo nivel de Flight el atributo CustomerId para poder
asignarle al asiento del vuelo, el pasajero correspondiente.
Ya reorganizamos, ejecutamos y agregamos más datos de aerolíneas, clientes y vuelos, de los que teníamos. Si viene
reproduciendo lo visto, haga usted también todo esto antes de continuar.
Ahora, supongamos que en vez de desplegar para cada cliente su dirección,
Page
1
queremos desplegar el total gastado en sus vuelos (es decir, la suma de los precios de los vuelos en los que el cliente
está registrado).
Video filmado con GeneXus X Evolution 2
Esta información tendremos que calcularla para cada cliente dado que no tenemos un atributo que contenga ese
dato.
Por ejemplo, si esta es la tabla de clientes, al cargar el cliente 1, el atributo fórmula, CustomerFullName, se calcula…
Y debemos recorrer la tabla de asientos de los vuelos, y para cada asiento donde esté el cliente, encontrar el valor
del precio del vuelo,, FlightFinalPrice, fórmula asociada a la tabla Flight. Sumamos todos esos precios… y tenemos
que cargar en el grid ese resultado, junto con el nombre completo del cliente… y así sucesivamente para cada cliente
de la tabla Customer.
Para ello, en el grid insertaremos una variable, que calcularemos con este código…donde inicializamos la variable en
cero y luego en un for each que recorre la tabla FlightSeat, sumamos el precio del vuelo al valor de la variable.
Al culminar el código, queremos que se cargue la línea en el grid, mostrando el nombre completo del cliente y el
precio de sus vuelos. Y así para cada cliente.
Pero… ¿dónde especificamos este código?
Tiene que ejecutarse inmediatamente antes de cargar los datos de cada cliente en el grid (antes de cargar cada
línea).
Este momento es el evento de nombre Load.
Se producirá una vez por cada registro a cargar en el grid y justo antes de cargarlo… (luego veremos un caso en que
se produce una sola vez, aunque haya que cargar varias líneas en el grid).
Así, si tenemos 3 clientes, ocurrirá tres veces.
Page
2
Vamos entonces a hacerlo. Insertamos una nueva columna, y allí definimos una nueva variable, flightPrices, basada
por ejemplo en el dominio Price, y la insertamos…
Video filmado con GeneXus X Evolution 2
Vamos a la sección de Eventos, y aquí elegimos entre los distintos eventos del sistema, aquel al que queremos
asociarle un código para que se ejecute al ocurrir el evento.
Page
3
Le asociamos el código que habíamos pensado…
Video filmado con GeneXus X Evolution 2
Y presionamos F5 para ejecutar.
Tenemos 11 clientes en la base de datos y si atendemos al cargado en la primera línea, dice que el precio final es
6400, que debería ser la suma de… 2250, más…2250 más 1900 (ese era el último vuelo)…
Page
4
Si observamos el listado de navegación:
Video filmado con GeneXus X Evolution 2
Page
5
Podemos ver anidado a la recorrida de la tabla base del grid, Customer, el for each que escribimos dentro del evento
Load, que GeneXus infirió que accede a la tabla FlightSeat, tal como esperábamos. Observemos que, al igual que en
el caso de for eachs anidados, GeneXus encuentra el atributo que los relaciona, y filtra por él.
Video filmado con GeneXus X Evolution 2
Descargar