Video filmado con GeneXus X Evolution 2 P age

Anuncio
Cargando los tipos de datos estructurados
En más de una oportunidad, necesitamos almacenar en memoria una lista de elementos que tienen el mismo
tipo de información pero distintos valores guardados.
Por ejemplo, la agencia de viajes puede necesitar realizar operaciones con un grupo de clientes que cumplan
cierto requisito,
Page
1
o nos pueden solicitar procesar información de algunos datos específicos de un conjunto de atracciones
turísticas
Video filmado con GeneXus X Evolution 2
y eso nos puede implicar tener que cargar estas listas temporalmente en memoria.
Para resolver este tipo de requisito, es necesario crear una estructura en memoria capaz de almacenar una
colección de elementos.
Page
2
Ya hemos visto que los tipos de datos estructurados nos permiten definir estructuras que almacenan varios
datos correspondientes a un elemento
Video filmado con GeneXus X Evolution 2
por ejemplo cuando almacenamos el identificador, el nombre y la dirección de un cliente
Page
3
Para almacenar varios elementos con datos de clientes,
Video filmado con GeneXus X Evolution 2
vimos que es necesario definir un tipo de datos estructurado
Page
4
y marcar que se trata de una colección
Video filmado con GeneXus X Evolution 2
Vamos a hacerlo en GeneXus…
Page
5
Seleccionamos al tipo de datos estructurado SDTCustomer que habíamos creado, presionamos el botón
derecho de mouse, elegimos “Save as…”
Video filmado con GeneXus X Evolution 2
y le damos el nombre SDTCustomers
Page
6
Ahora, hacemos clic en el checkbox “Is Collection”:
Video filmado con GeneXus X Evolution 2
Si comparamos la estructura del SDTCustomer y el SDTCustomers
Page
7
vemos que este último
Video filmado con GeneXus X Evolution 2
tiene los mismos miembros que el anterior, pero agrupados en una subestructura denominada
SDTCustomersItem
Page
8
Esta subestructura se creó automáticamente cuando marcamos que se trata de una colección
Video filmado con GeneXus X Evolution 2
Cada ítem almacenará los datos de un cliente
Page
9
y la colección, al conjunto de clientes
Video filmado con GeneXus X Evolution 2
Para cargar los datos de la colección vamos a utilizar un objeto Data Provider
Page
10
Este objeto nos permite cargar una estructura de datos
Video filmado con GeneXus X Evolution 2
(por ejemplo a partir de datos de la base de datos)
Page
11
y nos devuelve dicha estructura ya cargada
Video filmado con GeneXus X Evolution 2
Vamos a crear un objeto Data Provider en GeneXus.
Page
12
Presionamos Ctrl N, elegimos el tipo Data Provider y le ponemos al objeto el nombre: DataProviderCustomers
Video filmado con GeneXus X Evolution 2
Vemos que GeneXus nos posiciona en la sección Source del Data Provider
Aquí es donde vamos a declarar cómo queremos que se carguen los datos en la colección que queremos
devolver.
Observemos qué fácil resulta declarar la carga:
Page
13
Vamos a la ventana del Knowledge Base Navigator, ubicamos al tipo de datos estructurado SDTCustomers y lo
arrastramos hacia el Source del Data Provider
Video filmado con GeneXus X Evolution 2
Vemos que GeneXus escribió automáticamente varias líneas de texto.
Page
Observamos que GeneXus asignó el nombre de la colección SDTCustomers a la propiedad Output
14
Si abrimos las propiedades del DataProvider,
Video filmado con GeneXus X Evolution 2
Esto significa que el DataProvider devolverá una colección del tipo de datos estructurado SDTCustomers,
cargada con datos.
Como el SDTCustomers ya es una colección, no es necesario configurar la propiedad Collection con valor True
Esto lo haríamos si quisiéramos que el DataProvider nos devuelva una colección a partir de un tipo de datos
estructurado simple.
Page
15
Estudiemos ahora qué fue lo que escribió GeneXus en el source…
Video filmado con GeneXus X Evolution 2
Reconocemos el nombre del tipo de datos estructurado SDTCustomers que es una colección
y después entre llaves está la subestructura del ítem de la colección
Page
16
Comparemos esto con la estructura del SDT:
Video filmado con GeneXus X Evolution 2
Vemos que GeneXus representó en forma de texto la estructura del SDTCustomers
17
y nos dejó prontos los miembros Id, Name y Address
Page
del ítem SDTCustomersItem, para cargarles un valor.
Video filmado con GeneXus X Evolution 2
Como vamos a cargar esta colección a partir del contenido de la tabla CUSTOMER, le asignamos al miembro Id
el valor del atributo CustomerId
al miembro Name el valor del atributo CustomerName
Lo que estamos haciendo es simplemente declarando con qué valores queremos que GeneXus cargue la
colección de clientes, a partir de los valores de los atributos definidos en la transacción de clientes.
Video filmado con GeneXus X Evolution 2
Page
Observemos que en ningún lado estamos indicando a GeneXus cómo queremos que se carguen estos valores,
es decir que se debería navegar la tabla CUSTOMER y que para cada cliente encontrado, deberían copiarse sus
datos a un ítem de la colección.
18
y al miembro Address el valor del atributo CustomerAddress.
A partir de esta declaración, al encontrar atributos del lado derecho de las asignaciones
GeneXus trata de encontrar la tabla base que contiene a estos atributos, de forma similar a como se determinó
la tabla base de un For Each.
En este caso la tabla base es claramente: CUSTOMER
Page
19
Como estamos asignando valores a un ítem de una estructura del tipo colección, GeneXus recorre la tabla
CUSTOMER y para cada cliente encontrado, copia los datos almacenados en los atributos CustomerId,
CustomerName y CustomerAddress
Video filmado con GeneXus X Evolution 2
hacia los miembros Id, Name y Address de un nuevo ítem de la colección
El resultado final es que habrán quedado almacenados en la colección, los datos de todos los clientes de la base
de datos.
Vamos a crear ahora un objetoWeb Panel para visualizar el contenido de la colección de clientes. Un web panel
es un objeto muy versátil que nos permite entre otras cosas, desplegar información, ingresar datos o construir
una pantalla de inicio de nuestra aplicación.
Presionamos Ctrl N, seleccionamos el tipo de objeto web panel y le ponemos de nombre
WebPanelViewCustomers.
Page
20
Ahora vamos a la sección de variables del web panel y definimos una variable &Customers del tipo
SDTCustomers…
Video filmado con GeneXus X Evolution 2
Vamos a la sección Web Form y desde la ToolBox arrastramos un control de atributo o variable
Por tratarse de una variable de tipo SDT colección, GeneXus nos abre un cuadro de diálogo para seleccionar qué
Video filmado con GeneXus X Evolution 2
Page
21
y elegimos a la variable Customers
miembros del SDTCustomers queremos ver. Están todos seleccionados y como los queremos ver a todos,
presionamos OK.
Observamos que GeneXus creó en el Web Form una serie de controles
para visualizar los distintos elementos de la variable &Customers.
Page
22
Ahora vamos a la sección Events del web panel
Video filmado con GeneXus X Evolution 2
… y en el combo box de arriba a la derecha se nos ofrecen varios nombres de eventos y elegimos Start
Page
23
Al seleccionarlo, GeneXus escribe los comandos de inicio y fin del evento Start
Video filmado con GeneXus X Evolution 2
Vamos a codificar el evento start.
Escribimos & y elegimos a la variable Customers.
Ahora vamos a cargar esta variable del tipo colección, usando el DataProvider que creamos antes.
Para eso escribimos el signo de igual y luego vamos a la ventana Knowledge Base Navigator, ubicamos al
DataProvider Customers y lo arrastramos hasta la derecha del signo de igual.
Completamos la instrucción agregando 2 paréntesis:
Con esta instrucción que hemos escrito, estamos invocando al DataProviderCustomers, y éste retornará una
colección de clientes, que quedará cargada en la variable &Customers.
Page
24
Recordemos que la variable &Customers es del tipo SDTCustomers
Video filmado con GeneXus X Evolution 2
Y en el Data Provider
se carga y devuelve una colección de dicho tipo desde el momento que arrastramos SDTCustomers a su Source.
Page
25
Ahora bien, dado que ya hemos definido en el evento start del web panel que se cargue la variable &customers
invocando al Data Provider que definimos
Video filmado con GeneXus X Evolution 2
está todo listo para que presionemos F5 y podamos ver los datos cargados en la colección.
Video filmado con GeneXus X Evolution 2
Page
26
… y como ya incluimos a la variable &Customers en el Form
Vemos que GeneXus agregó un link correspondiente al Web Panel View Customers
Page
27
Hacemos click en el link …
Video filmado con GeneXus X Evolution 2
Y vemos desplegados en pantalla a todos los clientes que estaban almacenados en la base de datos.
Estos datos fueron extraídos de la base de datos por el Data Provider, cargados en memoria temporal en una
variable de tipo SDT colección y su contenido fue desplegado en el form del web panel.
En lugar de simplemente desplegar los datos, al estar disponibles en memoria, podríamos haber realizado algún
proceso u operaciones sobre los mismos sin necesidad de tener que acceder nuevamente a la base de datos
para obtenerlos.
Hemos visto la flexibilidad y potencia de los Data Providers para cargar datos en una estructura de datos, en
particular una del tipo colección y lo sencillo que fue declarar qué queríamos cargar, resolviendo GeneXus todo
lo necesario para llevarlo a cabo.
Page
28
Más adelante veremos otros ejemplos de uso de los Data Providers.
Video filmado con GeneXus X Evolution 2
Descargar