PracticalExercises GXXEv3Course Sp

download PracticalExercises GXXEv3Course Sp

of 39

Transcript of PracticalExercises GXXEv3Course Sp

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    1/39

    Ejercicios prcticosGeneXus X Ev.3

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    2/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina

    Copyright Artech Consultores S. R. L. 1988-2014.

    Todos los derechos reservados. Este documento no puede ser reproducido en cualquier medio sin el consentimiento explcito deArtech Consultores S.R.L. La informacin contenida en este documento es para uso personal nicamente.

    Marcas Registradas

    Artech y GeneXus son marcas o marcas registradas de Artech Consultores S.R.L. Todas las dems marcas mencionadas en estedocumento son propiedad de sus respectivos dueos.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    3/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina

    1. EL PROBLEMA ....................................................................................................................................................................

    2. NUEVO PROYECTO, NUEVA BASE DE CONOCIMIENTO ......................................................................................................

    3. PRIMERAS TRANSACCIONES ...............................................................................................................................................

    TRANSACCIN CUSTOMER .........................................................................................................................................................

    TRANSACCIONES ATTRACTIONY COUNTRY,RELACIONADAS .............................................................................................................

    Datos relacionados: cmo se mantiene la integridad? ...............................................................................................................

    TRANSACCIN CATEGORY ...........................................................................................................................................................

    AGREGUEMOS LAS CIUDADES A LA TRANSACCIN COUNTRY .................................................................................................................

    TRANSACCIN ATTRACTION:AGREGUEMOS LA CIUDAD. .....................................................................................................................

    4. AGREGUEMOS COMPORTAMIENTO A LAS TRANSACCIONES (RULES) ...............................................................................

    5. PATTERNS: MEJORANDO LA INTERFAZ PARA TRABAJAR CON LA INFORMACIN .............................................................

    6. TRANSACCIONES FLIGHT Y AIRPORT Y NECESIDAD DE DEFINIR SUBTIPOS .................................................................

    7. FRMULAS ........................................................................................................................................................................

    8. LISTADOS PDF....................................................................................................................................................................

    9. BUSINESS COMPONENTS ...................................................................................................................................................

    AUMENTO DE PRECIO DE LOS VUELOS ..............................................................................................................................................

    PANTALLA PARA ELIMINACIN DE TODOS LOS VUELOS ..........................................................................................................................

    10. PROCEDIMIENTOS PARA ACTUALIZAR REGISTROS ...........................................................................................................

    AUMENTO DE PRECIOS DE LOS VUELOS .............................................................................................................................................

    ELIMINACIN DE TODOS LOS VUELOS ...............................................................................................................................................INICIALIZACIN DE LA INFORMACIN DE LA BASE DE DATOS [OPCIONAL] .....................................................................................................

    11. PASAJE DE PARMETROS ..................................................................................................................................................

    LISTADO DE ATRACCIONES EN UN RANGO DETERMINADO .......................................................................................................................

    12. WEB PANELS......................................................................................................................................................................

    13. EXTENDED CONTROLS .......................................................................................................................................................

    14. OBJETO QUERY ..................................................................................................................................................................

    15. WEB SERVICES ...................................................................................................................................................................

    16. SE NECESITA UNA PARTE PARA SMART DEVICES ..............................................................................................................17. GXSERVER .........................................................................................................................................................................

    18. DEFINICIN DE UN MODELO DE PROCESO DE NEGOCIOS (BPM) PARA LA RESERVA DE UNA ATRACCIN [OPCIONAL] ..

    19. TESTEAR LA APLICACIN CON GXTEST [OPCIONAL] .........................................................................................................

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    4/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina

    1. El problema

    Una agencia de viajes lo contrata para que desarrolle un sistema para almacenar y manipular la informacin con l

    que trabaja. Imagine que el sistema se compone de dos mdulos:

    Backend: parte de la aplicacin que deber correr en un servidor web, de manera tal que los empleados la agencia puedan manipular la informacin desde cualquier lugar con conexin a internet.

    Aplicacin sencilla para dispositivos mviles: parte de la aplicacin que ser destinada para ser bajadpor los clientes de la agencia de viajes, la cual les permitir consultar las excursiones disponibles as comolas principales atracciones tursticas que ofrece cada ciudad.

    2. Nuevo proyecto, nueva base de

    conocimientoEntrar a GeneXus y crear una base de conocimiento de nombre TravelAgency para comenzar eldesarrollo deaplicacin.

    Sugerimos:

    Elegir como ambiente de desarrollo C#. Asegrese de tener instalado todo lo necesario (incluyendo SServer). Si usa GeneXus Trial, el ambiente de generacin ya es predefinido, prototipando en la nube Amazon.

    No crear la base de conocimiento en la carpeta Mis Documentos o cualquier otra carpeta que quede bDocuments and Settings, debido a que estas carpetas tienen permisos especiales otorgados por Window

    Tmese unos minutos para familiarizarsecon el IDE (ambiente de desarrollo integrado de GeneXus). Pruebemover ventanas, visualizar ventanas especficas que desee (View y View/Other Tool Windows) y observedetenidamente el Folder View dentro de la ventana Knowledge Base Navigator. Ver que aparecen yainicializados dominios, algunos objetos, imgenes, etc.

    Sugerencia: mantenga la ventana de propiedades abierta (F4), pues la utilizar continuamente. Dentro de la ventanaKnowledge Base Navigator observe la seccin Preferencesdonde se configura el Environment.

    3. Primeras transacciones

    En las reuniones con la agencia de viajes, le transmiten lo siguiente:

    Nosotros registramos los datos de nuestros clientes, y a stos les ofrecemos viajes a distintas ciudades dedistintos pases, de las que registramos tambin las atracciones tursticas.

    Para empezar a construir la aplicacin, debemos empezar por identificar los actores de la realidad, y representarmediante transacciones. Qu transacciones debemos crear entonces en la base de conocimiento (KB)?

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    5/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina

    Transaccin Customer

    Le preguntamos a los empleados de la agencia de viajes: qu registran de sus clientes? Sabiendo que la respue

    es:El nombre (que no supera los 20 caracteres), apellido (que tampoco los supera), direccin, telfonoy e-mail.

    Ya puede crear la transaccin Customer.

    Recordar que:

    Para crear objetos existen varias alternativas:o Hacerlo desde la Start Page.o Hacerlo desde el men: File/ New Object

    o Ctrl+No Contamos con un cono

    Necesitar un atributo que identifique a cada cliente(CustomerId).

    Digitando punto (.) cuando va a ingresar unuevo atributo, ste se inicializa con el nombre dla transaccin.

    Address, Phone e Email son dominiosemnticos que se asignan automticamente los atributos que se definen conteniendo en snombre los textos Address, Phone o Emarespectivamente.

    La estructura de la transaccin debera haberle quedado como se muestra:

    El prximo paso es probar la aplicacin en ejecucin. Asegrese de tener la ventana Outputde GeneXus habilitay a la vista. (View/Other Tool Windows /Output)

    Ahora spruebela aplicacin en ejecucin presionando F5.

    Qu suceder?

    Solucin

    Si decide crear la base de datos y programas localmente (esto solamente es posible con GeneXus full), se abrir una ventana como la siguiente para que ingrese la informacin de Base de Datos, Servidor y mtodde conexin. Recuerde que si no existe una base de datos con el nombre que indic, en ese servidor,GeneXus la crea.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    6/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina

    Si en cambio la base de datos y programas se crearn en la nube, el dilogo anterior no aparece puesto qGeneXus conoce los datos del servidor en la nube y configura automticamente el nombre de la base datotoda la informacin de conexin a la misma.

    A continuacin, se despliega un Anlisis de Impactoque detalla que se crear la base de datos y la tablCUSTOMER dentro de la misma:

    Si presiona el botn Create, GeneXus proceder a ejecutar el programa que llevar a cabo estas creacionAl finalizar el proceso, se le abrir en el navegador que tenga configurado como el predeterminado, el mecon links para ejecutar los objetos definidos. En este caso slo uno: la transaccin Customer.

    Ingresealgunos clientes al sistema. Modifiquealgn dato de alguno de los clientes previamenteingresados y eliminealgn cliente.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    7/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina

    Tambin pruebe usar las flechitas ofrecidas para pasar de registro en registro de clientes y entre los conola imagen de una lupa, ofrece unalista de seleccinpara ver la lista de clientes registrados y seleccionauno).

    Ahora pasemos a identificar y crear la siguiente transaccin. Recordemos lo que nos haban enunciado:Nosotros registramos los datos de nuestros clientes, y a stos les ofrecemos viajes a distintas ciudades dedistintos pases, de las que registramos tambin las atracciones tursticas.

    Transacciones Attraction y Country, relacionadas

    Vamos a crear una transaccin para registrar las atracciones tursticas y una para registrar los pases a los que spertenecen. Qu informacin maneja de cada atraccin la agencia de viajes?

    Nombre, pas, imagende la atraccin, categoraa la que pertenece.

    Ya puede crear las transacciones. Empecemos porCountry.

    Recuerdeque: presionando punto (.) cuando est por dar nombre a un atributo en la estructura de la transaccin,

    aparece inicializado con el nombre de la transaccin. necesitar un atributo identificador, CountryId.

    Cuando est definiendo el tipo de datos del atributo identificador, en vez de utilizar directamente Numeric(4.0),defina el dominioIdcon ese tipo de datos.

    Configure la propiedad Autonumberde ese dominio en True, para que todos los atributos basados en el mismo

    numeren automticamente, sin que el usuario deba preocuparse.

    Observetodos los dominios que ya vienen predefinidos en GeneXus. En particular Address, Email y Phone quehaban aparecido automticamente cuando cre los atributos CustomerAddress, CustomerEMail y CustomerPhone enla transaccin Customer.

    Defina el atributo CountryName, con tipo de datos, un nuevo dominio: Name=Character(50).

    Ahora, creemos la transaccinAttraction.Por ahora ingrese solamente identificador, nombre y pas.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    8/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina

    Observe que al ingresar AttractionId, automticamente asume el dominio Id. Anlogamente, cuando ingrese elatributo AttractionName, asumir automticamente el dominio Name.

    Por qu coloc adems de CountryId, el atributo CountryName enAttraction?

    Ejectue para probar (F5) yle aparecer el siguiente reporte de Anlisis de Impacto:

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    9/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina

    Por qu en la tabla Attraction que GeneXus informa que se debe crear en la Base de Datos, no aparece el atributoCountryName? Es decir, por qu la tabla fsica no lo contendr, cuando s est en la estructura de la transaccin?

    Despus de estudiar el reporte, si estamos de acuerdo, presionamos Reorganizepara que efectivamente se lleve

    cabo eso que se informa. Se abrir el navegador con el men con links a los 3 programas que corresponden a caduna de las transacciones (Customer, Country y Attraction).

    Ingresar como pasesa: Brasil, Francia y China. Observar que dejando 0 como valor del identificador, al grabar sle asigna automticamente el nmero posterior al ltimo asignado (efectivamente, se est autonumerando).

    Ingresar como atraccin turstica:Louvre Museum, que est enFrancia. Si no recuerda el identificador de Francen el sistema, cmo ingresa el pas? Se le ofrece un cono con una flecha al lado CountryId, para abrir una Listaseleccin de pases, creada automticamente por GeneXus. Esto es porque CountryId tiene el rol de llave fornea(foreign key) en esta transaccin (es decir, est apuntando a otra tabla).

    Datos relacionados: cmo se mantiene la integridad?

    AttractionyCountryestn relacionados. Al colocar CountryId en la estructura de Attraction, por tener el mismo nombre exa

    que el atributo que es llave primaria en la transaccin Country, GeneXus entiende que en Attraction CountryId es llave forneamantiene automticamente la integridad de la informacin. As, por ejemplo:

    Intente ingresar una atraccin con un id de pas que no exista. Le permite grabar la atraccin turstica?

    Elija una atraccin previamente ingresada (por ejemplo, Louvre Museum) y cambie el pas, por uno que no exista. Pudgrabar la modificacin?

    Intente eliminar un pas (usando la transaccin Country) que tenga alguna atraccin asociada (por ejemplo Francia). Slo permite?

    Conclusin: los programas correspondientes a las transacciones aseguran la integridad de los datos.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    10/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina

    Transaccin Category

    Nos falta completar la informacin de la transaccin Attraction. Los empleados de la agencia de viajes describier

    que registran de cada atraccin turstica, la categora(monumento, museo, parque, etc.) a la que pertenece. Asque necesitaremos crear una transaccin para registrar esta informacin, y agregar la categora a la transaccinAttraction.

    Pero adems, han informado que no es obligatorio registrar indefectiblemente la categora de atraccin a la quepertenece una atraccin dada que se est manipulando. Se puede dejar vaca. Si sabemos que GeneXus controlaautomticamente la integridad, cmo lo conseguimos?

    Solucin:

    Para terminar la definicin de la transaccinAttraction, agreguemos el dato que nos est faltando: la foto.

    Para ello, cree el atributo AttractionPhotode tipo de datos Image.

    Pdale a GeneXus que construya la aplicacin, as puede probarla en ejecucin. (F5)

    Observelo que le informa el reporte de Anlisis de Impacto. Deber crearse la tabla Category, y convertirse la tablaAttraction ya existente, agregando tres elementos de informacin (uno por el atributo CategoryId y dos por el atributoAttractionPhoto. No se preocupe en entender por qu requiere almacenar dos valores por imagen).

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    11/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 1

    Reorganice y ejecute.

    Ingrese categoras (como museo y monumento) y acceda a las atracciones tursticas ya ingresadas para completasu informacin (categora y foto).

    Observe que en este caso puede dejar la categora vaca (debido a que configur la propiedad Nullableen Yesela estructura de la transaccin).

    Sin embargo, si intenta poner como valor de CategoryId para la atraccin turstica un valor inexistente, no le deja

    grabar.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    12/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 1

    Agreguemos las ciudades a la transaccin Country

    Adems de los pases con los que trabaja la agencia de viajes, necesitamos registrar la informacin de sus ciudad

    Por tanto, debemos agregar un segundo nivel a la transaccin Country, con el identificador y el nombre de ciuda

    Recuerdeque: posicionado en el atributo CountryName, con botn derecho / Insert Levelagrega el subnivel. Una vez que le d un nombre al nuevo nivel, digitando comillas () en lugar de punto, el atributo que defina

    se inicializar con el nombre del nivel. Las ciudades se identificarn por su propio id en combinacin con el del pas. Es decir, no podr identificar a

    una ciudad sin brindar antes la informacin del pas del que se trata. As, podra haber una ciudad 1 Rosariotanto para Uruguay como para Argentina:

    Pas: 1 (Uruguay) Ciudad: 1 (Rosario)Pas: 2 (Argentina) Ciudad: 1 (Rosario)

    O incluso podra ser que Rosario para Argentina se identificara con otro nmero:Pas: 2 (Argentina) Ciudad: 4 (Rosario)

    Reorganicey ejecute(F5).

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    13/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 1

    Observeque el Listado de Navegacin le informar que: La propiedad autonumberpara el caso de CityIdser ignorada. Esto significa que en ejecucin el usuario

    deber ingresar manualmente los identificadores de ciudad. La explicacin es que la propiedad Autonumbersolamente autonumera llaves primarias simples y en este caso CityId es el segundo componente de una llavecompuesta.

    Se crear una nueva tabla CountryCitypara almacenar la informacin correspondiente a las ciudades.

    Ingrese ciudades para los pases que ya tena registrados.

    Transaccin Attraction: agreguemos la ciudad.

    En la transaccinAttraction agreguemos la ciudad del pas a la que la atraccin pertenece. Qu debe hacer si agencia de viajes nos informa que ese valor puede no ser conocido o relevante para una atraccin dada en unmomento dado?

    Construya la aplicacin y prubela (F5 yReorganize).

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    14/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 1

    Solucin

    Antes de seguir, abra la transaccin Customer y modifique el tipo de datos de CustomerIdpara que tengadominio Id(y, as, se autonumere). Tambin modifique los tipos de datos de CustomerNameyCustomerLastNamepara que pasen a asumir el dominio Name. Reorganice.

    4. Agreguemos comportamiento a las

    transacciones (rules)Despus de probar con nosotros la aplicacin que venimos desarrollando, en la agencia de viajes nos cuentan quepara los clientes hay algn comportamiento especfico que debemos hacer cumplir a la hora de manipular lainformacin a travs del programa (transaccinCustomer). Cul es este comportamiento?

    Nos dicen:

    El sistema no debe permitir ingresar clientes sin nombre, ni sin apellido.

    Debe advertirse al usuario si est dejando el telfono sin asignar, por si fue un descuido.

    Se debe registrar la fecha de ingreso del cliente al sistema (CustomerAddedDate) y se debe proponer comovalor predeterminado para ese atributo, la fecha de hoy.

    Especifique ese comportamiento y prubelo (F5 y Reorganize).Recuerde que:

    Las reglas finalizan con punto y coma ;. El mtodo IsEmpty()aplicado a un atributo devuelve True cuando el atributo est vaco y False en caso

    contrario. La variable &todayes del sistema y tiene cargado el valor de la fecha del da.

    Para escribir una variable dentro de la pantalla Rules, cuando digita& se le despliegan todas las variables definidashasta el momento para que seleccione la que necesita. La otra posibilidad es utilizar Insert/ Variable.

    Pruebe ingresar un nuevo cliente dejando vaco el nombre. Le permite grabar o pasar al siguiente campo?

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    15/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 1

    dem con el apellido. Sucede lo mismo con el telfono?

    Si luego le informan que la fecha de ingreso al sistema no debera ser manipulada por el usuario, sino nicamentevisualizada, cmo establece este comportamiento?

    Especifquelo y prubelo en ejecucin.

    5. Patterns: mejorando la interfaz para

    trabajar con la informacin

    Al mostrarle al cliente lo realizado hasta ahora, nos dice que quisiera poder manipular la informacin de pases,categoras y atracciones tursticas de un modo ms potente y vistoso (que ofrezca consulta, posibilidad de filtrar, como insertar, modificar y eliminar datos, etc.).

    Para ello deber aplicar los patrones Work With a las tres transacciones. Prubelo y valo en ejecucin.

    Observarque: existe un Work With para Smart Devices, tambin. Pero el que usted deber aplicar es el que corresponde a

    la aplicacin web que est constuyendo. GeneXus crear automticamente varios objetos por transaccin, para implementar el Trabajar con esa

    entidad.

    Solucin

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    16/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 1

    Por qu no aparecen ms en el Developer Menu las transacciones Category, Country y Attraction?

    Pruebe:

    1. Ingresar un nuevo pas.

    2. Modificar un pas existente (por ejemplo, agregndole una ciudad).

    3. Eliminar un pas existente.

    4. Visualizar la informacin de un pas.

    5. Realizar una bsqueda por nombre de pas.

    6. Ingrese un par de atracciones tursticas (Ej: La muralla China, de China/Beijing, Eiffel Tower deFrancia/Pars)

    7. Filtre las atracciones tursticas cuyo nombre empiece con F. Y si ahora quiere poder visualizar todas lasatracciones tursticas de Francia? No est incluida esta posibilidad, por lo que deberemos personalizar elpattern work with de esta transaccin, para agregrsela. Hgalo en GeneXusy pruebeen ejecucin.

    Solucin

    Para ello primero observe cmo est especificado el filtro que s existe, por nombre de la atraccin turstica:

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    17/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 1

    8. Ahora quite los identificadores de pas y ciudad de la pantalla del Work With y prubelo en ejecucin.

    9. Si ahora quiere brindar la posibilidad de que el usuario elija si quiere ver las atracciones ordenadas pornombre de la atraccin o por nombre de pas, implemnteloy pruebe.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    18/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 1

    6. Transacciones Flighty Airport y

    necesidad de definir subtiposSe necesita ahora registrar los vuelos que la agencia de viajes ofrece. Cada vuelo tiene un identificador y va de unaeropuerto a otro. Tambin cada vuelo tiene un precio. Para el Precio cree un dominio Numeric(10.0).

    Cree una transaccin para registrar aeropuertos. Cada aeropuerto tiene un identificador, un nombre, un pas y unciudad en la cual se encuentra.

    Cmo se define que cada vuelo tiene un aeropuerto de origen y otro aeropuerto de destino?

    Recuerde

    1) Que en la estructura de la transaccin: un cono representando una flecha hacia arriba informa que el atributo es clave fornea (Foreign

    Key), es decir que apunta a otra tabla. Un cono representado una flecha hacia abajo informa que el atributo es inferido de otra tabla. Un cono representando una indica que el atributo es un subitpo2) Sobre los grupos de subtipos:

    Se definen de la misma manera que cualquier tipo de objeto. Cada grupo de subtipos debe contener obligatoriamente un subtipo de un atributo primario

    (que es llave primaria de una tabla) o conjunto de atributos que forman una llave primaria. En cada grupo de subtipos, hay que incluir todos los atributos subtipos que se necesiten

    conocer, pertenecientes a la tabla base y/o extendida de la clave primaria del grupo.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    19/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 1

    Ejecutey verifiqueque al intentar ingresar un vuelo, se dispare un error si el aeropuerto de partida que estqueriendo asignarle al vuelo no existe. dem para el aeropuerto de arribo.

    No debe permitirse ingresar un vuelo cuyo aeropuerto de partida coincida con el aeropuerto de arribo. Implement

    ese comportamiento y prubelo en ejecucin.

    7. Frmulas

    Se necesita poder registrar el el descuento actual que tiene cada vuelo.Defina un nuevo atributo en latransaccin Flight para almacenar este dato. Darle al nuevo atributo el nombre: FlightDiscountPercentagey qusu tipo de datos sea un dominio Percentage, numrico de largo 3.

    Se desea visualizar el precio final del vuelo con el descuento aplicado. Para resolver esto, defina otro atributo ms

    de nombre FlightFinalPrice, que sea frmula globalque calcule automticamente el precio final del vuelo:

    Presione F5, observe en el Anlisis de Impacto cul atributo se crear fsicamente y cul no, reorganice ypruebe la aplicacin en funcionamiento.

    Cree un segundo nivel en la transaccinFlightde nombre: Seat, para registrar sus asientos.

    Dado que los asientos se suelen identificar por un nmero y una letra, la llave primaria (o identificador nico) desegundo nivel, deber componerse de 2 atributos:

    FlightSeatId:para registrar el nro de asiento

    FlightSeatChar:para ingresar la letra

    Defina el dominio SeatChar, de tipo: character(1) con el objetivo que el atributo FlightSeatChar pertenezca almismo.Restrinja las letras posibles para el dominio: que sean vlidas las que estn entre la A a la F (editando lapropiedad Enum Values del mismo).

    Crear otro atributo en el 2do nivel de la transaccin Flight de nombre: FlightSeatLocation. Definir un dominioLocation asociado al mismo, de tipo carcter(1). En el nodo Domains, editar la propiedad Enum Values del

    dominio Location y definirle los siguiente 3 valores:

    Window (valor que se almacenar: W)

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    20/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 1

    Middle (valor que se almacenar: M)

    Aisle (valor que se almacenar:A)

    Si observa el form de la transaccin Flight, ver que para cada asiento podr indicar la ubicacin del mismomediante un control combo que ofrecer los valores Window, Middle o Aisle.

    Recuerde que para definir que cierto atributo es parte de la llave primaria, debe presionar el botn derecho delmouse sobre el atributo y el men contextual le ofrecer la opcin Toggle Key.

    A efectos de conocer la capacidad de pasajeros que el vuelo permite, cree un atributo nuevo en el primer nivel detransaccin Flight, de nombre: FlightCapacity, tipo: numric(4) y defnalo frmula global que cuente la cantidad dasientos que ofrece el vuelo.

    Se desea ver la capacidad del vuelo en el formulario web y controlar que no se registre ningn vuelo con menos d4 asientos. Este control deber realizarse cuando terminen de ingresar todos los asientos y luego de haberpresionado el botn Confirm.

    8. Listados pdf

    Ahora supongamos que como parte de la aplicacin, deber implementarse la posibilidad de que a pedido delusuario, se le desplieguen listados pdf con la informacin requerida. Por ejemplo, suponga que se necesita un listaque muestre en orden alfabtico, las atracciones tursticas almacenadas en la base de datos.

    Si sabe que debe lucir ms o menos como sigue:

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    21/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 2

    Implemntelo en GeneXus.

    Recordar que para poder visualizar directamente desde el browser un listado, el mismo debe ser generadocomo PDF. Para esto debe configurar las siguientes propiedades del objeto procedimiento:

    Main program = True Call Protocol = http Report output = Only to File

    Y la siguiente regla: Output_file(nombre-archivo.pdf , PDF)

    Para ejecutar el listado, sobre la pestaa del objeto, botn derecho / Run with this only

    Repar en lo que le informa el listado de navegacin del procedimiento?

    Y si ahora se necesita que el listado salga ordenado por nombre de pas? Implemntelo, observe lo informado enlistado de navegacin y prubelo.

    Y si ahora necesita solamente listas las atracciones de Francia? Prubelo (observando listado de navegacin)

    En cada caso, deduzca qu tabla de la base de datos se est recorriendo para realizar la consulta del for each.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    22/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 2

    Tambin se necesita un listado como el que sigue (que muestre cada categora, y por cada una de ellas, susatracciones tursticas). Implemntelo y pruebe lo realizado.

    Agregue una nueva categora al sistema, por ejemplo Art Gallery (galera de arte). Vuelva a ejecutar el listadoanterior. Sali listada la categora?

    Modifique el listado anterior para que no salgan listadas categoras que no tengan atracciones tursticasrelacionadas.

    Qu modificaciones encontr en el listado de navegacin?

    Otra solicitud de la agencia de viajes es un listado que muestre todos los nombres de pases y para cada pas,cantidad de atracciones tursticas que ofrece:

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    23/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 2

    Y nos pide otro listado tambin que muestre todos los pases que tienen ms de 2 atracciones para visitar:

    9. Business ComponentsRealizaremos algunas operaciones sobre la base de datos, a travs de business components.

    Aumento de precio de los vuelos

    Cada tanto la agencia de viajes necesita incrementar los precios de los vuelos en un porcentaje determinado. Paraello, deberemos implementar una pantallaque permita al usuario especificar ese porcentaje de aumento, y dala ordende aplicarlo a todos los vuelos de la base de datos. Implemnteloy pruebe.

    Recuerde que: El objeto web panel le permite implementar pantallas flexibles para entrada y salida de informacin. Para entrada de informacin (que el usuario pueda ingresar valores a la pantalla), se insertan controles

    variable en el form. Si quiere editar barras de men, posicionndose en GeneXus arriba, sobre la barra, con botn derecho

    podr insertar, por ejemplo, la barra Formatting. Para que el web panel tome alguna accin determinada, pueden insertarse botones y programar el

    evento asociado. Los business components son tipos de datos que se crean al configurar la propiedad de nombre

    Business Component del objeto transaccin con valor Yes. Al hacerlo, para insertar, modificar o eliminarregistros de las tablas correspondientes, podr utilizarse, adems de la transaccin, una variable detipo de datos Business Component en cualquier otro objeto (por ejemplo, un web panel) y realizar lasmismas operaciones a travs de los mtodos Load(), Save() y Delete().

    Para que las operaciones realizadas a travs del business component queden efectuadas de manerapermanente, deber ejecutar a continuacin el comando Commit. Si a un valor X se le quiere incrementar un 20%, alcanza con hacer X = X*(1+20/100) = X*1,20

    Solucin

    Una solucin posible (intente implementar ud. lo pedido sin mirar lo que sigue): creamos un Web panel, con unavariable &percentage, de tipo de datos: Numeric(3.0)

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    24/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 2

    Al hacer doble clic sobre el botn, nos lleva a la seccin Events, editando el evento Enter, asociado al mismo.

    All programaremos la lgica que queremos se ejecute cuando el usuario presione el botn.

    Necesitamos recorrer todos los vuelos y sobreescribir el precio que tenan, aumentndolo en ese porcentajeindicado por el usuario en la variable de pantalla.

    Para recorrer todos los vuelos de la base de datos, usamos el comando for each.

    Y para cada vuelo, cmo lo editamos para modificarle el valor de FlightPrice?

    Necesitaremos una variable para ello, que tenga toda la estructura de la transaccin Flight, y adems nospermita grabar en la base de datos. Qu tipo de datos tendr, entonces, esa variable? El businesscomponent Flight(observar que el tipo de datos business component tiene el mismo nombre que latransaccin). Pero GeneXus no crea ese tipo de datos automticamente para cada transaccin. Se lo tenemosque pedir. Cmo lo hacamos? Prendiendo la propiedad correspondiente de la transaccin.

    Una vez hecho esto, entonces:

    EventEnter

    for each Flight

    &flight.Load(FlightId)

    &flight.FlightPrice = &flight.FlightPrice*(1+&percentage/100)

    &flight.Save()

    ...endfor

    EndEvent

    Como las operaciones de grabacin o eliminacin de la base de datos (a travs de los mtodos Save() yDelete()) pueden provocar errores, es importante saber qu ocurri. Para ello tenemos el mtodo Success() quedevolver True si no hubo errores, y False en caso contrario.

    EventEnter

    for each Flight

    &flight.Load(FlightId)

    &flight.FlightPrice = &flight.FlightPrice*(1+&percentage/100)

    &flight.Save()

    If&flight.Success()

    Commitelse

    Rollback

    endif

    endfor

    EndEvent

    Al insertar, modificar o eliminar registros de una tabla de la base de datos, mientras que no se diga: todo lohecho que quede permanente, esas modificaciones sern provisorias. Qu quiere decir? Que por ejemplo, sihay un apagn, esas modificaciones se perdern. La forma de decir lo hecho, que quede permanente es

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    25/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 2

    ejecutar el comando Commit. Si por el contrario, queremos que lo que hicimos se deshaga, ejecutamos elcomando Rollback.

    Pantalla para eliminacin de todos los vuelos

    Grabe el web panel anterior con otro nombre (para ello alcanza con posicionarse sobre la pestaa y con botnderecho, hacer Save as) y modifique el Form para que slo contenga un botn con el texto Delete all flights, demodo que en ejecucin este web panel se vea as:

    Cuando el usuario presione el botn, debern eliminarse todos los vuelos de la base de datos.

    Qu debe modificar del evento Enter que tena programado?

    Nota: si se posiciona sobre el botn y ve sus propiedades, en la de nombre Caption puede modificar el texto delbotn.

    Solucin

    Alcanzar con :

    EventEnter

    for each Flight

    &flight.Load(FlightId)

    &flight.Delete()

    if&flight.Success()

    Commit

    Msg( 'Successful deletion')

    else

    Msg( 'Deletion could not be done')

    Rollbackendif

    endfor

    EndEvent

    Con Msg lograr que se despliegue ese mensaje en la pantalla del web panel.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    26/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 2

    10.Procedimientos para actualizar registros

    Aumento de precios de los vuelos

    Suponga que los vuelos a los que debe aumentar el precio en un porcentaje dado (vuelva al primer ejercicio delpunto 9 del prctico) son miles. Sabiendo que el aumento de precio es un procedimiento sencillo que no har fallala integridad de ningn modo, ejercite resolverlo con un procedimiento, sin utilizar business components.

    Recuerde que: Con el comando for each dentro de un procedimiento, puede actualizar los atributos de su tabla

    extendida a travs de simples asignaciones. La actualizacin directa a travs de procedimientos no controla la integridad de la informacin.

    Todo objeto debe declarar los parmetros que recibe y los parmetros que devuelve. Si no los declara,ni recibir ni devolver valores. Los parmetros se declaran a travs de la regla parm. Las variables son locales al objeto donde se utilizan. Esto significa que si quiero recibir un valor como

    parmetro en una variable &X, debo declararla en el objeto.

    Eliminacin de todos los vuelos

    Y si ahora quisiera eliminar todos los vuelos, tal como lo hizo en el punto 9 del prctico, pero a travs de un

    procedimiento?

    Solucin

    Crear un procedimiento FlightsDeletion que no recibe parmetros, con el siguiente cdigo:

    for each Flight

    for each Flight.Seat

    delete

    endfordelete

    endfor

    Haga un Save as del web panel que tena implementado en el punto 9 (el que haca la eliminacin a travs deBusiness Component), y cambie el evento Enter:

    EventEnter

    FlightsDeletion()

    EndEvent

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    27/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 2

    Y si ahora quiere borrar toda la informacin de la base de datos?

    Solucin

    Crear un procedimiento DeleteAll con Source:

    for each Flight

    for each Flight.Seat

    delete

    endfor

    delete

    endfor

    for each Airport

    delete

    endfor

    for each Attraction

    delete

    endfor

    for each Category

    delete

    endfor

    for each Customer

    delete

    endfor

    for each Country

    for each Country.City

    deleteendfor

    delete

    endfor

    Y desde un web panel con un botn, al cual le asociaremos un evento de usuario, haremos la llamada alprocedimiento.

    Editando las propiedades del botn, en OnClickEvent elegimos y le damos el nombre que queramos

    Recuerde que los procedimientosno validan la consistencia de losdatos, pero la base de datos s lohace. Es decir, la base de datosvalida la consistencia de losdatos interrelacionados, por lotanto el orden en el que ud.intente eliminar los datos, es

    importante. Por ejemplo, siintenta eliminar los pases antesque las atracciones, la base dedatos lo impedir, el programacancelar y no resultaramigable para el usuario.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    28/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 2

    Luego presionando el botn derecho del mouse sobre el botn y seleccionando Go To Event, nos posicionamos en elevento asociado al botn y le definimos dentro, la invocacin al procedimiento.

    Inicializacin de la informacin de la base de datos [opcional]

    Cuando la aplicacin que usted est desarrollando se ponga en produccin (es decir, empiece a ser utilizada por laagencia de viajes) debern cargarse todos los datos de clientes, pases, categoras, atracciones, vuelos. Escriba uprocedimiento que inicialice esas tablas con informacin que nos ha brindado la agencia de viajes y prubelo.

    Tener en cuenta que:

    El comando new ingresa unregistro en unatabla fsica. Si no asigna valor a un atributo de la tabla, entonces:

    o Si el atributo es autonumerado, al grabarse el registro en la base de datos (al alcanzarse elendnew), en memoria quedar para ese atributo el valor dado por la base de datos al mismo.Por ejemplo, si se est grabando una categora:

    NewCategoryName = Monument

    EndnewSabemos que luego del Endnew si utilizamos el atributo CategoryId ste tendr el valor que labase de datos le dio al registro al ingresarlo.

    Hay que insertar la imagen de la Torre Eiffel en la KB para poder utilizarla. Una forma de hacerlo es en laventana Folder View ir al folder Customization y eligiendo Images, donde se listan todas las imgenesactualmente almacenadas en la KB, insertar una nueva (desde un archivo) y darle un nombre.

    Solucin

    Crear un procedimiento DBInitialize con el Source que sigue e invocarlo desde un web panel:

    new

    CustomerName = 'John'

    CustomerLastName = 'Cage'

    CustomerEMail = '[email protected]'

    CustomerAddress = '11235 NE 4 Ave, Miami'

    endnew

    //Brazil

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    29/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 2

    new

    CountryName = 'Brazil'

    endnew

    new

    CountryId = CountryId

    CityId = 1

    CityName = 'Rio de Janeiro'

    endnew

    //France

    new

    CountryName = 'France'

    endnew

    new

    CountryId = CountryId

    CityId = 1

    CityName = 'Paris'

    endnew

    new

    CategoryName = 'Monument'

    endnew

    new

    AttractionName = 'Eiffel Tower'

    CountryId = CountryId

    CityId = CityId

    CategoryId = CategoryId

    AttractionPhoto = EiffelTower.Link()

    endnew

    new

    CountryId = CountryId

    CityId = 2

    CityName = 'Niza'

    endnew

    //China

    new

    CountryName = 'China'

    endnew

    new

    CountryId = CountryId

    CityId = 1

    CityName = 'Beijing'

    endnew

    new

    CountryId = CountryId

    CityId = 2

    CityName = 'Shangai'

    endnew

    11.Pasaje de parmetros

    Muchas veces necesitamos que un objeto reciba parmetros para que, en base a los mismos, ejecute su lgica. Poejemplo, una cosa es realizar un listado pdf de todas las atracciones tursticas de la base de datos, y otra es realizun listado de aquellas cuyo nombre se encuentra dentro de un rango dado.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    30/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 2

    Listado de atracciones en un rango determinado

    Grabe con otro nombre el procedimiento que haba creado en el punto 6 para listar las atracciones tursticas, y

    modifquelo para que ahora solamente liste aquellas cuyo nombre se encuentra dentro de un rango recibo porparmetro (el valor inicial y el final del rango sern los parmetros recibidos).

    Implemente una pantalla que pida los valores de ese rango al usuario, e invoque a este objeto, pasndole esosvalores por parmetro. Pruebe en ejecucin.

    Recuerde que: Si define una variable basada en (based on) un atributo, quedar ligada al tipo de datos del atributo,

    es decir, si ste se modifica, el de la variable tambin, acorde al cambio. Las variables utilizadas para realizar una invocacin en el objeto que llama y las utilizadas para declarar

    los parmetros que se reciben en el objeto llamado, no tienen por qu coincidir en nombre, pero sdeben tener tipos de datos compatibles.

    Solucin:

    Al procedimiento (llammosle AttractionsFromTo le agregamos la regla parm (y definimos ambas variables en el

    procedimiento):

    parm( in: &fromName, in: &toName);

    Y en su Source:

    printTitle

    printColumnTitles

    for eachAttraction

    whereAttractionName>= &fromName

    whereAttractionName

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    31/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 3

    Agregue ahora al web panel definiDo, dos variables (&CountryNameFrom y &CountryNameTo) y defina lascondiciones necesarias para filtrar los pases incluidos en dicho rango.

    13.Extended controls

    Utilizando el extended control ImageGallery, disee un web panel que muestre la galera de fotos de todas lasatracciones tursticas.

    Personalice las propiedades del extended control, estableciendo Width=1000, Height= 500, y Type=Slider:

    14.Objeto Query

    Defina un objeto Query que devuelva solamente las ciudades de Francia, ordenadas por orden alfabtico, cada unde ellas con su respectiva cantidad de atracciones tursticas.

    Defina un web panel y utilizando el control QueryViewer, visualice la consulta anterior como un grfico.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    32/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 3

    15.Web services

    La agencia de viajes nos ha solicitado una nueva funcionalidad: desea poder ofrecer a los clientes, un listado detodos los pases, mostrando para cada uno su cuidad capital, su moneda de uso y bandera:

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    33/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 3

    Para resolver esto sugerimos importar y hacer uso de un Web Service especfico: CountryInfoService, que devuedicha informacin y ms.

    La ubicacin del web service es:http://www.oorsprong.org/websamples.countryinfo/CountryInfoService.wso

    Recuerde que seleccionando en el men de GeneXus: Tools / Application Integration / WSDL Import ,seabrir un wizard, que importar todas las especificaciones del web service, mtodos y parmetros en un objetoexterno (external object) y se definirn SDTs de ser necesario. Recuerde que definiendo variables del tipo delobjeto externo, pordr ejecutar los mtodos provistos por el web service.

    16.Se necesita una parte para Smart Devices

    La agencia desea ofrecer tambin una pequea aplicacin para dispositivos inteligentes para ser utilizada por usuarios finales.

    El objetivo es que cualquier persona pueda consultar desde su smart device todos los pases que la agencia ofrevisitar, y para cada uno de ellos sus ciudades, y atracciones tursticas.

    Para ello, hay que aplicar el patrn Work With for Smart Devices a la transaccin Country:

    Y simplemente grabar, para posteriormente crear un objeto Dashboard y agregarle el objeto de nombWorkWithDevicesCountry generado por el patrn.

    Recuerde que por el hecho de haber creado dentro de nuestra base de conocimiento, objetos propios para SmartDevices, al presionar F5 automticamente se ejecutar el emulador para Android, pudiendo tambin acceder a

    http://www.oorsprong.org/websamples.countryinfo/CountryInfoService.wsohttp://www.oorsprong.org/websamples.countryinfo/CountryInfoService.wsohttp://www.oorsprong.org/websamples.countryinfo/CountryInfoService.wsohttp://www.oorsprong.org/websamples.countryinfo/CountryInfoService.wso
  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    34/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 3

    nuestra aplicacin web desde el Developer men.

    17.GXserver

    Publique la base de conocimiento en el servidor http://sandbox.genexusserver.com/xev2/main.aspx

    Cree un nuevo web panel (WPCustomers) que muestre la lista de clientes de la Agencia.

    Enve este nuevo objeto al server para que se integre a la base de conocimiento centralizada.

    Ingrese a la consola web y verifique el estado final de la KB.

    Cierre la base de conocimiento anterior, y cree una nueva sincronizndose con la KB previamente publicada. De eforma se recibe localmente una copia de la KB administrada por GXserver.

    http://sandbox.genexusserver.com/xev2/main.aspxhttp://sandbox.genexusserver.com/xev2/main.aspxhttp://sandbox.genexusserver.com/xev2/main.aspx
  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    35/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 3

    En esta nueva copia local, edite la transaccin Country y defina el nuevo atributo CountryFlagImage, de tipo ImagEnve este cambio al servidor.

    Cierre esta KB y abra nuevamente la KB inicial. Realice la operacin Update para recibir el cambio antes realizado

    18.Definicin de un modelo de proceso de

    negocios (BPM) para la reserva de una

    atraccin [opcional]

    El proceso de reserva de una atraccin turstica consiste en una serie de tareas que se puede considerar como unproceso de negocio.

    Este proceso comienza cuando una persona va a la agencia de viajes a reservar un paquete turstico para unadeterminada atraccin. Lo primero que debe hacer el empleado de la agencia, es ingresar una reserva para dichopaquete.

    Luego de ingresada la reserva, hay que verificar que la persona que solicite el paquete sea un cliente de la agencien caso de que no lo sea, se deber ingresar como cliente y asociar dicho cliente a la reserva.

    Una vez completados estos pasos, es necesario verificar que haya paquetes disponibles para la cantidad de persoque deseen realizar el viaje.

    Si hay lugares disponibles, la reserva ser asignada y finaliza el proceso de negocios. En caso contrario, se le debofrecer al pasajero otro paquete.

    Para implementar el modelo, deber crear un objeto Business Process Diagram, pero antes debe crear unatransaccin Reservation con los siguiente atributos:

    ReservationId - Id

    ReservationDate - Date

    ReservationQty N(4)

    CustomerId

    CustomerName

    ReservationAvailable Boolean

    El atributo ReservationAvailable se utilizar para marcar si el paquete turstico est disponible o no.

    Para el atributo CustomerId, seleccionamos su columna Nullable con el valor Yes, para indicar que al momento deingresar una reserva, podemos no tener an al identificador de cliente, de la persona que est adquiriendo lareserva

    Defina el modelo de negocios para la reserva de una atraccin turstica y ejectelo, probando todos los casosmencionados en la descripcin, de forma de recorrer todo el diagrama.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    36/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 3

    Solucin

    Cree la transaccin Reservation, de acuerdo a lo solicitado.

    Cree un objeto Business Process Diagram y nmbrelo AttractionReservation. Desde la toolbar arrastre al diagrama un smbolo dNoneStartEvent.

    Ubique a la transaccin Reservation en la ventana de Folder View y arrstrela hacia el diagrama. Para conectar el nodo de Startcon la transaccin, haga clic en la parte inferior del crculo verde y sin soltar, arrastre la conexin hasta que la punta de la flechatoque el borde superior del rectngulo de la transaccin.

    Para representar la decisin en el diagrama para verificar si la persona es cliente de la empresa, arrastre un nodo ExclusiveGateway sobre el diagrama y nalo desde la transaccin Reservation.

    Ahora se debe definir la condicin del Gateway que har que el flujo siga el curso normal (hacia abajo) cuando no hay que agrega la persona como cliente, o el flujo alternativo (hacia la derecha), cuando se debe agregar a la persona como cliente. Primeroarrastre la transaccin Customer al diagrama y conctela a la derecha del Gateway.

    Luego haga doble clic en la flecha verde que une el Gateway con la transaccin Customer y escriba la expresin:Reservation.CustomerId = 0, para indicar que el flujo debe tomar ese camino si cuando se ingres la reserva, el atributoCustomerId se dej con valor 0. Observe que debe usar el nombre de la transaccin para calificar al atributo CustomerId, paradistinguir al atributo que es clave fornea en la transaccin Reservation, del atributo CustomerId que es clave primaria de latransaccin Customer.

    Para asociar el cliente recin creado a la reserva, debe crear un procedimiento llamdo AssignCustomerToReservation y en laseccin de reglas escriba una regla parm, con los parmetros &ReservationId y &CustomerId.

    En el source del mismo escriba un For each con una clusula Where filtrando el atributo ReservationId por la variableReservationId recibida por parmetro. Luego asigne a CustomerId el valor de la variable &CustomerId y cierre el For Each.

    De esta forma se le asignara el cliente recin creado, a la reserva ingresada previamente.

    Ahora arrastre el procedimiento recin creado hacia el diagrama y conctelo desde la transaccin Customer.

    Continuando con el flujo habitual (hacia abajo del Gateway), debe contar con una pantalla donde se pueda confirmar o cancelarreserva. Para eso, puede utilizar nuevamente la transaccin Reservation y se marcar la reserva como disponible o no, mediant

    atributo ReservationAvailable.Arrastre a la transaccin Reservation desde la ventana de Folder View hacia el diagrama. Renombre a la tarea comoReservationAvailability y conctela desde el Gateway.

    Para indicar que el flujo hacia abajo es el flujo habitual, seleccione la conexin y en la ventana Propiedades asigne la propiedadConditionType en el valor Default. Observe en el diagrama que el flujo qued sealizado con una raya de color verde que cruza mismo. Aproveche ahora para conectar la tarea AssigntCustomerToReservation, a la tarea ReservationAvailability.

    Para evaluar el valor ingresado en el check box de la transaccin Reservation, inserte desde la toolbar un Exclusive Gateway yconctelo desde la tarea ReservationAvailability. Luego conecte el flujo alternativo del mismo (que lo dibujamos hacia la izquiera la tarea Reservation, para que se pueda agregar una reserva nueva. Haga doble clic sobre dicho conector y agregue la condiciReservationAvailable=False. Observe que en este caso no es necesario calificar el atributo, porque est nicamente en latransaccin Reservation.

    Lo que falta hacer ahora es tomar en cuenta el caso de que la reserva se confirme, en cuyo caso ya no habr ms tareas y debefinalizar el proceso. Para indicar que debe terminar el diagrama, inserte desde la toolbar un smbolo de NoneEndEvent y conctedesde el Gateway.

    Esta conexin hacia abajo es el flujo normal del Gateway, de modo que cuando la reserva se confirma, finalizar el proceso.

    Para indicar esto, seleccione la conexin y en la ventana Propiedades asigne la propiedad ConditionType con el valor Default.

    Ahora debe ejecutar el diagrama. Sobre la solapa con el nombre del diagrama, de botn derecho y elija Run.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    37/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 3

    Se abrir una pantalla con el Cliente GXflow. Seleccione la tarea Reservation y para ejecutarla presione el botn de Execute, ohagaa doble clic sobre la tarea. Ingrese una reserva, dejando sin ingresar el identificador del cliente. Presione Confirmar y cierreventana. Para pasar a la tarea siguiente presione Send.

    Como no se ingres el cliente, la prxima tarea pendiente es la transaccin Customer. Ejecute la tarea e ingrese a la persona qusolicit la reserva, como cliente. Cierre la ventana y presione Send.

    Observe que la prxima tarea es ReservationAvailability, ya que la tarea AssignCustomerToReservation es no interactiva y por lotanto se ejecut en forma batch. Ejecute la tarea, marque el check box y presione Confirmar. Cierre la ventana y presione Send

    Note que ahora la bandeja de entrada se muestra vaca, indicando que no hay ms tareas pendientes para ejecutar ya que se hllegado al fin del proceso.

    Ejecute nuevamente el diagrama, pero ahora pruebe los otros caminos del diagrama, por ejemplo ingresando un identificador decliente en la transaccin Reservation, o dejando desmarcado el check box al confirmar la reserva.

    Para ver la historia de las tareas ejecutadas, seleccione My Processes en la ventana Navigator y haga doble clic sobre el ProcesoAttractionReservation, en la ventana de la derecha. Podr ver en una ventana, todas las tareas que se fueron ejecutando

    Para ver la historia en forma de animacin, seleccione More Actions, View Diagram y presionel el botn de Play.

    19.Testear la aplicacin con GXtest [opcional

    Nota: DescargaraquGXtest. Y para ms informacinhttp://abstracta.com.uy/

    GXtest nos permite grabar secuencias de operaciones para probar nuestras pantallas y verificar ante nuevoscambios, que el sistema sigue funcionando correctamente.

    En este caso, vamos a verificar que el precio de un vuelo se calcule sin errores.

    Este precio se representa por el atributo FlightFinalPrice definido con una frmula global. Esta frmula calcula elprecio final del vuelo, aplicando al precio inicial el descuento del vuelo.

    Utilizando GXtest, defina un caso de prueba ingresando un vuelo con los siguientes valores:

    Aeropuerto de partida: 2

    Aeropuerto de destino: 1

    Precio del vuelo: 5000

    Descuento del vuelo: 50%

    El precio calculado del vuelo ser de 2500, ya que como el descuento del vuelo es de 50%, la frmula aplicar dicdescuento para calcular el valor del atributo FlightFinalPrice.

    Continuando con el ejemplo, ingrese los asientos del vuelo y no presione Confirmar.

    Defina en GXtest, que el valor correcto para el texto que muestra el valor del precio del vuelo, es de 2500. PresioConfirmar y cierre el navegador.

    Verifique en GXtest que el caso de prueba se haya creado correctamente. Verifique que se haya creado el pool dedatos con los valores ingresados.

    Luego cambie la frmula del atributo FlightFinalPrice (por ejemplo cambie el 100 del cociente, por el valor 10) yejecute el caso de prueba ingresado anteriormente.

    Verifique que GXtest informe de que encontr un error y vea el valor calculado incorrectamente en la pantalla de transaccin Flight, que se muestra en la ventana de resultados del caso de prueba.

    http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,8,8,O,,0,,3350http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,8,8,O,,0,,3350http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,8,8,O,,0,,3350http://abstracta.com.uy/http://abstracta.com.uy/http://abstracta.com.uy/http://abstracta.com.uy/http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,8,8,O,,0,,3350
  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    38/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Pgina 3

    Luego corrija la frmula (poniendo el valor 100 en lugar del 10) y ejecute nuevamente el caso de prueba. Verifiquque en este caso, GXtest no encuentra errores y el resultado de la prueba muestra el valor del precio del vuelocalculado correctamente.

    Solucin

    Abra la aplicacin GXtest Designer, desde el acceso directo en el escritorio. Cree un proyecto nuevo y asgnele un nombre.

    Ahora presione el signo de ms (color verde), elija su KB de la carpeta donde est almacenada, agregue una descripcin ypresione OK. Cuando finalice la importacin de datos de la KB, presione OK.

    La URL que nos solicita GXtest es la de la aplicacin a probar. Vuelva a GeneXus, ejecute la transaccin Flight, copie la URL de lmisma y pguela en el campo URL de la ventana de Gxtest. Presione OK.

    En la parte derecha de la ventana del Diseador de GXtest, presione botn derecho sobre Test Cases y elija Record Test Case.Asgnele un nombre al caso de test, una breve descripcin y marque la casilla para que se autogenere el conjunto de datos deprueba.

    Presione el botn rojo, en la parte superior derecha de la ventana. Notar que se abrir el navegador y se ejecutar la transacciFlight. Ingrese un vuelo nuevo con los datos especificados en la letra del ejercicio, incluyendo los asientos, pero no presioneConfirmar para terminar el ingreso del vuelo.

    Antes, seleccione con el mouse el precio del vuelo (que muestra el valor 2500) y presione el smbolo de check, en la barra deherramientas de GXtest del navegador. Elija VerifyControlText y agregue una descripcin. Presione Aceptar y nuevamente Acept

    GXtest avisar que agreg correctamente la validacin solicitada. Presione OK.

    Vuelva a la pantalla de la transaccin Flight y presione Confirmar. Cierre el navegador y vuelva al diseador de GXtest.

    Vea que se cre un caso de prueba. En el diagrama seleccione el componente llamado Flight y vea que en la ventana de comandse detallan todos los pasos realizados al ingresar el vuelo en la transaccin Flight.

    En el panel de Project, a la derecha de la pantalla y bajo DataPools haga clic en el elemento del conjunto de datos. Verifique endicha ventana, los datos que us para ingresar el vuelo.

    Vuelva a GeneXus, edite la frmula del atributo FlightFinalPrice y en la divisin escriba un 10 en lugar del 100. Presione F5 paraactualizar la aplicacin. Para ejecutar el caso de test definido, vuelva a GXtest, seleccione la solapa del caso de prueba y presionel botn de Play, que se encuentra arriba a la izquierda de la pantalla.

    Ver que se abre la ventana del navegador, se muestra la pantalla de la transaccin Flight y empieza la ejecucin automtica decaso de prueba, ingresndose automticamente los mismos datos que Ud. haba ingresado antes, como si fuera una persona qulo va haciendo.

    Preste atencin a los valores y vea que el precio del vuelo se calcul incorrectamente. Ahora muestra el valor -20000. Cuandofinalice el caso de prueba, notar que se activa nuevamente la ventana del Diseador de GXtest. Abra el diseador.

    Notar que se agreg una solapa con los resultados del test. En la columna Result encontrar el smbolo de un insecto,representando un bug encontrado. En el panel de la izquierda, si hace clic en el smbolo de + al lado del insecto, se abrirn

    varias opciones y a la derecha, los test realizados.

    Si hace doble clic en Flight, se abrir una pantalla donde puede observar la pantalla de la transaccin Flight, los pasos que integel test realizado, el tiempo que insumi cada paso y su resultado

    Bajando la barra, ver que aparece el error de validacin del precio del vuelo, indicando cul fue el valor esperado y cul fue elvalor real obtenido. Si hace clic sobre el rengln del error, abajo se desplegar la pantalla del navegador, con el valor calculadoincorrectamente.

    Vuelva a la transaccin Flight, deje la frmula como estaba antes (vuelva a poner 100 en lugar de 10) y vuelva a GXtest paraejecutar nuevamente el caso de prueba.

  • 7/21/2019 PracticalExercises GXXEv3Course Sp

    39/39

    Curso GeneXus X Ev3: Ejercicios prctico

    Verifique que ahora no aparece ningn smbolo de error y que el resultado del clculo del vuelo sea el correcto, mostrandonuevamente el valor 2500. Verifique el valor haciendo click sobre el rengln que muestra la validacin de dicho precio y verifiquen la pantalla del navegador que se mostrar debajo, que el valor mostrado sea tambin 2500.