Вы находитесь на странице: 1из 16

Curso GeneXus

Ejercicios Prcticos

Ejercicios de TRANSACCIONES
En los ejercicios de transacciones, se muestra una imagen de cada form. Las estructuras de las transacciones debern incluir los atributos que aparecen en los forms, pero podr ser necesario incluir otros atributos. Recordar que GeneXus normaliza la base de datos, y que las estructuras de las transacciones deben incluir todos los atributos que son utilizados en ellas, incluyendo reglas y eventos. Esto no es necesario para la definicin de frmulas en las que hay que tener en cuenta el concepto de tabla extendida. Sugerencias: - Utilizar la insercin de reglas, funciones, etc., mediante los tems Insert/Rules, Insert/Functions, etc. - Decidir qu valor utilizar en la property Confirmation y en caso de que su aplicacin sea Win, qu valor utilizar en la property Client Side Validation. - Numerar automticamente las claves con la propiedad Autonumber de los atributos numricos clave. - Utilizar: Tools/List Database. - Utilizar: Tools/List Attributes. - Hacer Diagrama de Tablas mediante la opcin: Tools/Diagrams/Tables.

Transaccin Paises

--- Field Map ------------------------------------------------PaisCod :Identificador de Pas PaisNom :Nombre del Pas

Num. 6 Char. 50 2

Luego de haber ingresado el PaisCod en la estructura de la transaccin, con toda su informacin relacionada (Description, Type, Nulls, etc.), y cuando est pronto para digitar el prximo atributo PaisNom, en lugar de digitar la primera letra, P, para escribir Pais, digite punto .. Qu sucedi? Si hace doble clic o F2 sobre el campo Nulls del atributo PaisNom en la estructura, se le abrir un combo box con los valores posibles para esa propiedad (Yes, No, por defecto es No). Qu sucede si hace lo mismo para el atributo PaisCod? Por qu no aparece el combo para poder cambiar el valor por defecto?

Reglas -------------------------------------------------------1. No se permiten paises sin nombre

Transaccin Clientes
Definir los dominios: Nombre como Character(50) e Importe como Numeric(9.2), siguiendo lo que se indica a continuacin.
Existen distintos caminos que conducen a la definicin de un dominio: Cuando antes de comenzar a crear las transacciones ya se identifica que se necesitar determinado dominio, puede crearse mediante Advanced/Domain. Pruebe definir el dominio Nombre de esta manera centralizada. Luego lo utilizar en las transacciones, cuando defina atributos que desee estn basados en ese dominio. Observe qu sucede al digitar Clinom en la estructura de la transaccin Clientes de ms abajo, cuando quiera definir ese atributo ya habiendo definido el dominio de nombre Nombre. Por qu sugiere como tipo de datos el del dominio? Otro camino posible de definicin de un dominio es en la propia definicin de un atributo en la estructura. Si el analista no se hubiese percatado de que iba a necesitar el dominio Importe y cuando est ingresando el atributo CliTotCmp lo hace, puede definir el dominio directamente asocindoselo al tipo de datos del atributo. As, en el campo Type del atributo CliTotCmp pruebe escribir: Importe=Numeric(9.2). Luego de hacerlo y grabar, vaya a Advanced/Domain para ver todos los dominios definidos en la KB. Est all Importe?

Asgnele a PaisNom el dominio Nombre.

Definir el siguiente Control ---------------------------Sexo - Radio Button 4

Reglas -------------------------------------------------------1. No se permiten clientes sin nombre 2. Avisar, en caso de que no se ingrese la direccin 3. No permitir que se ingrese valor en el total de compras (se ir actualizando dede las facturas del cliente). Frmulas-----------------------------------------------------1. El saldo del cliente, se calcula como la diferencia entre compras y pagos. Utilizar el botn derecho sobre el atributo en la estructura de la transaccin para la definicin de la frmula.

Sugerencias para la definicin de transacciones: Utilizar el Diagrama de Transacciones Utilizar el Diagrama de Tablas Utilizar la opcin: Tools/Browsers. Utilizar la insercin de reglas, funciones, etc. CREAR UN MODELO DE PROTOTIPO Luego de definidas las dos transacciones anteriores en el modelo de Diseo, querr probar en ejecucin lo hecho, para lo cul deber implementar la aplicacin en una plataforma determinada.
Recuerde que un modelo de prototipo o produccin corresponder a una implementacin del sistema.

(Opcin:Tools/Diagrams/Transactions) (Opcin:Tools/Diagrams/Tables) (Opcin: Insert/Rules, Insert/Functions,etc.)

Deber configurar la interfaz que utilizar (win o web), el lenguaje (ej: .Net), DBMS (ej: Sql Server), as como el servidor en el que se encuentra la base de datos que asociar a su modelo, en la que se crearn las tablas, el nombre de dicha base de datos, usuario y password de la base de datos con los que se conectar a la misma, etc. Cuando termine de configurar el modelo se realizar el anlisis de impacto, cuyo resultado ser el IAR (reporte de anlisis de impacto). Observe detenidamente la informacin que le brinda el reporte. Luego de ejecutado el programa de Creacin de la base de datos, estar pronto para generar los programas correspondientes a los dos objetos creados. Puede abrirse una ventana inmediatamente despus, que le preguntar si desea ejecutar GeneXusQuery. Dgale que NO.

Especifique y genere sus objetos (aqu generar los fuentes en el lenguaje elegido; por ejemplo, si su prototipo es .Net se crear por cada objeto GeneXus un archivo de extensin cs) Compile y ejecute el DeveloperMenu (men creado automticamente por GeneXus que contiene una entrada por cada objeto generado. Desde all podr ejecutar sus dos transacciones). Ingrese algunos pases y clientes. Luego: 5

Pruebe ingresar un pas sin nombre. Pruebe los botones de navegacin para recorrer los pases ingresados. Pruebe seleccionar un pas de los existentes, utilizando el botn Select. Qu objeto es el que se abre al hacerlo? Lo program ud.? Vaya a su KB y bsquelo en la lista de objetos. Pruebe editar un pas existente, digitando su cdigo en el campo PaisCody presionando el botn Get a su lado si su prototipo es Web si es Win (y est trabajando sin Client Side Validation). Pruebe vaciar el campo correspondiente al nombre del pas y aplicar los cambios. Pruebe al ingresar un cliente nuevo, digitar un identificador de pas inexistente, o dejarlo vaco. Qu ndice utiliz GeneXus para realizar este chequeo? Luego presione la imagen de prompt al lado de PaisCod si su aplicacin es Web (haga F4 sobre el campo PaisCod si su aplicacin es Win) y seleccione uno de los pases existentes. Qu objeto se abri al hacer esto? Observe que es el mismo que cuando presion Select para elegir un pas en la transaccin Paises. Pruebe dejar vaco el nombre de un cliente, y luego la direccin. Observe que CliTotCmp est Read Only. Por qu? Pruebe eliminar un pas para el que tenga por lo menos un cliente asociado. Qu ndice utiliz GeneXus para realizar ese chequeo e impedir la eliminacin? Ingrese 2 clientes con el mismo nombre. A continuacin veremos cmo evitar que esto suceda.

Clave candidata Si en su realidad no pueden existir 2 clientes con el mismo nombre, es decir, si CliNom no puede tener valores duplicados, cmo representa esto en el Diseo para que sea chequeado automticamente? Defina un ndice unique sobre la tabla CLIENTES, compuesto por el atributo CliNom, de tipo ascendente.
Deber ir al modelo de Diseo para hacer esto. Por qu?

Especifique y genere la transaccin Customer (Build/Specify) Compile y ejecute el DeveloperMenu y observe lo que sucede en ejecucin si ahora intenta insertar dos clientes con el mismo nombre. Efecto de permitir valores nulos en atributos foreign key Como habr visto, los programas GeneXus controlan la integridad referencial entre las tablas, de modo que no se le permiti ingresar un cliente en la transaccin Clientes sin asociarle pas (sin ingresar un cdigo de pas vlido). Pero algunos clientes pueden no brindarle la informacin del pas del que son originarios, o puede ser informacin desconocida para algn cliente en particular. Si desea poder ingresar un cliente sin pas asociado, qu deber modificar del diseo de la transaccin Clientes?

Por qu no puede modificarse el valor de la columna Nulls del atributo PaisCod en la estructura de la transaccin Clientes en el modelo de Prototipo y deber ir a Diseo para hacerlo?

Despus de modificada en Diseo la propiedad Nulls del atributo PaisCod, que es foreign key en Clientes, pase a Prototipo para probar en ejecucin la nueva transaccin. Para ello especifique y genere nuevamente la transaccin Clientesr para que se tenga en cuenta el cambio en el programa generado. Compile y ejecute intentando dejar un cliente sin pas y observe que ahora esto ser posible. 6

Productos

--- Field Map -------------------------------------------ProdId ProdDsc ProdStkMin ProdStkAct ProdFchLta ProdPrecLta :Cdigo del Producto :Descripcin del Producto :Stock mnimo :Stock Actual del Producto :Fecha de Lista del Producto :Precio Unitario Num Char Num. Num Date Importe 6 30 4.0 4.0 8

Reglas ----------------------------------------------------1. No aceptar el stock del producto si se est modificando un artculo ya existente, pero permitir ingresar el stock cuando se inserta un nuevo artculo (en insert). 2. No permitir ingresar un stock nulo.

Por qu no pudo crear esta transaccin en el modelo de Prototipo? Puede pasar a Prototipo nuevamente despus de creada esta transaccin en Diseo, para probar en ejecucin la nueva transaccin, o puede hacerlo despus de que cree la transaccin de facturas que sigue. Sugerimos esto ltimo. En el momento en que pase a Prototipo, no olvide estudiar el IAR (reporte de anlisis de impacto) que se le desplegar en ese pasaje. En l se le informar acerca de las tablas que debern crearse, ndices, etc.

Facturas

--- Field Map ------------------------------------------------FacId (autonumerado) :Identificador de Factura Num. 6.0 FacFch :Fecha de factura Date 8 FacTpo :Tipo de la factura (Crdito o Contado) Char CliId :Identificador de Cliente CliNom :Nombre del Cliente FacLinNro :Nro. de Lnea Num 2.0 ProdId :Cdigo del Producto ProdDsc :Descripcin del Producto FacLinCnt :Cantidad de la Lnea Num 4.0 FacProdPre :Precio del Producto en la Factura Importe FacLinImp :Importe de lnea Importe FacTotal :Total de Factura Importe

Observar que esta transaccin es de dos niveles. Le puso nombre al nivel 2? Si ud. no lo hace, GeneXus lo har por ud. Qu nombres le dar GeneXus por defecto a las tablas correspondientes al primer nivel y al segundo de la transaccin Facturas? Vaya al folder de nombre Tables que aparece en el rbol de directorios de la izquierda del ambiente de Prototipo y observe las tablas que GeneXus dise de acuerdo al diseo de transacciones que ud. realiz. Busque las tablas

que correpondan al nivel 1 y 2 de la transaccin Facturas y observe qu atributos aparecen en cada una. Observe que la clave primaria de la tabla correspondiente al nivel dos est conformada por dos atributos: FacId e FacLinNro. Observe los ndices que crear GeneXus sobre esta tabla. Observe que el form anterior est personalizado: CliId y CliNom se han puesto en la misma fila. Puede mover controles arrastrando el mouse, y:

En

form

Win:

los

controles

se

alinean

utilizando

la

paleta

de

herramientas

Form.

Los nombres de las columnas del grid se han acortado (no coinciden con las descripciones que le dimos a los atributos). Cmo logra esto? Recuerde que puede especificar el nombre que desea que aparezca por defecto como ttulo de columna de un atributo cuando ste aparezca en grids, mediante la propiedad del atributo: Column Title. (haciendo botn derecho/properties sobre el atributo en la estructura). La otra opcin es cambiar el ttulo del atributo en la columna del grid particular donde se encuentra. Cmo? El control atributo FacTotal aparece en rojo y a la derecha. Para lograrlo:

Win: se arrastra con el mouse al lugar donde desea que quede. Puede utilizar la plaleta de herramientas Form para alinear los controles. Para que salga en el form de color rojo adems cambiar al valor Original la propiedad del modelo de prototipo Color in Read-Only Fields. (Esto se hace en: File/Edit Model/botn Properties/grupo User Interface/property Color in Read-Only Fields)

Ejecute y pruebe las dos transacciones anteriores.


Pas a Prototipo, especific y gener los programas correspondientes a Productos y Facturas? Pruebe el manejo de datos dentro del grid. Intente insertar, modificar y eliminar lneas del grid de una factura.

Agregue las siguientes reglas a la transaccin: 1. Numerar las lneas de la factura en forma automtica (a partir de aqu el atributo FanLinNro no necesita ser ingresado por el usuario. Deshabilitarlo.) 2. Actualizar el total de compras del cliente. 3. Actualizar el stock del producto. 4. Controlar que el stock del producto no sea menor que cero. 5. Evitar que se ingresen ms de 5 lneas en la factura (relacionado a frmula 3). Frmulas: 1. Calcular el importe de cada lnea de la factura. 2. Calcular el total de la factura. 3. Contar la cantidad de lneas ingresadas. 9

Tiene que ir a Diseo para agregar reglas en una transaccin? No es suficiente definirlas en la transaccin en Prototipo? Por qu debi incluir el atributo ProdStkAct en la estructura de la transaccin pese a que no lo incluy en el form? (lo mismo que para CliTotCmp) Cmo muestra GeneXus la frmula 3 en la estructura de la transaccin: en mayscula o en minscula (COUNT Count)? Existe alguna diferencia? Recuerde volver a especificar y generar el objeto que sufri las modificaciones para que se cree el programa correspondiente con las modificaciones (sino quedar el viejo). Aqu solo modific la transaccin Facturas por lo que no necesita hacer Build Allsino Sepecify.

Ejecute y pruebe la transaccin. Regla de asignacin versus frmula Visualice en el form de Facturas el saldo del cliente. Recuerde que: CliTotSaldo=CliTotCmp - CliTotPag.

Si solamente inserta el atributo CliTotSaldo en el form y olvida declararlo en la estructura le dar un error al grabar (Atributo: Invalid attribute). Recuerde declarar siempre en la estructura los atributos de la tabla extendida que vaya a utilizar en el form o en las reglas.

Pruebe ingresar una factura para un cliente determinado y observe que se dispara la regla 4 definida: add( FacTotal, CliTotCmp), pero no se actualiza el saldo, CliTotSaldo, de acuerdo al clculo anterior. Por qu? Modifique el atributo ClitotSaldo para que siempre que se consulte, desde cualquier objeto GeneXus, se calcule. Normalizacin Si en la estructura de la transaccin Facturas se agregan al primer nivel los atributos PaisCod y PaisNom, qu ocurrir con la tabla FACTURAS? Se almacenar el atributo PaisCod como foreign key a la tabla PAISES? O se normalizar y GeneXus entender que ese atributo deber inferirse, al igual que CliNom del cliente, CliId? Prubelo en GeneXus y corrobore si el comportamiento es el que ud. esperaba. Reflexione sobre lo hecho.

Y si quisiera que la factura tuviera un pas propio, que el usuario final deba ingresar junto con la factura, es decir, si quisiramos que el pas no fuera inferido del cliente? Por ahora ud. no cuenta con las herramientas para resolverlo. Lo har al final del prctico, cuando estudie subtipos.

Ejercicios de Reportes y Procedimientos


A continuacin proponemos realizar una serie de reportes. 1. Reporte de clientes en un rango de nombres. Si ya vio como implementar un Web panel para pedirle datos al usuario, hgalo]. Los datos que se desean listar para cada cliente son : Nombre, Direccin y Saldo.
Al crear un objeto reporte se le abrir automticamente el Report Wizard para ayudarlo en la definicin del Layout y Soruce del reporte. Cancele este Wizard, as practica la creacin de cero del reporte.

10

Es necesario pasar a Diseo para crear un reporte, o puede crearse directamente en Prototipo? Al especificar el reporte dedique unos minutos a estudiar el listado de navegacin (es muy importante hacerlo en todos los casos). Observe el orden que eligi GeneXus para el for each. Est optimizado este reporte? Observe las diferencias en el listado de navegacin que surgen de agregar o quitar la clusula order CustomerName del for each. Qu tablas est accediendo el for each? Ahora agregue el nombre del pas del cliente a la informacin que quiere mostrarse, y observe la repercusin en el listado de navegacin.

2. Reporte de la factura al finalizar el ingreso de la misma en la transaccin Facturas.

Recuerde detenerse a observar el listado de navegacin resultante de la especificacin de su reporte. Debi incluir un parmetro para recibir el identificador de la factura que se debe imprimir. Este parmetro lo declar como el atributo FacId, o defini una variable? Qu cambios deber hacer en su reporte si ahora declarara como parmetro la opcin contraria a la que eligi? Qu solucin es preferible en este caso?

3. Reporte de ventas por cliente, incluyendo slo los clientes que tienen facturas (Corte de Control). Cliente : CliXXX Id. Factura 1 2 Fecha 01/01/06 01/02/06 Importe $150 $1000

Total de ventas: $1150 Cliente : CliYYY Id. Factura 15 11 Fecha 01/01/06 01/02/06 Importe $700 $300

Total de ventas: $1000

Observe cuidadosamente el listado de navegacin. Cmo sabe que implement un corte de control? Si adems de querer agrupar las facturas por cliente, totalizando el importe, desea que salgan ordenadas las facturas por nmero, qu deber hacer? Prubelo. En el ejemplo la factura 11 debera salir antes que la 15. Por qu GeneXus informa en el listado de navegacin que el orden ser el mismo para los dos for eachs, incluso cuando ud. especific un orden para el externo y otro orden para el anidado?

4. Reporte de ventas por fecha, agrupadas por cliente. Es decir, para cada fecha en la que hay facturas, se desea ver la informacin de las mismas (Identificador e Importe), pero agrupada por cliente. (Doble corte de control). Fecha: 01/01/06 11

Cliente: CliXXX Id 2 3 Cliente : CliYYY Id. 1 4

Importe $150 $10 Importe $700 $300

Total de ventas: $1160 Fecha: 02/02/06 Cliente: CliYYY Id 5 Importe $200

Total de ventas: $200


Cuntos for eachs son necesarios para implementar un corte de control doble? Dnde se especifica cada criterio de corte?

5. Definir un procedimiento para generar una nueva lista de precios para los productos. El procedimiento debera recibir por parmetros: fecha de aumento y porcentaje de aumento. Para cada producto deber generar un nuevo registro en el histrico de precios, con la fecha ingresada como parmetro y el precio que resulte de aplicar el porcentaje de aumento, al ltimo precio del producto, anterior a la fecha de aumento.
En el procedimiento suponemos que no existirn registros para la fecha (recibida por parmetro ), y por tanto siempre se insertar un nuevo registro para cada producto. Modifique ahora su solucin de forma tal de que si s existiera ya un registro para algn producto con la fecha recibida, el mismo se actualice de forma tal de aplicarle el porcentaje a su precio.

6. Definir la transaccin Recibo de estructura: RecId RecFch CliId RecTotal Nmero de Recibo Fecha de Recibo Cdigo de Cliente Importe total de Recibo Numeric(6) Date Numeric(6) Numeric(9.2)

Y definir un procedimiento que realice lo siguiente: para cada cliente, sumarice el importe total de todas sus facturas, y genere un recibo de pago para el cliente, con la fecha del da, y el importe total a cobrarle.
En la solucin que implement, si un cliente no tuviera facturas, tendra igualmente un recibo por total cero, generado? Si la respuesta es afirmativa, cmo modifica esto para que solo los clientes con facturas tengan un

12

recibo generado?

13

Ejercicios de Work Panels


Crear un folder y agrupar en ste, los Work-Panels

Trabajar con Clientes


Se trata de un Work-Panel que muestra los clientes en forma de lista, y permite las siguientes opciones: Visualizar slo los clientes que estn en el rango que el usuario determine. Posicionamiento por Nombre de Cliente dentro de los clientes en el rango (Regla Search). Dar Altas, Bajas y Modificaciones a clientes, es decir que desde este Work Panel deben haber tres botones los cuales deben llamar a la transaccin de Clientes (pasando como parmetro el modo correspondiente) para poder realizar dichas operaciones. Dar la posibilidad de insertar un cliente tanto al presionar el botn como al presionar la tecla de funcin F6. Permitir visualizar la lista de Facturas de un cliente (botn de Facturas). Ver en prxima hoja Visualizar facturas de un cliente.

Utilizar de Tools/ Browsers la opcin Callees para poder visualizar a qu programas llama esteWorkPanel (rbol de llamadas). 14

Visualizar facturas de un cliente


Se desea que este Work Panel despliegue la lista de facturas ordenada por fecha, del cliente recibido como parmetro. Los datos que se desean desplegar en pantalla en la parte fija del Work Panel son Identificador y Nombre del cliente, y en el subfile: Nro. de Factura, Fecha y Total de Factura. Incluir en este Work Panel un bitmap con el logo de la empresa, el archivo de extensin BMP sacarlo del directorio de windows. Desde este Work Panel se desea tener un botn al cual presionndolo se llame a otro Work Panel que permita Visualizar todos los datos de la factura que se seleccione.

Work Panel Sin Tabla Base


Crear un Work Panel que muestre para cada cliente el total facturado, pero slo de los clientes que tienen facturas.

Modificar el Prompt de Productos (generado por defecto)


El Prompt de Productos es un Work-Panel (generado automticamente por GeneXus, de nombre GX00NN) que puede ser llamado desde la transaccin de facturas (presionando F4 estando posicionado en el cdigo de producto o con el botn de prompt) y permitir seleccionar un determinado producto. Lo que se pide es tener la posibilidad de dar un alta (llamar a la transaccin de productos) desde dicho Work Panel.

15

Subtipos
Si ahora queremos representar que una factura pertenece a un pas, independientemente del pas del cliente de la misma, qu modificaciones debe realizar? Implemntelas.
Observar que la factura pertencer a un pas, por ejemplo Uruguay, y el cliente de la factura podr pertenecer a otro pas distinto, por ejemplo United States.

Ejercicio de Styles
Definir un Style para transacciones que contenga los botones Confirm, Close, Delete, Help, First, Previo, Next, Last y Select

Asociarle este style a todas las transacciones (excepto a las que son llamadas de un work panel TRABAJAR CON )

Menu Bar
Crear un Menu Bar que contenga un Item llamado "LISTADOS". Colgar de dicho Item, la opcin "Listado de Facturas" . Seleccionando esta opcin se debe invocar a un reporte que liste todas las facturas. Asociarle este Menu Bar a la TRN de Clientes y customizar el Item de "Listado de Facturas". Es decir que en la TRN de Clientes se llamar a un listado que listar todas las Facturas del cliente con que se est trabajando.

16

Вам также может понравиться