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

Taller de Herramientas RADD

Ejercicios Genexus
Instrucciones
• Para los siguientes ejercicios es necesario que:
– Se indiquen las transacciones que se deben crear.
– Cada transacción B que cite la llave de otra transacción A,
además de la llave primaria debe incluir al menos un atributo
más asociado a esa llave.
– Se deben determinar las tablas (así como cada uno de sus
campos) que GeneXus creará en el manejador de la base de
datos a partir del modelo de transacciones propuesto.
– Se debe dibujar la cardinalidad entre dichas tablas.
– Determinar tablabase y tabla extendida para cada una de las
tablas.
– En caso de necesitar el uso de subtipos (subtypes group), debe
indicar el nombre del subtipo, sus elementos y cada uno de sus
supertipos.
Ejercicio 1
• Necesitamos desarrollar una aplicación
GeneXus para llevar el control de discos y sus
autores. Considerar los siguientes puntos:
– Un cantante puede grabar varios discos.
– Un disco puede ser grabado por sólo un cantante.
Ejercicio 2
• Siguiendo con el Ejercicio 1. Se ha llegado a la
conclusión de que, además de los puntos
expuesto, también debe tomar en cuenta:
– Una canción puede grabarse en muchos discos.
– Un disco puede tener muchas canciones.
Ejercicio 3
• Se desea realizar una pequeña aplicación
GeneXus para llevar el control de libros dentro
de una biblioteca en la que se prestan única y
exclusivamente libros. Se sabe que:
– Un usuario puede solicitar muchos préstamos,
pero que un préstamo sólo se asocia a un usuario.
– Un libro puede prestarse muchas veces y un
préstamo puede involucrar muchos libros.
Ejercicio 4
• Se ha concretado una cita con un cliente que desea realicemos una
aplicación GeneXus, para ellos, nos ha comentado lo siguiente:
– “Nosotros registramos los datos de nuestros clientes, y a éstos les
ofrecemos viajes a distintas ciudades de distintos países, de las que
registramos también las atracciones turísticas”.
• Por ello se sabe que:
– Un cliente puede realizar muchos viajes, pero un viaje sólo puede ser
asociado a un cliente.
– Los países tienen muchas ciudades, pero una ciudad sólo pertenece a
un país.
– Las atracciones turísticas se asocian a una ciudad pero las ciudades
pueden tener muchas atracciones turísticas.
– Para cada viaje se asocia una ciudad origen y una ciudad destino.
– Cada viaje puede incluir varias atracciones turísticas y una atracción
puede citarse en muchos viajes.
Ejercicio 5
• Crear una kb de nombre Disquera.
• Se implementarán las transacciones
propuestas en el ejercicio 1 y 2.
• Implementar una regla que mande un
mensaje indicando que el nombre de un
cantante no puede quedar vacío, dicha regla
debe frenar la actualización de la información.
Ejercicio 5
• Crear un dominio de nombre Id, de tipo numeric, con
longitud 6 y 0 decimales. El valor de propiedad
autonumber deberá ser false.
• La llave primaria de cada transacción deberá estar
basada en el dominio Id que se creó en el punto
anterior.
• Se creará un objeto de tipo procedimiento que recorra
la tabla asociada a la transacción Cantante, asigne el
valor del atributo llave primaria a una variable, al final
del recorrido, a dicha variable se aumentará 1 y será
devuelta como parámetro de salida.
Ejercicio 5
• Debe crear una regla que llame al procedimiento
creado en el punto anterior , se espera que el
procedimiento devuelva un valor que será
asignado al atributo llave primaria de la
transacción cantante.
• La regla que haga la llamada al procedimiento
debe invocarse después de validar pero antes de
insertar físicamente los datos sólo si el modo en
que se invoca la transacción es INSERT.
Ejercicio 5
• Ejemplo de recorrido de una tabla:
For Each
//Condiciones (where)
//acciones a realizar con la información
EndFor
– Nota:
• Los atributos involucrados en el For Each determinan la tabla
base del mismo.
• Si se recibe un atributo como parámetro, también influirá en
la determinación de la tabla base del For Each.
• Las condiciones de búsqueda “where” son comparaciones
de atributos vs valores por default/variables.
Ejercicio 6
• Dado el diagrama de transacciones determine qué
reglas están bien definidas y cuales no.
Ejercicio 6
1. imprimeProducto.Call(ProductoId) on
AfterDelete;
2. CargoId = ObtieneCargoId.Udp() on
AfterInsert;
3. Error(“El nombre del empleado no puede
quedar vacío”) on AfterValidate;
4. VentaFecha=&today if Insert on AfterLevel
Level VentaProductoCantidad;
Ejercicio 6
5. imprimeVenta.Call(VentaId) on BeforeComplete;
6. imprimeVenta.Call(VentaId) on AfterDelete;*
7. EmpleadoId = 1 on BeforeInsert Level
VentaProductoCantidad;

*Para la regla del punto 6, considere que no se han


asociado productos a la venta.
Ejercicio 7
• Dado el siguiente diagrama de transacciones,
determine si reglas están bien definidas o no.
Ejercicio 7
1. imprimeVenta.Call(VentaId) on AfterLevel
Level VentaProductoCantidad;
2. ProductoId = ObtieneProductoId.Udp() on
BeforeInsert;
3. VentaProductoId=
ObtieneVentaProductoId.Udp() if Insert on
AfterLevel Level VentaFecha;
Ejercicio 8
Considerando las transacciones del ejercicio 7,
responda a los siguientes cuestionamientos:
1. Se desea que inmediatamente después de
insertada una venta a través de la transacción
Venta y luego de efectuado el COMMIT, salga la
emisión de un listado con todos los datos de la
venta con sus respectivos productos. Seleccione
la regla que se deberá declarar en la transacción.
a) ListaVenta.Call(VentaId) if insert;
b) ListaVenta.Call(VentaId) on AfterInsert;
c) ListaVenta.Call(VentaId) if insert on AfterComplete;
Ejercicio 8
2. En la transacción Venta, luego de insertada cada línea
de producto, se disparará un procedimiento que
realiza determinadas operaciones. Determine cuál de
las reglas propuestas es la definición adecuada a
incluir en la transacción Venta, para resolver la
necesidad planteada.
a) ProcedimientoX.Call(VentaId) if Insert;
b) ProcedimientoX.Call(VentaProductoId) on AfterInsert;
c) ProcedimientoX.Call(VentaId) on AfterComplete;
d) Ninguna de las opciones anteriores es correcta
Ejercicio 9
Justifique sus respuestas del ejercicio 6 al
ejercicio 8.
Ejercicio 10
Determine las tablas que Genexus creará para el
siguiente modelo de transacciones.

Usuario{ Comentario{
*UsuarioId *ComentarioId
UsuarioNombre ComentarioTexto
UsuarioActivo UsuarioId
Telefono{ UsuarioNombre
*TelefonoNumero }
TelefonoTipo
}
}
Ejercicio 11
Determine tabla base y tabla extendida para el
siguiente modelo de transacciones.

Usuario{ Comentario{
*UsuarioId *ComentarioId
UsuarioNombre ComentarioTexto
UsuarioActivo UsuarioId
Telefono{ UsuarioNombre
*TelefonoNumero }
TelefonoTipo
}
}
Ejercicio 12
Dado el modelo de transacciones siguiente, cree
un web panel que permita mostrar en un grid,
cada uno de los usuarios y la cantidad de
comentarios que ha realizado. Interesa visualizar
todos los usuarios aún cuando no hayan
realizado comentarios.
Usuario{ Comentario{
*UsuarioId *ComentarioId
UsuarioNombre ComentarioTexto
UsuarioActivo UsuarioId
Telefono{ UsuarioNombre
*TelefonoNumero }
TelefonoTipo
}
}
Ejercicio 13
Dado el modelo de transacciones siguiente, cree
un procedimiento que permita mostrar en un
reporte PDF, cada uno de los usuarios y la
cantidad de comentarios que ha realizado.
Interesa visualizar todos los usuarios aún
cuando no hayan realizado comentarios.
Usuario{ Comentario{
*UsuarioId *ComentarioId
UsuarioNombre ComentarioTexto
UsuarioActivo UsuarioId
Telefono{ UsuarioNombre
*TelefonoNumero }
TelefonoTipo
}
}
Ejercicio 14
Dado el modelo de transacciones siguiente, cree
un web panel que permita mostrar en un grid,
cada uno de los usuarios y la cantidad de
comentarios que ha realizado. Interesa mostrar
sólo aquellos usuarios que hayan realizado al
menos un comentario.
Usuario{ Comentario{
*UsuarioId *ComentarioId
UsuarioNombre ComentarioTexto
UsuarioActivo UsuarioId
Telefono{ UsuarioNombre
*TelefonoNumero }
TelefonoTipo
}
}
Ejercicio 15
Dado el modelo de transacciones siguiente, cree
un procedimiento que permita mostrar en un
reporte PDF, cada uno de los usuarios y los
comentarios que ha realizado. Interesa mostrar
sólo aquellos usuarios que hayan realizado al
menos un comentario.
Usuario{ Comentario{
*UsuarioId *ComentarioId
UsuarioNombre ComentarioTexto
UsuarioActivo UsuarioId
Telefono{ UsuarioNombre
*TelefonoNumero }
TelefonoTipo
}
}