Cargando los tipos de datos compuestos

Documentos relacionados
Dos formas de devolver una colección con un Data Provider

Tipos de datos estructurados

Introducción a procedimientos, listados y comando For each

Cláusula Unique. La cláusula Unique permite mencionar atributos cuyos valores no deben salir duplicados en el resultado de la consulta.

Reporting (objeto Query)

En el ejemplo, se procede en este orden:

Qué son los subtipos?

Relaciones entre entidades de la realidad

Fórmulas Globales. Page1. Video filmado con GeneXus X Evolution 2

Creando una aplicación móvil con GeneXus para trabajar con los Materiales del SAP ERP parte 4

Diseñando la primera transacción

El listado de navegación nos informa claramente que la tabla base es ATTRACTION, que la recorrida será ordenada por la clave primaria de dicha tabla:

Script For each simple tabla base y cláusula order

Momentos de disparo de reglas en transacciones

1.- CREACIÓN DE CONSULTAS.

Creación de la KB. Page1. Video filmado con GeneXus X Evolution 3. Vamos a ejecutar a GeneXus

Administrando las bases de conocimiento (GXserver)

Demo: empezando a desarrollar la aplicación en su parte web

Consulta con salida Chart (Parte I)

Aplicación del GAM. Una vez autenticado el usuario podrá comenzar a utilizar la aplicación.

Programando el Evento Start, Click o De usuario en un Web Panel

Acceso a bases de datos externas

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Cómo enviar un mail automático y ejecución del acceso a la API programado previamente

Sistema de Gestión y almacenamiento de archivos en el Campus Virtual

Edición y personalización de la instancia del pattern Work With aplicado a una transacción

Práctica #1 Crear Base de Datos

Overview GeneXus - Demo: 2.Cómo obtener el ejecutable de la KB y declaración de algunas reglas del negocio.

Cómo implementar un menú de entrada para la aplicación móvil

NERO BURNING ROM. Manual de grabación. By CriCri

Modificación de dato relevante, evento timer y calendarios

Bases de Datos Relacionales con Base de OpenOffice y consultas SQL para Tecnología de la Información.

Tramita tu Sello Digital

Calificaciones de Moodle

UNIDAD 4. MODIFICAR TABLAS DE DATOS

Configuración y manejo de los descuentos.

COBHTTPD-CGILIB. Librería para creación de Paginas web Dinámicas con COBOL. Manual de Templates. COBHTTPD Manual de Templates

Actualización a GX Ev3. Ejercicios Prácticos

InterBase / Firebird: el uso de eventos

UNIDAD 9 COMBINAR CORRESPONDENCIA

Cómo gestionar el correo procedente de la lista de correo de la Asamblea. Recomendaciones de la Comisión de Comunicación - HOTMAIL

11.2. Manual de GTC 2.0: El primer contacto

Guía docente: Cómo crear un test y los tipos de preguntas

FIRMA ELECTRÓNICA INSTALACIÓN Y USO DE CERTIFICADOS EN ARCHIVO PKCS#12 MANUAL DE USUARIO V1.1 14/07/2015

EJEMPLO 2. TABLAS CREAR DESPLEGABLE PARA FILTRAR LOS DATOS

Personal. Partes de Trabajo WhitePaper Agosto 2008

Impresión en formato PDF con

COMBINAR CORRESPONDENCIA

MANUAL DE USUARIO. Sistema CLASS Profesores

Universidad Tecnológica de los Andes. Ing. Hesmeralda Rojas Enriquez [GUÍA RATIONAL ROSE] Usando UML

Manual Word Macros y Elementos rápidos

Práctica 2 Animaciones

CONEXIÓN A EDUROAM DESDE WINDOWS 7

1. Instalar el componente en el sitio por Extensiones gestor de extensiones.

FUNCIONES EN EXCEL III

easypos Restaurantes y Bares Configuración Inicial

TUTORIAL SOBRE HOJAS DE CALCULO

Lola Maicas 1 PORTADA 2 BARRA DE HERRAMIENTAS

Manual de ayuda de la herramienta de comunicación privada Correo Interno

EBRARY. Descripción general de la base Permite el acceso a más de 31,800 libros electrónicos en texto completo de múltiples disciplinas.

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

PODER JUDICIAL DE LA NACION ARGENTINA

Para añadir un presupuesto nuevo seleccionaremos en el apartado Presupuestos la opción en la parte superior Añadir.

Base de Datos. Formularios. Consultas

Tema 3. Aplicaciones de Tipo Consola

MANUAL DE USUARIO. Sistema CLASS Profesores

MANUAL DE PROGRAMACIÓN PARA BASES DE DATOS 1.0 MySQL

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

Guía rápida de uso de Visual Sueldos

COMO CREAR UNA RED LOCAL ENTRE EQUIPOS CON WINDOWS

Diagramas de secuencia

Introducción a la Programación en Visual Basic y su aplicación en Excel. M.I. Jaime Alfonso Reyes Cortés

DESCRIPCION PASO A PASO PARA SOLICITAR FICHA PARA PRESENTAR EL EXAMEN DE SELECCIÓN EN EL INSTITUTO TECNOLOGICO DE ACAPULCO.

TABLAS WORD La tercer opción es usar el vínculo Dibujar Tabla, aquí se dimensiona la tabla dibujándola con el mouse

OPENOFFICE IMPRESS. Creación básica de presentaciones digitales

GESTIÓN DEL CORREO. Buscar y marcar mensajes. Buscar mensajes: Revisar leídos y no leídos

Manual Word Plantillas y Formularios

Bing (proveedor de busqueda) Bing es una herramienta de búsqueda que nos ayudará a encontrar lo que buscamos de forma rápida y sencilla.

MANUAL PARA CREAR NUESTRA PAGINA WEB EN DREAMWEAVER

Integridad Transaccional

CREACIÓN Y MANEJO DE TABLAS Instructivo N 1

Dropbox. Fuente: (dropbox, 2011)

Manual de usuario Mensajería Centro Virtual de Educación

Estos márgenes se definen en el menú Archivo, Configurar página... se nos muestra un cuadro de dialogo como este con tres pestañas:

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

Microsoft Word. Microsoft Word 2013 SALOMÓN CCANCE. Manual de Referencia para usuarios. Salomón Ccance CCANCE WEBSITE

Ministerio de Educación. Base de datos en la Enseñanza. Open Office. Módulo 3: Elementos esenciales del formulario

Todas las tareas que se realizan en un computador implican el uso de archivos y carpetas.

Transcripción:

Cargando los tipos de datos compuestos 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 Page1

que cumplan cierto requisito... O nos pueden solicitar procesar información de algunos datos específicos de un conjunto de atracciones turísticas y eso nos puede implicar tener que cargar estas listas temporalmente en memoria. Page2 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, como en este ejemplo SDTCustomer: nos permiten definir estructuras que almacenan varios datos correspondientes a un elemento En esta representación gráfica que vimos entonces, estamos almacenando en memoria el identificador, el nombre y la dirección de un cliente. Para almacenar varios elementos con datos de clientes, vimos que es necesario definir un tipo de datos estructurado Page3

y marcar que se trata de una colección Vayamos ahora a GeneXus para implementar un nuevo requerimiento solicitado por la agencia de viajes. La Agencia de viajes desea ofrecer a sus clientes un ranking de países según la cantidad de atracciones turísticas que ofrecen. Page4

Es decir que debemos mostrar todos los países, ordenados de mayor a menor, en lo que se refiere a la cantidad de atracciones que poseen. Para poder resolver este requerimiento, necesitamos primero cargar en alguna estructura a todos los países almacenados en la base de datos, cada uno con su correspondiente cantidad de atracciones turísticas. Y luego, tendremos que ordenarlos de mayor a menor por dicha cantidad, para finalmente mostrarlos, ya sea en un web panel o en un listado. Comencemos entonces creando un nuevo objeto de tipo: structure data type y le damos el nombre: SDTCountries. De cada país necesitamos el identificador, el nombre y la cantidad de atracciones turísticas registradas para el mismo: Ponemos entonces CountryAttractionsQuantity Page5

Con esta definición estamos representando que se guardará en memoria la información asociada a un solo país. Pero nosotros necesitamos diseñar un ranking de países, por lo tanto necesitamos almacenar en memoria muchos países. Así que marcamos la casilla Is collection para tener entonces una estructura que permita almacenar la información de muchos países. Observemos que ahora esta estructura tiene los mismos miembros que definimos al comienzo, pero agrupados en una subestructura denominada SDTCountriesItem. Esta subestructura se creó automáticamente cuando marcamos que se trata de una colección. Cada ítem almacenará los datos de 1 país, y el conjunto de ítems con países conforman la colección. Para cargar los datos de la colección vamos a utilizar un objeto Data Provider Page6

El objeto Data Provider, nos permite cargar una estructura de datos, por ejemplo a partir de datos de la base de datos, y nos devuelve la estructura cargada Vamos entonces a GeneXus entonces, a crear un objeto Data Provider. Elegimos el tipo Data Provider y ponemos como nombre: DPRankingCountriesWithAttractionsQty. Vemos que GeneXus nos posiciona en la sección Source del Data Provider... Page7

Y 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 SDTCountries y lo arrastramos hacia el Source del Data Provider Vemos que GeneXus escribió automáticamente varias líneas de texto. Si observamos ahora las propiedades del DataProvider, Page8

Observamos que GeneXus asignó el nombre de la colección SDTCountries a la propiedad Output Esto significa que el DataProvider devolverá una colección del tipo de datos estructurado SDTCountries, cargada con datos. Como el SDTCountries ya es una colección, no es necesario configurar la propiedad Collection del Data Provider 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. Page9 Estudiemos ahora qué fue lo que escribió GeneXus en el source

Reconocemos el nombre del tipo de datos estructurado SDTCountries 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: Page10

Vemos que GeneXus representó en forma de texto la estructura del SDTCountries y nos dejó prontos los miembros Id, Name y CountryAttractionsQuantity, de la subestructura SDTCountriesItem para cargarles su valor. Como vamos a cargar esta colección a partir del contenido de la tabla COUNTRY, debemos indicarle al Data Provider que deberá recorrer dicha tabla. Para eso utilizamos la cláusula From y al lado ponemos el nombre de la transacción cuya tabla base queremos recorrer. En nuestro caso: From Country Si la transacción tuviera más de un nivel, para especificar un nivel determinado, asociado a cierta tabla base que queremos navegar, tendríamos que escribir: el nombre de la transacción, punto, y el nombre del nivel. Page11

Bien. Ahora vamos a indicar que al elemento Id lo queremos cargar con el valor del atributo CountryId, al miembro Name lo queremos cargar con el valor de CountryNam, y al miembro CountryAttractionsQuantity lo queremos cargar con la cantidad de atracciones turísticas que tiene cada país, así que asignamos a este miembro: el resultado de la fórmula Count(AttractionName) Repasemos un concepto ya estudiado. y es que esta fórmula inline definida, navegará la tabla ATTRACTION, por el atributo indicado dentro del paréntesis. Y además, como hay 1 atributo en común en las tablas navegadas por el Data Provider, que es CountryId, la fórmula contará las atracciones del país navegado por el Data Provider cada vez. De modo que lo que hemos hecho simplemente ha sido: declarar 1 tabla a ser navegada por el Data Provider, y para cada registro accedido, hemos indicado los valores que deseamos asignar a un ítem nuevo en la colección de países. Dado que el Data Provider recorre la tabla COUNTRY, solemos decir que la tabla base del Data Provider, es COUNTRY: Page12 El resultado final será que habrán quedado almacenados en la colección en memoria, los datos de todos los países de la base de datos, c/u de ellos con su cantidad de atracciones.

Salvamos la definición de este Data Provider, y vamos a crear ahora un objeto Procedimiento para visualizar el contenido de la colección de países. A este procedimiento le ponemos como nombre PrintRanking. Vamos ahora a la sección variables de este procedimiento y definimos una variable &Countries de tipo de dato SDTCountries Vamos ahora al soruce escribimos &, elegimos a nuestra variable Countries. Y vamos a cargar a esta variable de tipo colección, asignándole el resultado que devuelva el Data Provider que acabamos de crear. Así que escribimos el signo de igual y desde la ventana Knowledge Base Navigator, ubicamos al Data Provider y lo arrastramos. Completamos esta instrucción agregando 2 paréntesis Con esta instrucción que hemos escrito, estamos invocando al Data Provider y éste retornará una colección de países, que quedará cargada en la variable &Countries. Ahora recordemos cuál era el requerimiento exacto de la Agencia de Viajes: Era visualizar un ranking de todos los países ordenados de mayor a menor según la cantidad de atracciones que tienen registradas. Page13 Por lo tanto, nos está faltando ordenar la colección que obtuvimos cargada.

Es decir, ordenar los ítems de la colección de países, antes de ser mostrada, por orden de mayor a menor según la cantidad de atracciones que tienen registradas. Para resolver esto contamos con el método Sort. La sintaxis es la siguiente: La variable &Countries, punto, Sort y entre paréntesis y comillas el nombre del miembro del SDT por el cual queremos ordenar. En nuestro caso CountryAttractionsQuantity: &Countries= DPRankingCountriesWithAttQty() &Countries.Sort( CountryAttractionsQuantity ) Pero de esta forma la colección de países quedará ordenada de menor a mayor por la cantidad de atracciones y nosotros necesitamos que se ordene de mayor a menor, ya que queremos implementar un ranking. Así que para indicar el orden inverso, dentro de las comillas agregamos paréntesis rectos Ahora lo único que nos está faltando es recorrer la colección devuelta por el Data Provider e imprimir para cada ítem de la misma, los datos almacenados. Para recorrer una colección almacenada en memoria, contamos con el comando For elemento in Colección. Page14

Vamos ahora a definir una variable &onecountry para cargar en ella cada elemento que vayamos iterando de la colección El tipo de dato será SDTCountries.SDTCountiresItem Ahora volvamos al source para completar el código que recorre la colección: EscribimosFor &onecountry in &Countries Print del printblock de nombre Country. Y cerramos con Endfor Vamos ahora a la sección layout y, nombramos a este printblock como Country Seleccionamos: Insert / Variable elegimos &onecountry. Page15

Ubicamos los controles en el printblock, y ahora solamente nos resta definir las propiedades necesarias para que se imprima el listado con formato PDF. Vamos entonces a las propiedades del procedimiento, marcamosn Main program con el valor True, Call protocol como HTTP, y por último insertamos la regla OutputFile y completamos poniendo el nombre del archivo del listado que será RankingPDF, y el formato pdf. Ahora sí el desarrollo de lo solicitado está completo. Seleccionamos run sobre el procedimiento para ver el ranking en ejecución! Y vemos el listado PDF con todos los países que estaban almacenados en la base de datos, cada uno con su cantidad de atracciones, y el orden en el que se muestran los países es el que nos solicitaron! Page16

De esta forma hemos visto la potencia de los Data Providers para cargar datos en una estructura de datos en memoria, en particular en este caso del tipo colección. Vimos lo sencillo que fue declarar qué queríamos cargar, resolviendo GeneXus todo lo necesario para llevarlo a cabo. Los Data Providers aceptan opcionalmente la cláusula where para filtrar, como el comando For each y más adelante veremos otros ejemplos de uso de Data Providers. Los mismos pueden también ser invocados, en otras secciones de objetos, como por ejemplo en eventos de web panels. Page17

Para finalizar, actualizamos los cambios en GXserver. Page18