SlideShare una empresa de Scribd logo
1 de 7
Descargar para leer sin conexión
Ya hemos visto anteriormente el concepto general de Business Component y su
aplicación en una transacción de un solo nivel.
Veamos ahora qué sucede cuando nos enfrentamos a la declaración de una
transacción de dos niveles como Business Component.
Analizaremos esta situación a través de la implementación de una nueva funcionalidad
en nuestra aplicación.
Cada cierto tiempo la Agencia obsequia una excursión a elección, en este caso a una
ciudad italiana, a grupos reducidos de clientes.
Si bien un cliente puede contratar varias excursiones y cada excursión puede ser
contratada por varios clientes, en particular cada cliente puede participar solamente de
una única excursión obsequiada por la Agencia (al menos por ahora).
Cuando las excursiones se insertan, se especifica si son gratuitas o no. En tanto, en la
transacción Customer hemos definido el atributo fórmula CustomerFreeTrips y la regla:
Error(“Customer already has registered a free trip.”) if CustomerFreeTrips > 1;
para controlar que los clientes no puedan tener más de una excursión obsequiada.
Utilizaremos la transacción Customer como Business Component. Para eso, declaramos
su propiedad Business Component con el valor True.
Al grabar, sabemos que GeneXus creó el tipo de dato Customer asociado a la
transacción. Pero como se trata de una transacción de dos niveles, creó también el tipo
de dato Customer.Trip asociado a las líneas del segundo nivel, que en nuestro ejemplo
corresponden a las excursiones del cliente.
Este web panel muestra los clientes en un combo dinámico y las excursiones
gratuitas a ciudades italianas en una grilla.
También hemos especificado la propiedad Allow Selection del grid, con el valor
True, para que el usuario final, pueda seleccionar una línea del grid:
La idea entonces es seleccionar un cliente en el combo, una excursión del grid, y
que al presionar el botón Confirm dicha excursión se grabe como una línea del
cliente, controlando siempre que solamente se registre una excursión gratuita
para ese cliente.
Definimos en este objeto una variable &Customer de tipo Customer y una variable
&oneTrip de tipo Customer.Trip.
Analicemos ahora el código declarado en el evento Enter asociado al botón.
En el evento Enter asociado al botón Confirm, lo primero que hacemos es recuperar
de la base de datos toda la información del cliente seleccionado en el combo y la
misma queda cargada en memoria en la variable &Customer.
La variable &oneTrip es del tipo de datos de una línea de la transacción Customer,
es decir que corresponde a una excursión del cliente. O sea que esta variable es
compuesta de varios miembros que almacenan datos.
En particular le estamos asignando al miembro TripId, el identificador de la
excursión seleccionada en el grid.
En la siguiente línea de código estamos usando un método Add, el cual agrega a la
lista de excursiones que ya tiene el cliente, la excursión que se le indica entre
paréntesis O sea, la variable &oneTrip que hemos cargado en la línea de código
anterior.
Hasta ahora hemos trabajado en memoria. Solamente hemos agregado una
excursión a un cliente.
Para realizar la actualización física en la base de datos declaramos el método Save
y el comando Commit, necesarios al trabajar con Business Component.
¿Qué sucede con el control de la cantidad de excursiones gratuitas por cliente?
Si bien este control se dispara automáticamente al aplicar el método Save a la
variable del Business Component, para que el usuario final se entere, debemos
obtener y mostrar explícitamente los mensajes que se emitieron.
¿A qué tipo de mensajes nos referimos? A los propios que emite GeneXus por
controles de consistencia de los datos, unicidad de valores de llaves primarias,
etc. y a los mensajes asociados a nuestras propias reglas Errror y Msg.
¿Cómo hacemos entonces para recuperar los mensajes que ocurrieron?
Utilizamos el Tipo de datos estructurado Messages que automáticamente define
GeneXus al crear una nueva KB. La finalidad de este tipo de datos colección, es
permitirnos acceder a los mensajes que se emiten en la ejecución de un Business
Component.
De modo que definimos dos variables:
&Messages (del tipo de datos Messages, colección) y
&oneMessage (del tipo de datos Messages.Message, que representa un elemento
de la colección).
Aplicamos el método GetMessages a la variable &Customer y obtenemos la
colección de mensajes que ocurrieron…
y por último, utilizando la estructura “For elemento in colección”, recorremos
cada mensaje de la variable colección de mensajes y desplegamos su descripción.
Ejecutamos el web panel WPTrips, elegimos al cliente Parker, seleccionamos la
excursión a Roma y presionamos el botón.
Vemos que se despliega el mensaje de GeneXus informando que se realizó el
registro.
¿Qué sucederá si intentamos asignarle también la excursión a Venecia?
Se despliega el mensaje correspondiente a nuestra regla Error, que controla que
el cliente solamente tenga asociada una excursión gratuita.

Más contenido relacionado

Similar a Genexus

Controles de validación en asp
Controles de validación en aspControles de validación en asp
Controles de validación en asp
Maria Tomalá
 
Controles Mas Habituales Leidy Cita
Controles Mas Habituales Leidy CitaControles Mas Habituales Leidy Cita
Controles Mas Habituales Leidy Cita
Rokr02
 
Presetación TFT PalomaCuestaUria
Presetación TFT PalomaCuestaUriaPresetación TFT PalomaCuestaUria
Presetación TFT PalomaCuestaUria
Paloma Cuesta Uría
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
Antonio Palomares Sender
 
Practica multiplicacion de_dos_numeros
Practica multiplicacion de_dos_numerosPractica multiplicacion de_dos_numeros
Practica multiplicacion de_dos_numeros
ANTHONY OCHOA
 

Similar a Genexus (20)

Comenzando con los servicios móviles en AWS
Comenzando con los servicios móviles en AWSComenzando con los servicios móviles en AWS
Comenzando con los servicios móviles en AWS
 
Sesion 02 clases en_vb_net
Sesion 02 clases en_vb_netSesion 02 clases en_vb_net
Sesion 02 clases en_vb_net
 
Formularios web
Formularios webFormularios web
Formularios web
 
Controles de validación en asp
Controles de validación en aspControles de validación en asp
Controles de validación en asp
 
Html investigacion
Html investigacionHtml investigacion
Html investigacion
 
Html investigacion
Html investigacionHtml investigacion
Html investigacion
 
Controles Mas Habituales Leidy Cita
Controles Mas Habituales Leidy CitaControles Mas Habituales Leidy Cita
Controles Mas Habituales Leidy Cita
 
Curso HTML 5 & jQuery - Leccion 4
Curso HTML 5 & jQuery - Leccion 4Curso HTML 5 & jQuery - Leccion 4
Curso HTML 5 & jQuery - Leccion 4
 
Comenzando con los Servicios Móviles en AWS
Comenzando con los Servicios Móviles en AWSComenzando con los Servicios Móviles en AWS
Comenzando con los Servicios Móviles en AWS
 
Consumiendo un servicio externo con Axios en Alexa
Consumiendo un servicio externo con Axios en AlexaConsumiendo un servicio externo con Axios en Alexa
Consumiendo un servicio externo con Axios en Alexa
 
Presentacion1(5)(2)
Presentacion1(5)(2)Presentacion1(5)(2)
Presentacion1(5)(2)
 
GWT - Una introducción
GWT - Una introducciónGWT - Una introducción
GWT - Una introducción
 
Presentacion1(5)
Presentacion1(5)Presentacion1(5)
Presentacion1(5)
 
Presetación TFT PalomaCuestaUria
Presetación TFT PalomaCuestaUriaPresetación TFT PalomaCuestaUria
Presetación TFT PalomaCuestaUria
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
 
Canales de marketing y modelos de atribución - Sector Turismo
Canales de marketing y modelos de atribución - Sector TurismoCanales de marketing y modelos de atribución - Sector Turismo
Canales de marketing y modelos de atribución - Sector Turismo
 
Modelos de negocio
Modelos de negocioModelos de negocio
Modelos de negocio
 
Practica multiplicacion de_dos_numeros
Practica multiplicacion de_dos_numerosPractica multiplicacion de_dos_numeros
Practica multiplicacion de_dos_numeros
 
Consumiendo servicios Restful en Xamarin.Forms
Consumiendo servicios Restful en Xamarin.FormsConsumiendo servicios Restful en Xamarin.Forms
Consumiendo servicios Restful en Xamarin.Forms
 
Informe Proyecto Interciclo
Informe Proyecto IntercicloInforme Proyecto Interciclo
Informe Proyecto Interciclo
 

Último

TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptxTECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
UPSE
 
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdfTECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
UPSE
 

Último (9)

Especificación casos de uso del negocio
Especificación  casos de uso del negocioEspecificación  casos de uso del negocio
Especificación casos de uso del negocio
 
Modelado de Casos de uso del negocio
Modelado de  Casos  de  uso  del negocioModelado de  Casos  de  uso  del negocio
Modelado de Casos de uso del negocio
 
CIBERSEGURIDAD Y SEGURIDAD INFORMÁTICA.pptx
CIBERSEGURIDAD  Y SEGURIDAD INFORMÁTICA.pptxCIBERSEGURIDAD  Y SEGURIDAD INFORMÁTICA.pptx
CIBERSEGURIDAD Y SEGURIDAD INFORMÁTICA.pptx
 
Tipos de datos en Microsoft Access definiciones.pdf
Tipos de datos en Microsoft Access definiciones.pdfTipos de datos en Microsoft Access definiciones.pdf
Tipos de datos en Microsoft Access definiciones.pdf
 
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptxTECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
TECNOLOGIA DE LA INFORMACION Y MULTIMEDIA 15 MAYO.pptx
 
El necesario mal del Legacy Code (Drupal Iberia 2024)
El necesario mal del Legacy Code (Drupal Iberia 2024)El necesario mal del Legacy Code (Drupal Iberia 2024)
El necesario mal del Legacy Code (Drupal Iberia 2024)
 
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdfTECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
TECNOLOGÍA DE LA INFORMACIÓN SLIDESHARE INVESTIGACION.pdf
 
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
serenidad APP presentacion.pdfes una innovadora aplicación móvil diseñada par...
 
Ciberseguridad y Seguridad Informática Franco Correa Grupo B.pptx
Ciberseguridad y Seguridad Informática Franco Correa Grupo B.pptxCiberseguridad y Seguridad Informática Franco Correa Grupo B.pptx
Ciberseguridad y Seguridad Informática Franco Correa Grupo B.pptx
 

Genexus

  • 1. Ya hemos visto anteriormente el concepto general de Business Component y su aplicación en una transacción de un solo nivel. Veamos ahora qué sucede cuando nos enfrentamos a la declaración de una transacción de dos niveles como Business Component.
  • 2. Analizaremos esta situación a través de la implementación de una nueva funcionalidad en nuestra aplicación. Cada cierto tiempo la Agencia obsequia una excursión a elección, en este caso a una ciudad italiana, a grupos reducidos de clientes. Si bien un cliente puede contratar varias excursiones y cada excursión puede ser contratada por varios clientes, en particular cada cliente puede participar solamente de una única excursión obsequiada por la Agencia (al menos por ahora). Cuando las excursiones se insertan, se especifica si son gratuitas o no. En tanto, en la transacción Customer hemos definido el atributo fórmula CustomerFreeTrips y la regla: Error(“Customer already has registered a free trip.”) if CustomerFreeTrips > 1; para controlar que los clientes no puedan tener más de una excursión obsequiada. Utilizaremos la transacción Customer como Business Component. Para eso, declaramos su propiedad Business Component con el valor True. Al grabar, sabemos que GeneXus creó el tipo de dato Customer asociado a la transacción. Pero como se trata de una transacción de dos niveles, creó también el tipo de dato Customer.Trip asociado a las líneas del segundo nivel, que en nuestro ejemplo corresponden a las excursiones del cliente.
  • 3. Este web panel muestra los clientes en un combo dinámico y las excursiones gratuitas a ciudades italianas en una grilla. También hemos especificado la propiedad Allow Selection del grid, con el valor True, para que el usuario final, pueda seleccionar una línea del grid: La idea entonces es seleccionar un cliente en el combo, una excursión del grid, y que al presionar el botón Confirm dicha excursión se grabe como una línea del cliente, controlando siempre que solamente se registre una excursión gratuita para ese cliente.
  • 4. Definimos en este objeto una variable &Customer de tipo Customer y una variable &oneTrip de tipo Customer.Trip. Analicemos ahora el código declarado en el evento Enter asociado al botón. En el evento Enter asociado al botón Confirm, lo primero que hacemos es recuperar de la base de datos toda la información del cliente seleccionado en el combo y la misma queda cargada en memoria en la variable &Customer. La variable &oneTrip es del tipo de datos de una línea de la transacción Customer, es decir que corresponde a una excursión del cliente. O sea que esta variable es compuesta de varios miembros que almacenan datos. En particular le estamos asignando al miembro TripId, el identificador de la excursión seleccionada en el grid. En la siguiente línea de código estamos usando un método Add, el cual agrega a la lista de excursiones que ya tiene el cliente, la excursión que se le indica entre paréntesis O sea, la variable &oneTrip que hemos cargado en la línea de código anterior. Hasta ahora hemos trabajado en memoria. Solamente hemos agregado una excursión a un cliente. Para realizar la actualización física en la base de datos declaramos el método Save y el comando Commit, necesarios al trabajar con Business Component.
  • 5. ¿Qué sucede con el control de la cantidad de excursiones gratuitas por cliente? Si bien este control se dispara automáticamente al aplicar el método Save a la variable del Business Component, para que el usuario final se entere, debemos obtener y mostrar explícitamente los mensajes que se emitieron. ¿A qué tipo de mensajes nos referimos? A los propios que emite GeneXus por controles de consistencia de los datos, unicidad de valores de llaves primarias, etc. y a los mensajes asociados a nuestras propias reglas Errror y Msg. ¿Cómo hacemos entonces para recuperar los mensajes que ocurrieron? Utilizamos el Tipo de datos estructurado Messages que automáticamente define GeneXus al crear una nueva KB. La finalidad de este tipo de datos colección, es permitirnos acceder a los mensajes que se emiten en la ejecución de un Business Component. De modo que definimos dos variables: &Messages (del tipo de datos Messages, colección) y &oneMessage (del tipo de datos Messages.Message, que representa un elemento de la colección).
  • 6. Aplicamos el método GetMessages a la variable &Customer y obtenemos la colección de mensajes que ocurrieron… y por último, utilizando la estructura “For elemento in colección”, recorremos cada mensaje de la variable colección de mensajes y desplegamos su descripción.
  • 7. Ejecutamos el web panel WPTrips, elegimos al cliente Parker, seleccionamos la excursión a Roma y presionamos el botón. Vemos que se despliega el mensaje de GeneXus informando que se realizó el registro. ¿Qué sucederá si intentamos asignarle también la excursión a Venecia? Se despliega el mensaje correspondiente a nuestra regla Error, que controla que el cliente solamente tenga asociada una excursión gratuita.