cargando los tipos de datos estructurados

28
Video filmado con GeneXus X Evolution 2 Page1 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, o nos pueden solicitar procesar información de algunos datos específicos de un conjunto de atracciones turísticas

Upload: others

Post on 26-Jul-2022

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e1

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,

o nos pueden solicitar procesar información de algunos datos específicos de un conjunto de atracciones turísticas

Page 2: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e2

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.

Ya hemos visto que los tipos de datos estructurados nos permiten definir estructuras que almacenan varios datos correspondientes a un elemento

Page 3: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e3

por ejemplo cuando almacenamos el identificador, el nombre y la dirección de un cliente

Para almacenar varios elementos con datos de clientes,

Page 4: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e4

vimos que es necesario definir un tipo de datos estructurado

y marcar que se trata de una colección

Page 5: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e5

Vamos a hacerlo en GeneXus…

Seleccionamos al tipo de datos estructurado SDTCustomer que habíamos creado, presionamos el botón derecho de mouse, elegimos “Save as…”

Page 6: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e6

y le damos el nombre SDTCustomers

Ahora, hacemos clic en el checkbox “Is Collection”:

Page 7: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e7

Si comparamos la estructura del SDTCustomer y el SDTCustomers

vemos que este último

Page 8: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e8

tiene los mismos miembros que el anterior, pero agrupados en una subestructura denominada SDTCustomersItem

Esta subestructura se creó automáticamente cuando marcamos que se trata de una colección

Page 9: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e9

Cada ítem almacenará los datos de un cliente

y la colección, al conjunto de clientes

Page 10: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e10

Para cargar los datos de la colección vamos a utilizar un objeto Data Provider

Este objeto nos permite cargar una estructura de datos

Page 11: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e11

(por ejemplo a partir de datos de la base de datos)

y nos devuelve dicha estructura ya cargada

Page 12: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e12

Vamos a crear un objeto Data Provider en GeneXus.

Presionamos Ctrl N, elegimos el tipo Data Provider y le ponemos al objeto el nombre: DataProviderCustomers

Page 13: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e13

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: Vamos a la ventana del Knowledge Base Navigator, ubicamos al tipo de datos estructurado SDTCustomers y lo arrastramos hacia el Source del Data Provider

Page 14: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e14

Vemos que GeneXus escribió automáticamente varias líneas de texto.

Si abrimos las propiedades del DataProvider,

Observamos que GeneXus asignó el nombre de la colección SDTCustomers a la propiedad Output

Page 15: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e15

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. Estudiemos ahora qué fue lo que escribió GeneXus en el source…

Page 16: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e16

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

Comparemos esto con la estructura del SDT:

Page 17: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e17

Vemos que GeneXus representó en forma de texto la estructura del SDTCustomers

y nos dejó prontos los miembros Id, Name y Address

del ítem SDTCustomersItem, para cargarles un valor.

Page 18: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e18

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

y al miembro Address el valor del atributo CustomerAddress.

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. 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.

Page 19: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e19

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

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

Page 20: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e20

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.

Ahora vamos a la sección de variables del web panel y definimos una variable &Customers del tipo SDTCustomers…

Page 21: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e21

Vamos a la sección Web Form y desde la ToolBox arrastramos un control de atributo o variable

y elegimos a la variable Customers

Por tratarse de una variable de tipo SDT colección, GeneXus nos abre un cuadro de diálogo para seleccionar qué

Page 22: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e22

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. Ahora vamos a la sección Events del web panel

Page 23: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e23

… y en el combo box de arriba a la derecha se nos ofrecen varios nombres de eventos y elegimos Start

Al seleccionarlo, GeneXus escribe los comandos de inicio y fin del evento Start

Page 24: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e24

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. Recordemos que la variable &Customers es del tipo SDTCustomers

Page 25: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e25

Y en el Data Provider

se carga y devuelve una colección de dicho tipo desde el momento que arrastramos SDTCustomers a su Source. 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

Page 26: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e26

… y como ya incluimos a la variable &Customers en el Form

está todo listo para que presionemos F5 y podamos ver los datos cargados en la colección.

Page 27: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e27

Vemos que GeneXus agregó un link correspondiente al Web Panel View Customers

Hacemos click en el link …

Page 28: Cargando los tipos de datos estructurados

Video filmado con GeneXus X Evolution 2

Pag

e28

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. Más adelante veremos otros ejemplos de uso de los Data Providers.