Genexus 2da Ed

of 177/177
  • date post

    21-Jun-2015
  • Category

    Documents

  • view

    700
  • download

    4

Embed Size (px)

Transcript of Genexus 2da Ed

2

GeneXus X Episodio Uno Cecilia Fernndez Daniel Mrquez Lisboa Diseo de tapa: Fiorella Franzini Aporte artstico: Mara Ins Carriquiry

3

Prlogo a la 2da. EdicinTodo el equipo de Artech ha trabajado mucho en la versin X de GeneXus. sta no es, simplemente, una versin ms: representa un gran salto adelante en muchos aspectos y, muy especialmente, en su capacidad de integracin y de extensin, ya sea por Artech o por la propia Comunidad GeneXus. La Comunidad GeneXus ha participado entusiastamente en las pruebas de las versiones CTP y est adoptando la primera versin liberada del producto, utilizndolo y, en muchos casos, construyendo extensiones. En el XIX Encuentro esperamos la exposicin de muchas experiencias importantes. En el ao 2007 hemos encomendado a Daniel Mrquez Lisboa (autor de GeneXus, Desarrollo Basado en el Conocimiento Gua Prctica editado por Magr en el 2006) y a Cecilia Fernndez, con una muy buena experiencia como instructora en nuestros cursos, un libro introductorio sobre la Versin Rocha de GeneXus. Ahora que la versin X es una importante realidad, hemos pedido a Daniel y Cecilia una segunda edicin del libro, actualizando aquella historia, contada sobre la marcha del desarrollo de la versin, a la realidad actual donde la versin X est en plena produccin. Deca entonces: No niego que, en una primera instancia, me sorprendi el tono informal del libro. Luego de leerlo cuidadosamente, veo que el tono informal es un acierto ms de los mltiples que han tenido los autores: dos aos despus ratifico aquellas palabras. Espero una muy buena acogida de esta segunda edicin del libro que, acompasndose con los tiempos y la tecnologa, se puede obtener libremente en www.genexus.com/genexus/libroepisodio1ed2 y, desde ya, felicito a los autores por su trabajo y les deseo el mayor de los xitos.

Ing. Breogn Gonda Presidente de Artech4

Estimado lectorPara el XVII Evento Internacional de Usuarios GeneXus, realizado en setiembre de 2007, nos pidieron escribir un libro de gil y amena lectura sobre la versin de GeneXus que se encontraba en plena gestacin: la entonces denominada versin Rocha, hoy la X, una verdadera refundacin del producto. Desde ese entonces la X ha crecido mejorando funcionalidades e incorporando algunas otras. Por esa razn, sentimos la necesidad de adaptar aquella primera edicin de nuestro libro GeneXus Rocha Episodio Uno para que siga cumpliendo con su objetivo inicial: mostrar GeneXus a quien, nuevo en esta herramienta, tenga inquietud o deseos de descubrirla, as como a quien, conocedor de versiones anteriores, quiera redescubrirla en esta nueva y fundamental etapa que inicia. He aqu entonces la segunda edicin actualizada de aquel libro. Fue elaborada con GeneXus X, upgrade 4. Actualmente, Artech se encuentra trabajando para liberar en unos meses ms GeneXus X Evolution 1, que incluye nuevas e importantes funcionalidades, como el permitir generar, adems de aplicaciones Web, aplicaciones Win. Esperamos que pueda ir siguiendo las pginas de este libro con el mismo entusiasmo que nos llev a escribirlas, y que pueda adaptar la lectura a sus ganas y necesidades. Hay captulos ms tcnicos que otros, en especial el 3 que trata sobre Patterns. No pudimos ceder ante la tentacin de mostrar toda su potencia, lo que nos llev a desnudar cada vez un poquito ms. Quien quiera mucho, lo leer todo, quien no, lo leer ms superficialmente. Tmese esa libertad, que fue la que nos permiti dar rienda suelta a nuestras ganas de contar. Los ltimos captulos probablemente sean los ms giles y disfrutables. Para entender ms cabalmente lo explicado, sugerimos ir realizando con la versin Trial de GeneXus, de distribucin gratuita (www.genexus.com/trial), la aplicacin que nuestros personajes irn desarrollando a lo largo del libro. Si bien podr elegir el generador y DBMS que prefiera, si es usted nuevo en GeneXus, le recomendamos elegir los default que son lo que utilizarn nuestros

5

personajes en el libro. Encontrar en nuestro Download Center, www.gxtechnical.com/genexus/libroepisodio1ed2/zip para ser descargado en forma gratuita, un zip con el contenido final del proyecto desarrollado. Podr crearse otro proyecto (KB) e importarlo. Le servir para comparar lo que va haciendo, con la aplicacin ya implementada. Encontrar repetidamente en este texto citas a un whitepaper de Breogn Gonda y Nicols Jodal, Desarrollo basado en conocimiento. Filosofa y fundamentos tericos de GeneXus, publicado en mayo de 2007. Por ltimo, volvemos a agradecer a todos los compaeros que en oportunidad de la primera edicin estuvieron de un modo u otro aportando a este trabajo. A todos: gracias! Mary, Diego, Mike y Julia, esperan ansiosos entrar en escena Buena lectura!

Los autores. Montevideo, Mayo de 2009.

6

SinopsisCaptulo 1: El encuentro. Diego y Mary se reencuentran luego de aos sin verse, dando inicio a esta historia de encuentroscon GeneXus. Captulo 2: rase una vezun Proyecto. Julia, Mike y Diego definen e inician el anlisis y desarrollo del sistema para una agencia de viajes, a la vez que Diego acompaa a Mary, caf mediante, en su primera experiencia de acercamiento al IDE y a la creacin de los primeros objetos del proyecto. Captulo 3: Hecho a mquina, configurado a mano. Mientras Julia va haciendo uso de lo mximo en capacidad de productividad gracias a los patterns, Diego da rienda suelta a su creatividad poniendo de manifiesto que los deseos de los clientes no siempre deben ser un duro escollo a sortear. Captulo 4: Vuelo al mundo de los Subtipos. A velocidad match 3, Diego ensea a Mary, esta vez en su oficina y no en el bar, por qu los subtipos son la solucin ideal al problema de las ambigedades que se pueden presentar en un modelo de datos, mientras pone el punto final a las ltimas transacciones. Captulo 5: Cuando el qu no alcanza. El inters de Mary pareca ir in crescendo. Encuentros frecuentes en la oficina o en el bar. Preguntas todava sin respuesta. Las transacciones permiten declarar, pero qu pasa con los procesos batch? Procedimientos GeneXus. Despus, ms declaraciones: Business Components. Y cmo realizar reportes pdf? Atracciones que invitan. Invitaciones que atraen. Una cena en ciernes Y las consultas dinmicas por ejemplo? Captulo 6: Ms declaraciones. Data Providers para permitir cargar y devolver una salida estructurada, sin programar, sino declarando intenciones. Diego declara sus intenciones. Debe enviar un xml a la aerolnea. Captulo 7: Soplan nuevos vientos. Su casa (la de ella), vino, msica, su nerviosismo (el de l) y ms GeneXus. Sabemos que todo tiene un final, pero lo que Diego apenas sospechaba, era que esto poda llegar a ser el principio de algo ms.

7

8

Captulo 1

El encuentroAlguien cuenta que esperando por fin ser atendido en un banco, escuch casualmente una conversacin entre un hombre y una mujer, que tambin esperaban. Segn pareca, se reencontraban luego de aos sin verse; antiguos compaeros de estudio? Cmo ests Mary? Cmo van tus cosas? Sigues trabajando donde siempre?dijo el hombre con voz profunda, impostada, mirada fija, aire seductor. Bueno Diego, luego de tantos aos trabajando en la empresa, logr ascender y ahora soy Developer Team Manager desde hace ya dos aos dijo la mujer de rostro sensiblemente cansado. Supongo que debo felicitarte, pero por qu esa cara? tienes problemas en el departamento? He escuchado que los sistemas de ustedes, adems de ser de gran porte, son fiables Lo son, pero no sabes lo que cuesta su mantenimiento. Me estoy enfermando, Diego, no duermo bien; muchas responsabilidades, grandes cargas horarias, poco descanso. Siento en el pecho una presin complet Diego Entiendo, Mary dijo al tiempo que depositaba su mano derecha sobre el brazo izquierdo de ella-. Cmo estn trabajando? Qu herramientas estn usando? Y de todo un poco, lo usual al final todo es lo mismo contest Mary ajena a esa cercana- Tengo un equipo importante de personas trabajando en los desarrollos y mantenimientos, pero an as no damos abasto. Bueno, no todo es lo mismo Qu te parece si terminamos este trmite aqu y vamos a tomar un caf y me sigues contando? pregunt Diego a la vez contento y turbado.

9

GeneXus?Ya en el bar, caf mediante, Diego escuchaba atentamente a una Mary angustiada. Recordaba su antigua firmeza, su empuje. Senta un egosta dejo de alegra de poder ser ahora l quien la ayudara. En cuntos proyectos estn? pregunt Diego para instaurar un clima confesional. Ahora en uno solo. Pero es ms que nada en tareas de mantenimiento. Nuestros clientes nos estn solicitando cosas nuevas todo el tiempo, pero nos est siendo imposible satisfacer nuevos requerimientos. Adems, esta tarea de mantenimiento es realmente costosa, y ya no puedo justificar a la Direccin la incorporacin de ms recursos humanos; nos saldramos del punto de equilibrio. No ser que los sistemas estn un poco anticuados, tecnolgicamente hablando? No les convendra hacer una reingeniera de todo a nuevo? pregunt Diego con liviandad. S, eso quisiera, y eso he propuesto. Pero los tiempos realmente no nos dan, y como te dije, puede que estemos ya pasados de costos. No s qu voy a hacer estoy agotada Diego, me siento en un callejn sin salida. Mary, no desesperes, sabes cuntos estn como t? Tu caso es uno ms entre muchos. Las aplicaciones son cada vez ms complejas, y con las herramientas manuales de las que disponamos, se est tornando imposible desarrollar y peor an, mantener esos sistemas, pues se estn volviendo inmanejables. Pero no todo es negro, Mary. Hoy en da hay soluciones. La alternativa es delegar en procesos automticos el trabajo que hacemos los humanos, de manera que podamos dedicarnos a las nuevas complejidades y no a tareas como la codificacin que pueden ser efectuadas por un programa. Nosotros, sin ir ms lejos, estamos llevando adelante varios proyectos importantes en simultneo, y no tenemos demasiados inconvenientes. Conoces algo de GeneXus? Ah, GeneXus. S, algo he escuchado, pero no he tenido tiempo de interiorizarme demasiado Ustedes trabajan con esa herramienta? He odo10

que cada vez ms gente no tcnica puede usarla, lo que me despierta cierta curiosidad. Mira Mary, no s si GeneXus sea la panacea, pero s s que cura varias de las dolencias que tienen empresas como la tuya. Es un programa que hace programas. Automatiza la construccin y mantenimiento de tus aplicaciones y de tu base de datos. Obviamente est en un nivel de abstraccin superior a otras herramientas, comprendes? Contstame a esta pregunta: si t pudieras disponer de un software que te permitiera lograr hacer esto automticamente, lo usaras? Absolutamente... Se incorpor en su silla. S, justamente se es nuestro problema. Tenemos que hacer casi todo a mano La gran dificultad de la empresa de Mary, pens Diego, era el de tantas otras: imposibilidad de enfrentar nuevos proyectos porque los tiempos de mantenimiento de los sistemas actuales, fundamentados en metodologas tradicionales, lo impedan. Y eso, para una empresa que vive del desarrollo, es una luz roja de peligro. Bueno, no lo diga en voz alta, pero usted, estimado lector, se estar preguntando: Cmo? Cmo? pregunt ya ms vital. No te parece razonable pensar que dado un conjunto de visiones de datos, - se interrumpi Diego con cierta malicia - exista un nico modelo relacional mnimo que lo satisfaga? Hmmm puede ser, no estoy segura. Pero qu tiene esto que ver con mis problemas de mantenimiento? Y si eso es cierto continu Diego, ignorando la vacilacin de su compaera- no te parece posible encontrar un procedimiento de ingeniera inversa que partiendo de ese conjunto de visiones d como resultado el esquema de esa base de datos relacional mnima? Bueno, si me vas a decir ver para creer, con gusto acepto una apuesta, como en los viejos tiempos; pero desde ya te adelanto: vas a perder.

11

Una ApuestaEl objetivo de GeneXus es (a travs de la descripcin de las visiones de los usuarios) conseguir un muy buen tratamiento automtico del conocimiento de los sistemas de negocios.. Breogn Gonda & Nicols Jodal

GeneXus es una herramienta que parte de las visiones de los usuarios; captura su conocimiento y lo sistematiza en una base de conocimiento. A partir de esta ltima, GeneXus es capaz de disear, generar y mantener de manera totalmente automtica la estructura de la base de datos y los programas de la aplicacin, es decir, los programas necesarios para que los usuarios puedan operar con sus visiones.

GeneXus trabaja con conocimiento puro, cuya validez es totalmente independiente de las tecnologas de moda.

Mary, GeneXus almacena en una Knowledge Base todos los elementos necesarios para construir la aplicacin, y luego la utiliza para el desarrollo del sistema, construyendo automticamente el modelo de datos en12

forma normalizada, y tambin utilizando el lenguaje de programacin y base de datos que se le indique. As que te permite obtener un proyecto con el conocimiento de la empresa Ah! Entonces eso S le interrumpi Diego completando la idea-, te permite ganar algo muy importante: la portabilidad futura de la aplicacin. Todo ese conocimiento -reglas de negocio, dilogos, controles, listados- que hoy estn en un lenguaje de programacin determinado, pueden ser convertidos a otros lenguajes sin necesidad de arrancar de cero. O sea que se reutiliza el conocimiento porque la Knowledge Base es conocimiento independiente de la plataforma. Mary parpade rpidamente un par de veces y, sin mediar palabra alguna, pidi otra ronda de caf.

Base de Conocimiento y Modelos Externo y RelacionalNuestros personajes continuaron su conversacin en el caf. A esas alturas, Mary ya se mostraba particularmente interesada en esa herramienta, y Diego en... Bueno, por un lado est el Modelo Relacional, que como bien sabes, est orientado a obtener una buena representacin de los datos en una Base de Datos, obedeciendo a algunas condicionantes muy deseables. Cierto asegur ella . Eliminar las redundancias e introducir un pequeo conjunto de reglas para evitar las mayores fuentes de inconsistencia de los datos Eso mismo, reglas que chequean la unicidad y la integridad referencial y adems tambin proveen de un conjunto de operadores para poder manipular los datos a buen nivel acot Diego, alegre por el clima de complicidad generado. S, claro, por eso todo el mundo las usa. GeneXus no las usa? Bueno, s, ya voy a llegar a eso. Te acuerdas tambin del Modelo Externo, aquel donde se representaban las visiones externas? Bueno, GeneXus

13

pone el nfasis en este modelo, porque es donde realmente est el conocimiento genuino, es el realmente importante para los usuarios y los desarrolladores. En l se recoge el conocimiento exterior y todo lo dems, como otros modelos auxiliares que pudieran ayudar, puede inferirse automticamente a partir de ese Modelo Externo. Ahel Modelo Externono puede contener ningn elemento fsico o interno como archivos, tablas, entidades, relaciones entre entidades, ndices verdad? Exacto! O cualquier otro que se pueda inferir automticamente exclam Diego animado, recuperando el entusiasmo que siempre le provocaron las conversaciones con Mary El Modelo Externo ser utilizado para obtener y almacenar el conocimiento. Pretende la representacin ms directa y objetiva posible de la realidad. Claro, y con eso te independizas de la implementacin, porque tienes una descripcin del sistema en alto nivel, descripcin que slo cambiar si cambian las visiones sobre el mismo; voy bien? Perfecto! Por ello tomamos las visiones de los diferentes usuarios Visiones que son almacenadas en el modelo. Luego se captura todo el conocimiento contenido en ellas y se lo sistematiza para maximizar las capacidades de inferencia Eso es lo que no termino de creer. Me suena a pura teora t intentas decirme que es posible slo describir y que un programa, con slo un par de pases de varita mgica te haga realidad la aplicacin? pregunt Mary intentando ser convencida por los razonamientos apasionados de Diego. Bueno, yo no dira que es magia. Es un software al fin de cuentas. Y no digo que no tengas que programar algo, pero s digo que casi nada, lo

14

menos posible. En GeneXus vas a tener algn cdigo que ser procedural, pero el lenguaje en que lo escribes, no es el lenguaje al que ests acostumbrada en l tampoco tienes que nombrar tablas, ni ndices, ni nada de lo fsico de una base de datos. Pero no entiendo entonces dnde entra el Modelo Relacional pregunt Mary confundida. Es el que se utiliza para representar y manipular los datos: es el modelo interno o fsico, pero no ser creado por ti, ser inferido por GeneXus con su procedimiento de ingeniera inversa. Mi apuesta fue tramposa. Y cmo describes las visiones de los usuarios, el Modelo Externo, de manera que pueda aplicarse ingeniera inversa sobre ellas y obtener todo eso que dices? Porque tiene que ser lo bastante formal y rigurosa esa descripcin como para que no haya ambigedades y que un programa pueda inferir todo eso que los programadores hacemos todava a mano. S, lo es. Las descripciones se realizan a travs de determinados objetos-tipo de GeneXus que indican el qu. A travs de ellos, GeneXus encuentra el cmo. Por lo que, para aprender a usar GeneXus, tienes que aprender a describir, a usar esos objetos-tipo. No necesitas grandes conocimientos tcnicos; cada vez menos. Diego continuaba hablando, llenando el reducido silencio que su interlocutora haba dejado. A pesar de tantos aos sin verse, conoca bien a Mary, conoca esa expresin de ojos pensativos, y saba que su silencio lo invitaba a proseguir. No poda tener mejor suerte - Bendito GeneXus! - pens, y continu en tono confidente, manejando las pausas, seguro de lograr los efectos buscados.

15

Para lograr todo esto, GeneXus tiene una base de conocimiento, que inicialmente tiene asociado un conjunto de mecanismos de inferencia y algunas reglas de aplicacin general, como las que aseguran la consistencia (las de integridad referencial, por ejemplo). Luego, cuando el analista GeneXus comienza a describir la realidad creando objetos, estas descripciones (el Modelo Externo) son sistematizadas automticamente y pasan a estar contenidas en la base de conocimiento Adems, sobre ese conocimiento, obtiene un conjunto de resultados que le ayudan a mejorar la eficiencia de las inferencias posteriores. Es una mquina de inferencias! exclam Mary. Nada ms cierto. Por ejemplo, dada una visin de los datos, puede inferir automticamente el programa necesario para manipularla.

GeneXus trabaja permanentemente sobre la Knowledge Base. Todo el conocimiento de la Knowledge Base es equivalente al contenido del Modelo Externo (subconjunto de ella), ya que consiste en el propio Modelo Externo ms reglas y mecanismos de inferencia independientes de l y un conjunto de otros elementos que son automticamente inferidos a partir del mismo. El desarrollador puede alterar, modificando objetos de la realidad del usuario, el Modelo Externo y las modificaciones se propagarn automticamente a todos los elementos que lo necesiten: otros elementos de la Knowledge Base, Base de Datos y programas de la aplicacin. De la misma manera, el desarrollador no puede alterar directamente ningn elemento que no pertenezca al Modelo Externo TODO el conocimiento est contenido en el Modelo Externo y, por ello, maana podramos soportar la Knowledge Base de una manera totalmente diferente y el conocimiento de nuestros clientes seguira siendo utilizable sin problema alguno. Breogn Gonda & Nicols Jodal

16

Diego, debo irme, pero quiero saber ms. Me has dejado con la cabeza confusa. Es muy grande el cambio de mentalidad, quisiera palpar esto ms de cerca, verlo funcionando. Te parece de encontrarnos la semana prxima, misma hora, mismo lugar? Ciertamente expres Diego en tono pretendidamente sereno.

17

18

Captulo 2

rase una vez un ProyectoTravel Agency & Co. es una novel compaa de venta de tickets de viajes y turismo que ha contratado a la software house ACME Business Software Solutions a fin de que le sea desarrollado un sitio en Internet que permita a sus clientes realizar bsquedas de destinos, de vuelos existentes, de servicios brindados, reservar tickets y obtener pasajes y servicios tursticos (front-end). Incluir tambin todo el sistema para el mantenimiento de la informacin relacionada (back-end). ACME, que viene trabajando con GeneXus en sus sucesivas versiones desde hace un tiempo, est integrada por varios tcnicos; entre todos ellos, Julia, Mike y Diego fueron los seleccionados para llevar adelante este desarrollo. Diego y Mike son Analistas GeneXus y los que normalmente se encargan de la implementacin que les toque en suerte. En particular, Mike se encarga casi siempre de la tarea de testear las aplicaciones, mientras que Diego se encarga del desarrollo. Julia, en cambio, no es tcnica en GeneXus, si bien ha trabajado en muchos proyectos relevando requerimientos; su especialidad es documentar y moderar las charlas entre los integrantes del equipo a medida que se van produciendo los avances. El hecho es que los tres conforman un equipo donde todos tienen voz y voto. Las primeras tareas recaen sobre los hombros de Julia y Diego mientras Mike realiza los testings de las otras aplicaciones de ACME en curso para los desarrollos en otros clientes. Desde siempre, Julia documentaba en procesadores de texto, y en proyectos de envergadura le resultaba extremadamente engorroso el mantener decenas de carpetas con cientos de archivos, conjugarlos entre los desarrolladores, coordinar las discusiones del equipo (cuando lograba hacerlo), entre otras tareas. Usted comprender el impacto que sinti luego de enterarse que GeneXus X contena, en forma embebida, un perfil de documentacin muy particular que facilitara su vida de ahora en ms.

19

El tiempo es tiranoUn breve tiempo atrs, los directores y el equipo de desarrollo se pusieron de acuerdo en el objetivo de un proyecto a corto plazo, tres semanas o algo as. El hecho de que iban a trabajar con GeneXus X, a sabiendas del gran aumento de usabilidad y productividad que sta traa incorporado, les haba permitido reducir a la mitad los plazos que normalmente pactaban con sus clientes.

Es necesario un dramtico aumento de productividad (en el desarrollo de sistemas) pero la productividad de los lenguajes de programacin ha llegado hace ya bastante tiempo a una estabilizacin Cmo lograr, entonces, el aumento de productividad que se necesita? Haciendo desarrollo basado en conocimiento y no en programacin: la solucin es describir en vez de programar!. Breogn Gonda & Nicols Jodal

Afortunadamente, Travel Agency & Co. ya tena su esquema interno de funcionamiento bastante slido, con abundante documentacin y esto ya era una ventaja para el equipo de desarrollo. Julia, Diego y Mike acordaron que deban tener reuniones en forma paralela con los involucrados de cada sector e ir recogiendo sus visiones.

Cada usuario tiene una o mltiples visiones de los datos que utiliza cotidianamente. Entre estas visiones, podemos pensar en un primer tipo: el que agrupa aquellas que se utilizan para manipular los datos (introducirlos, modificarlos, eliminarlos y visualizarlos en forma limitada), a estas visiones de usuarios les hemos llamado Transacciones y constituyen el primer objeto-tipo de GeneXus. Breogn Gonda & Nicols Jodal

Queran rpidamente comenzar a representar la realidad de la empresa; entre otras cosas, detectaron que Travel Agency & Co. apuntaba fundamentalmente al turismo de diversin y esparcimiento con destinos muy

20

variados en el mundo. Qu les deca esto? Antes que nada, que si los destinos eran puntos tursticos de ciudades distribuidas a lo largo y ancho del mundo, deban disponer de un almacenamiento para ello. Es as que el equipo completo se reuni y luego de intercambiar notas e impresiones, concordaron en que Julia comenzara a describir las primeras pautas obtenidas, mientras el resto, en especial Diego, comenzara a representar en GeneXus aquellas visiones de los usuarios ms claramente descriptas.

El IDE a primera vistaAhora intentemos adentrarnos un poco en el ambiente de desarrollo de GeneXus X. Si usted lo desea podr seguir los pasos de Julia para tomar contacto con los elementos que componen este ambiente. As, crear la base de conocimiento del proyecto y el primer objeto de tipo Transaccin. Generalmente conocido por sus siglas (IDE, Integrated Development Environment), en realidad este ambiente de desarrollo supera largamente el verdadero significado de las siglas en su acepcin ms general. Por qu? Porque el concepto ms elemental de IDE es el de un ambiente que ofrece una buena dosis de comodidad, de ventanas en donde seleccionar elementos, de ventanas donde codificar, de cajas de herramientas y de fuentes, y alguna cosa ms. Sin embargo, el IDE de GeneXus X no slo satisface las mnimas especificaciones, sino que pone al alcance del usuario mecanismos de operatividad integral que van ms all. Julia inici la sesin en una computadora con GeneXus X recin instalado, y apareci ante su vista una imagen semejante a la que se ilustra a continuacin.

21

Panels

Inicialmente, podemos notar dos reas contenedoras claramente definidas. A la izquierda, tenemos el contenedor Knowledge Base Navigator; su objetivo es ofrecer distintas vistas. Est compuesto por una zona (ahora en blanco) que contendr, en forma de rbol, los elementos que integren la base de conocimiento en uso, y un grupo de paneles horizontales rotulados con descripciones inherentes a otras vistas. La ventana de la derecha, que podramos considerar la principal (la mayor parte de nuestra actividad se realizar en ella y as la llamaremos de ahora en adelante), es en principio otro contenedor de mltiples funciones. Note que en su esquina superior izquierda se encuentra un tab (o solapa) rotulado Start Page. Es el primer contenedor abierto dentro de la ventana principal. A medida que usted vaya trabajando, la presencia de nuevos tabs indicar la disposicin de nuevos espacios conteniendo elementos del proyecto tales como listados de navegacin, diagramas, estructuras de transacciones, etc. Ahora veamos el contenido del nico tab que tenemos. Observe que incluye otros contenedores con informacin. Por ejemplo, Recent Knowledge Bases nos

22

ofrece los nombres de las ltimas bases de conocimiento que han sido abiertas, con sus fechas de ltima modificacin; note que tambin estn presentes links que permiten abrir o crear una nueva base de conocimiento. Debajo, un contenedor Extensions presenta herramientas desarrolladas por Artech o terceros, que pueden ser instaladas y utilizadas libremente, y permiten extender en todas direcciones la potencia de la herramienta. El sector rotulado GeneXus Community, contiene sindicaciones de contenidos de sitios Web vinculados a la Comunidad que se actualizan con frecuencia (RSS). Note que debajo de cada noticia aparece More como link al documento propuesto. A su vez observe la celda Address que le permitir navegar por la Web o por su sistema de archivos sin salir del IDE.

Proyecto nuevo, Base de Conocimiento nuevaLa primera tarea cuando se comienza a desarrollar una aplicacin con GeneXus es crear la base de conocimiento. En el siguiente encuentro que mantuvieron en el caf, Mary, con ojos an graves, pregunt: Me contaste que GeneXus automatiza la creacin de base de datos y programas, pero cmo sabe en qu ambiente, en qu lenguaje debe codificar esos programas? Por ejemplo, si tuvieras que desarrollar una aplicacin en Java y suponte, otra, o la misma, en .Net, o en Bueno, cuando te creas la Knowledge Base (le solemos llamar KB, para abreviar) le puedes decir que quieres generar el proyecto en un ambiente Java. Como ya te coment, la KB es independiente de la plataforma de ejecucin: si t generaste la aplicacin Java, ms adelante, con el mismo conocimiento, puedes generarla para .Net, y no tienes que volver a describir los objetos de la realidad que ya habas descrito. Simplemente tienes que indicarle que ahora necesitas asociarle otro ambiente. Cuando le asocias un ambiente, tiene por ah un lugar donde especificar todo lo referido al mismo. Por ejemplo,

23

en Java tendrs que indicar cosas tales como dnde estarn las clases en la webapp, algo que en .Net no tiene sentido. Es decir, en base al ambiente que hayas elegido, te muestra propiedades necesarias para configurarlo, para que GeneXus pueda luego decirte: sus deseos son rdenes y te implemente la aplicacin como se lo pediste. Casualmente, mientras Diego y Mary intercambiaban palabras y miradas en el caf, Julia realizaba esos mismos pasos que lo invitamos a seguir a usted tambin. 1. Seleccione File/New/Knowledge Base (o el link New Knowledge Base de la Start Page). A continuacin ver en la pantalla el siguiente dilogo:

TravelAgency

Observe cmo desde aqu se asocia un ambiente de implementacin al proyecto. Dejamos la opcin por defecto, C# Environment. Tambin observe que por defecto se asocia el lenguaje English para la aplicacin a ser generada. Todos los mensajes, botones, etc., estarn por defecto en ingls. Pero luego ser posible generar la misma aplicacin en otro idioma, tanto en forma esttica como dinmica (el usuario, en tiempo de ejecucin, elige el idioma en que desea utilizar la aplicacin) a un costo mnimo.

24

Observe adems que la KB ser almacenada en una base de datos que por defecto recibir el nombre GX_KB_nombre en la instalacin del SQLServer local que usted tenga. Si no tiene una local, podr utilizar una de la red. Presionando el botn [Advanced] podr modificar estos valores. 2. Pulse [Create]. GeneXus crear una base de conocimiento vaca, y usted debera ver una imagen semejante a la que se observa a continuacin.

Observe que han cambiado algunos contenidos. En el panel Folder View ha aparecido un rbol cuya raz es la propia base de conocimiento (con el nombre que usted le ha dado) y sus ramas los distintos elementos que la componen: Domains, Objects, Tables, Customization, Documentation, etc. Tambin note que se ha agregado un nuevo sector dentro de la Start Page rotulado Knowledge Navigator conteniendo atajos a las tareas ms comunes que probablemente usted querr ejecutar luego de haber creado o abierto una base de conocimiento.25

Sobre esta base de conocimiento trabajarn los dems integrantes del equipo; Julia est ahora lista para comenzar a documentar.

Documentando desde dentroDocumentos, notas, listas de tareas, son slo ejemplos de la documentacin que rodea a cualquier proceso de desarrollo de software. La documentacin es una parte importante de cualquier aplicacin si se encuentra actualizada y es fcilmente accesible. Esta es la razn por la cul GeneXus contiene funcionalidades de documentacin integradas a la KB. Documentos, archivos, diagramas, objetos pueden estar todos interrelacionados mediante links, fcilmente accesibles por cualquier miembro del equipo. Por tal razn decimos que la documentacin es activa e integrada, constituyendo un verdadero wiki.

Files Julia haba recibido por e-mail varios archivos de documento de los jefes de seccin de cada departamento con requerimientos para el sistema, donde listaban las prioridades y caractersticas de sus sectores, algunos flujos de procesos, etc.

26

Como estos documentos ya estaban hechos por terceros, decidi que sera importante incorporarlos en su estado original dentro de la base de conocimiento, de forma tal que siempre estuvieran disponibles para su consulta. Eran importantes las palabras de los usuarios expuestas por ellos mismos. As, expandi el nodo Documentation del rbol y seleccion Files abrindolo con doble clic. Como resultado, un nuevo tab apareci dentro de la ventana principal, rotulado Files. All presion Add New File y se le abri una ventana que le permiti explorar su sistema de archivos, y elegir cada archivo a ser insertado en la KB. As qued el tab Files luego de esto.

Images Tambin le haban enviado por e-mail el logo de la empresa, por lo que accedi al nodo Customization del rbol del Folder View, abri haciendo doble clic sobre Images el tab correspondiente e import, almacenndolo en la KB, el archivo Logo.bmp que sera utilizado en el encabezado de las pginas de la aplicacin. En ese mismo e-mail recibi decenas de archivos con imgenes sobre atracciones tursticas que luego necesitaran almacenar en la base de datos, por lo que momentneamente las guard tambin aqu, para tenerlas centralizadas en la KB.

27

Main Document Ahora Julia se apresta a empezar a escribir la pgina principal del wiki de la KB: observe que bajo el nodo Documentation del rbol aparece un objeto Main Document. Cada equipo de desarrollo tiene metodologas diferentes respecto a la documentacin. En ACME utilizan esta pgina principal para describir las generalidades del sistema bajo desarrollo, y para acceder desde aqu a los distintos elementos de documentacin. Tambin podra elaborarse aqu mismo el Plan Director del proyecto, en vez de insertarlo como archivo. Pero usted y su equipo de desarrollo utilizar esta pgina como mejor le parezca. Julia abre Main Document y un nuevo tab aparece en la ventana principal, rotulado Document:Main. Dado que lo que desea es comenzar a escribir, pulsa el selector Edit que se encuentra al pie de la ventana y redacta (dndole formato) lo que se observa en la siguiente imagen. Luego pulsa el selector Preview y tiene la vista normalizada de lo que escribi. Guarda los cambios (Preview se transforma en Browse).

Note que le ha dado algn formato al texto. Para ello se vali de la toolbar formatting:

28

Julia ha cambiado el tipo de letra, su tamao, e incluso puso en negrita el tpico sobre el cual se comenta. Pero adems, y bien importante para lograr una documentacin integrada, Julia necesitaba agregar links hacia los documentos recibidos e insertados en la KB instantes antes. Para ello se vali de la toolbox1, seleccion Table de la misma, arrastrndola a la pgina y luego de insertada la tabla, en cada fila escribi:

Queriendo tener una vista previa, presion el selector Preview y, satisfecha, grab, luego de lo cual se le mostr lo que aparece en la siguiente figura:

El IDE de GeneXus ofrece varios paneles con utilidades que se pueden acoplar en cualquier parte de la ventana y tambin se pueden ocultar automticamente cuando pierden el foco para que no ocupen sitio en la ventana principal. Usted puede activarlas mediante View/Other Tool Windows.

1

29

Observe que como consecuencia de los smbolos que emple en la segunda columna de la tabla, los documentos se encuentran subrayados: son links a los archivos almacenados. Esto aporta un gran dinamismo a la documentacin, y la integra en forma activa en el proyecto a travs de la KB. El editor de documentacin de GeneXus utiliza dos parntesis rectos de apertura ([[) y dos de cierre (]]) en el texto para crear links. Si usted est siguiendo el ejemplo en forma prctica, habr notado que, apenas pulsado el segundo parntesis de apertura, el editor le propuso una lista de objetos vlidos para seleccionar, tal como mostramos en esta imagen:

30

Julia seleccion File y al digitar . se abri la lista de los archivos disponibles (tambin podra haber arrastrado desde la toolbox el objeto File y habra obtenido igual resultado que al escribir [[File.).

Entonces seleccion el deseado en cada momento, puls y el texto qued rematado con los dos parntesis finales.

Creando la primera Transaccin: AttractionDiego piensa, mientras conversa con Mary (la mirada perdida en el caf humeante), que ya debe dar inicio al volcado de las primeras visiones obtenidas a travs de los usuarios que entrevist en el Departamento de Informaciones Tursticas de Travel Agency & Co. Este departamento tiene a cargo la bsqueda de informacin que permite agregar o suprimir los destinos e itinerarios que ofrece la empresa a sus clientes. Piensa que ni bien vuelva al trabajo, deber crear la transaccin Attraction, cuando Mary interrumpe su interno discurrir: Sabes Diego? No comprendo muy bien cmo puedes describir rigurosamente las visiones de los usuarios como para que no haya ambigedades y se pueda inferir todo automticamente. Bueno. Recuerdas que te coment que estamos trabajando en un proyecto nuevo? Bien, pues me he estado reuniendo con los usuarios quienes me contaron que manejan atracciones tursticas de cada pas y ciudad, para poder ofrecer a los viajeros. Manejan el nombre de la atraccin, como podra ser Centenario Stadium o Roman Colisseum o Disney World; manejan el nombre de pas y ciudad al que pertenece la atraccin, una imagen de la misma. Tambin me contaron que las atracciones estn categorizadas. Por ejemplo,31

Centenario Stadium pertenece a la categora Great Monuments o algo as, y Disney World a Entertainment. Estas son sus visiones de los datos Aj. Y cmo describes esas visiones objetivamente? Mediante atributos y objetos de tipo Transaccin. Djame explicarte un poco. Los atributos son el marco de referencia sobre el cul hacer las dems descripciones. No es exactamente lo mismo que un atributo en un modelo relacional. El atributo es el elemento semntico fundamental. El significado del mismo vendr dado por su nombre, por lo que los nombres de los atributos pasan a ser esenciales en GeneXus. Diego tom una servilleta de papel de la mesa del bar y garabate algunos nombres: AttractionName, CountryName, CityName, AttractionImage, AttractionCategoryDescription. Y prosigui: Estos atributos tienen un contenido semntico claro, que cualquier persona podr entender sin necesidad de contexto alguno. No son slo Name o Description. Existe una fuerte relacin entre el nombre del atributo y su significado. Ese nombre, a su vez, es una secuencia de caracteres, algo sintctico, nico, con lo que cualquier programa puede trabajar, sin ambigedad. Si yo coloco AttractionCategoryDescription en algn lado, t y yo sabemos que estamos hablando de la descripcin de la categora de la atraccin. GeneXus lo reconoce, por su sintaxis. Aj, entonces interrumpi Mary claramente no puedes usar el mismo nombre de atributo cuando quieras referirte a otro dato, pues ah s habra confusin y ambigedad. Exacto. Un atributo deber tener el mismo nombre en todos los lugares donde aparezca y no podr haber dos atributos diferentes, con significado diferente, que compartan el mismo nombre. En eso se basa. Hay una excepcin, pero no te quiero confundir ahora. Estas visiones que me expresaron los usuarios, corresponden a aquellas que se utilizan para manipular los datos (ingresarlos, modificarlos, eliminarlos, visualizarlos), y son las que se representan en GeneXus mediante el objeto de tipo Transaccin. Cada transaccin tiene un conjunto de elementos: una estructura, reglas, frmulas,

32

elementos de presentacin. Es decir, en un mismo objeto, se matan varios pjaros de un tiro: al tiempo que dices con qu informacin se va a trabajar, tambin diseas la pantalla que se desplegar al usuario final para hacerlo, declaras el comportamiento que debern tener esos datos cuando se vayan ingresando, y dems. Diego volvi a tomar la servilleta que haba dejado sobre la mesa, y esta vez escribi (y luego dijo): -

Los datos se presentan de acuerdo a una estructura que debe recogerse con todo rigor. Esta sera la estructura de la transaccin Attraction. El asterisco que sigue a AttractionId significa que para cada atraccin, existe un nico AttractionId, es decir, es lo que le da unicidad a la atraccin: un identificador. Toda informacin debe poder identificarse. Una atraccin debe identificarse mediante algn o algunos de sus atributos. Espera, Diego. Me surgen algunas dudas en definitiva me ests hablando del concepto de clave primaria de una tabla en un modelo relacional? Esos atributos que listas no sern las columnas de una tabla fsica que almacenar esa informacin? En definitiva, con la transaccin, no ests diseando una tabla?

33

S, indirectamente. Y no: yo no me preocup de disear una tabla fsica del modelo relacional. Solamente me limit a especificar los atributos con los que el usuario final interactuar al ingresar atracciones al sistema. Especifiqu una vista de usuario, no una tabla. Aqu entra lo de la ingeniera inversa y el Modelo Relacional inferido por GeneXus. Si no hubiesen ms transacciones que sta en la base de conocimiento, entonces GeneXus inferira una tabla fsica compuesta exactamente por los atributos listados. Pero la cosa cambia si existen otras transacciones compartiendo algunos de los atributos mencionados. All habr que normalizar. Pero no me quiero apurar, espera un poco que ya te contar de esa parte. Creo que te voy entendiendo, Diego. Pero me llama la atencin que pusiste en la estructura de la transaccin atributos que no dijiste que hubieran mencionado los usuarios. Todos los que terminan con Id Por otro lado, por qu no utilizaste el nombre de la atraccin como identificador? Y si el nombre de la atraccin pudiera repetirse para atracciones de distintos pases y ciudades? Suponte: Disney World que existe en Pars, Miami, Las Vegas, Orlando. En este caso, necesitamos un atributo que d unicidad al conjunto de elementos de informacin que constituyen una atraccin. Toda estructura de transaccin debe tener un atributo o atributos que identifiquen a cada instancia. En principio, en esta transaccin, coincidir exactamente con la clave primaria de la tabla inferida. Pero no siempre ser as, como vers cuando te muestre un ejemplo de transaccin con niveles. No te preocupes ahora. En nuestro caso, podremos decirle a GeneXus que AttractionId ser numrico y que queremos que se numere automticamente. Y qu me dices de los atributos AttractionCategoryId, CountryId, CityId? Ms identificadores? S, sern identificadores en otras transacciones. Me explico: evidentemente los pases y ciudades, as como las categoras de atracciones, corresponden en s mismas a entidades independientes de la atraccin turstica. Por ejemplo, no hemos entrado a ver eso an con este cliente, pero evidentemente los vuelos areos tambin tendrn pas y ciudad (de origen y de

34

destino). Es decir, resulta evidente que deberemos crear una transaccin para representar e ingresar la informacin de pases y sus ciudades, as como de las categoras de atracciones existentes. Esos identificadores de los que me preguntabas, sern, casualmente, los que identifiquen cada dato (instancia) de estos. A ver si entiendo: una vez que definas esas otras transacciones, GeneXus inferir tablas para almacenar los datos que manipulan, y a partir de all, se dar cuenta que esos atributos que colocaste en la estructura de la transaccin Attraction, (AttractionCategoryId, CountryId y CityId) son los que se traduciran en claves forneas en la tabla relacional asociada. Sigues siendo la misma luz de siempre, Mary! exclam Diego con ojos iluminados. Pero entonces, qu hacen en esa estructura CountryName, CityName, AttractionCategoryDescription? En un modelo relacional normalizado nunca podran estar en esa tabla. Es que no lo estarn. Por eso te deca que la estructura de una transaccin no se corresponde exactamente con la de la tabla fsica asociada. Ya te lo explicar, no quiero abrumarte con detalles. Traer mi notebook al prximo encuentro porque lo habr, no? inquiri Diego vacilante, y prosigui sin esperar respuesta, y te mostrar Ahora el lector ver los pasos que sigui Diego en la creacin de la transaccin mediante el IDE de GeneXus al da siguiente en su trabajo. Primero que nada, seleccion el link New Object de la Start Page y apareci a su vista la ventana cuyo dilogo permite la creacin de un objeto dentro de la KB. De la caja Select a Type, con la lista de objetos GeneXus disponibles, seleccion Transaction y luego, en la celda Name escribi el nombre Attraction, quedando una imagen semejante a la que se muestra a continuacin.

35

A continuacin, puls [Create], tras lo cual la transaccin se abri. Obsrvese en la imagen siguiente que aparece un nuevo tab en la ventana principal con el nombre de la transaccin. Qu se est editando? Una parte de la transaccin: su estructura.

Los objetos que se abren en la ventana principal del IDE aparecen como tabs, donde uno solo, el activo, se presenta en la ventana central. El objeto abierto puede tener varios elementos o partes, en cuyo caso ser uno el activo en cada oportunidad. En el tope inferior de la ventana aparece una barra de acceso que permite, mediante Selectores, seleccionar otra de las partes del objeto activo.

La ventana de edicin de la estructura contiene una serie de columnas que el desarrollador utiliza para crear un atributo; es decir, darle un nombre, un tipo de dato, una descripcin, etc.

36

Selectors

Corresponde en GeneXus, a la estructura dibujada por Diego en una servilleta de papel. Diego asign nombres a los atributos utilizando lo que se conoce como nomenclatura GIK (GeneXus Incremental Knowledge), un estndar creado por Artech y adoptado por la Comunidad, cuyo fin es dotar a un atributo de un nombre nico que transmita lo ms claramente posible su concepto, su semntica. Usted habr deducido correctamente que la columna Type pretende dotar al atributo con alguno de los tipos de datos soportados por GeneXus.

37

El tipo de datos Blob posibilita el almacenar una gran diversidad de tipos de informacin (videos, planillas, documentos de todo tipo, archivos de msica, imgenes digitalizadas, etc.) en la propia base de datos. La idea del atributo AttractionImage es justamente almacenar una imagen de la atraccin, que podr ser un archivo bmp, jpg, etc. La columna Description pretende que se asigne una descripcin ampliada del atributo. Por ahora dejaremos las sugerencias de GeneXus a partir del nombre del atributo. Para continuar agregando atributos, simplemente pulse luego de terminada una definicin y repita el mecanismo. Atributos Clave. Como puede usted apreciar, el atributo clave que Diego indicaba con un asterisco en la servilleta, se indica en GeneXus por el cono de una llave. Cuando Diego estaba asignando el tipo de datos en la columna Type para el atributo AttractionName, consider oportuno crear un dominio Name para todos los atributos que fueran nombres de algo, as como uno Id para todos los que tuvieran la caracterstica de ser identificadores numricos. Usted estar ya acostumbrado a trabajar con Dominios. Si no es as, lea el siguiente prrafo que le aclarar la cuestin. Dominios? Es comn en las aplicaciones tener atributos que comparten las mismas definiciones de tipo de dato, tamao y algunas otras caractersticas. Por ejemplo, en la transaccin Attraction hay varios atributos que son Id (AttractionId, AttractionCategoryId, CityId, y CountryId). Diego ha creado un dominio al que llam Id, con todas las caractersticas propias de los identificadores y se lo aplicar a todos aquellos atributos que tengan la funcionalidad de representar un valor inexistente en la realidad pero necesario para lograr la unicidad.

38

Cada dominio es un conjunto de caractersticas nicas que pueden ser compartidas por varios atributos. Esto proporciona consistencia y facilita el mantenimiento, ya que cambiando alguna de las caractersticas de un dominio se provocar la propagacin del cambio a todos los atributos basados en l.

Definicin de Dominios Diego hizo doble clic sobre el nodo Domains en el rbol del Folder View tras lo cual se abri en la ventana principal el tab que muestra y permite editar dominios. Ingres as los dominios Id y Name. El mecanismo es semejante al de crear atributos en una transaccin.

Existen algunos dominios que son creados automticamente por GeneXus cuando se crea la KB. Teniendo los primeros dominios definidos, Diego volvi a la transaccin, sustituy por estos dominios y en ese momento se percat de que le faltaba definir un dominio Description para AttractionCategoryDescription. En vez de volver a la ventana Domains, se posicion en la columna Type del atributo y escribi Description=Character(20)2. Al abandonar el campo, ese dominio se crea automticamente. Luego grab y pudo ver:

2 En general en GeneXus existen varios caminos que le permiten realizar lo mismo, para que el efectuar su tarea le resulte siempre cmodo.

39

Observe que el asterisco que segua al nombre de la transaccin en el tab desapareci (el asterisco indica que los cambios que se han realizado an no se han grabado) y que el selector Structure cambi de color. Atributo Descriptor. Ahora tambin apareci un cono con la imagen de una lupa, precediendo al atributo AttractionName. Es una forma de indicar que si uno tuviera que quedarse con uno solo de todos los atributos, de forma tal que sea el que mejor describa a la entidad, se ser el elegido (el de mayor carga semntica). Ahora no nos preocuparemos de esto, servir a herramientas que automaticen. La Tabla ATTRACTION Por defecto, cuando GeneXus disea las tablas les asigna como nombre el mismo que el de la transaccin en la que estn basadas3. En todo momento puede verse el diseo de la tabla (su estructura, ndices, etc.) abriendo el nodo Tables del rbol que se encuentra en el panel Folder View y haciendo doble clic sobre el nombre de la tabla. Para ATTRACTION se ver:

3 En lo que sigue en este material, para diferenciar los nombres de las tablas de los de las transacciones usted ver a las tablas escritas en maysculas.

40

Dada la estructura de la transaccin, GeneXus disear tambin un form para la misma, que ser la pantalla a travs de la cul el usuario ingresar atracciones cuando la transaccin sea convertida en programa ejecutable. Puede verse escogiendo el selector WebForm4 de la barra de acceso:

4 Con GeneXus X usted podr generar exclusivamente aplicaciones Web 2.0. Para generar una aplicacin Win, podr utilizar GeneXus X Evolution 1. All la transaccin presentar tambin un WinForm.

41

Este form podr ser personalizado, moviendo de lugar, insertando, modificando, eliminando controles, cambiando su aspecto, etc. Conforme con el resultado, Diego record que no haba documentado nada sobre la transaccin. Es norma de los integrantes de ACME el ir documentando a medida que se producen los avances, sobre todo en lo que respecta a las entidades, tal como la transaccin Attraction. As que abri Main Document, insert una nueva tabla, esta vez titulada Objects y agreg en la primera fila un link hacia la transaccin recin creada (del mismo modo en que lo hizo Julia varias pginas atrs, al incluir los links a los documentos), junto con una breve descripcin.

42

Podemos ver Attraction como link. Qu suceder cuando Diego haga clic sobre el mismo? Se abrir un nuevo tab de documentacin, esta vez de la transaccin, donde podr editarla, e incluso abrir la propia transaccin:

Supngase que necesita abrir la transaccin para mirar su estructura antes de documentar. Pues siguiendo el link Open Transaction: Attraction, podr43

hacerlo, y luego para efectivamente ir a la ventana de edicin de la documentacin, podr directamente elegir el selector Documentation. Como podr constatar usted mismo, estimado lector, en GeneXus tambin se aplica aquello de que varios caminos conducen a Roma.

Creando la segunda Transaccin: Country Luego Diego se aboc a crear la transaccin que contendra la informacin inherente a los pases y ciudades. Tena dibujada la estructura en la servilleta de papel que guard en su bolsillo cuando se despidi de Mary en el encuentro anterior:

44

Con Main Document abierto en edicin, agreg un nuevo link en la tabla, ahora a la transaccin Country. Pero todava no la haba creado! Observe que aparece un link, s, pero sobre un smbolo ?:

45

Cuando Diego haga clic sobre ? automticamente se crear la transaccin que aparecer abierta en la estructura, lista para que l comience a ingresar los atributos, y el link quedar ahora definido en Main Document. (Sin nimo de ser reiterativos: cmo era aquello de los caminos a Roma?).

Country: una Transaccin de dos nivelesComo todos sabemos, los pases contienen ciudades, es decir, la realidad dictamina que se tienen n cantidad de ciudades por pas. GeneXus dispone de una forma muy sencilla y prctica de representar esta realidad, y lo hace a travs de transacciones de dos niveles. La transaccin Country consta entonces de dos niveles: el primer nivel, tambin conocido como prlogo o simplemente cabezal, queda de hecho implcito, por lo que no es necesario identificarlo. En este caso, los atributos del prlogo implican que habr una sola instancia para cada pas. Sin embargo, como existen varias ciudades para un mismo pas, se recurre a una representacin (en el papel: se recurre a un juego de llaves antecedidas de un nombre para el nivel) que determina un grupo de atributos que son repetitivos para el prlogo: se lo conoce como cuerpo o segundo nivel. Ahora, note usted que ambos niveles (cabezal y cuerpo) tienen identificadores propios: el atributo CountryId es el identificador del primer nivel, y el atributo CityId es el identificador del segundo nivel, lo que significa que para un pas dado (CountryId) no puede repetirse la misma ciudad (CityId). A partir de esta estructura, GeneXus determina que debe crear dos tablas: la tabla COUNTRY y la tabla COUNTRYCITY. En la primera, la clave primaria es CountryId, mientras en que la segunda, la clave primaria est compuesta por CountryId y CityId. La siguiente imagen muestra cmo qued la estructura luego de que Diego la ingresara5.Obsrvese que aparecen nuevos dominios. Es de suponer que Diego los cre, o bien antes o bien en el mismo momento de ingresar estos atributos, por ejemplo, al ingresar CountryFullName, en la columna Type pudo haber digitado: LongName = Character(50) con el mismo resultado. Suponiendo que Diego ya tuviera definido un dominio Details como VarChar(500,200),5

46

Como CountryId y CityId ya existen en la KB (recuerde que fueron creados al grabar la transaccin Attraction) al comenzar a digitar las primeras letras de cada uno, GeneXus le abrir una lista conteniendo los atributos de la KB que empiezan igual, de modo tal que usted pueda seleccionar el que corresponda y evitar seguir digitando el nombre completo. dem con CityId y CityName.Para insertar un segundo nivel en una transaccin, sitese en el atributo anterior y pulse (en este caso, sitese sobre el atributo CountryFlag). Luego prosiga con el resto de los atributos segn el mecanismo natural. Tambin lo logra haciendo botn derecho sobre el atributo, donde se le desplegar un men contextual para, por ejemplo, insertar un nuevo nivel, mover el atributo de lugar, etc.

Normalizacin de la Base de DatosAl definir la transaccin Country se produjeron algunos cambios importantes. En particular, la tabla ATTRACTION ha variado en su composicin por la sencilla razn de que GeneXus la ha normalizado en virtud de las nuevas dependencias funcionales que se introducen. Vea las composiciones de las tablas ahora.tambin es interesante destacar que cuando inserte el atributo CountryDetails, GeneXus ya inferir como su tipo de datos, el dominio Details (ya que lo contiene como ltima parte de su nombre).

47

Recuerde que una dependencia funcional X Y es una restriccin entre dos conjuntos de atributos de la base de datos, que establece que si para 2 registros coinciden los valores de X, entonces tambin tienen que coincidir los valores de Y. Esto significa que los valores de los atributos en Y en cualquier registro, dependen de los valores de los atributos en X, o estn determinados por ellos.

Percibe los cambios? Al crear la transaccin Country, y al designar a los atributos CountryId y CityId como identificadores de sus respectivos niveles, se est diciendo que: 1. Todo pas se identificar (de manera nica) por el valor de CountryId y que este valor tendr asociado (determinar) un CountryName (y slo uno), CountryFullName, etc. (establece esas dependencias funcionales). En un Modelo Relacional normalizado, esto deriva en una tabla fsica con clave primaria CountryId para almacenar esta informacin respetando esta unicidad establecida.

48

2. Toda ciudad se identificar para un pas dado (CountryId), por el valor de CityId, y que por tanto, este par (CountryId, CityId) determinar un CityName y CityInformation. De esto se desprende que deber existir una tabla fsica con clave primaria {CountryId, CityId} para almacenar la informacin de cada ciudad6. Pero entonces: qu hace GeneXus con los atributos de igual nombre en diferentes transacciones? Teniendo presentes los dos enunciados mandatarios en la filosofa GeneXus: Conceptos iguales deben tener el mismo nombre de atributo, y Conceptos diferentes no deben tener el mismo nombre de atributo. encontrar atributos de igual nombre en distintas transacciones slo puede querer decir una cosa: son lo mismo!. Entonces qu puede hacer GeneXus para mantener la base de datos inferida normalizada? Transformar en la tabla ATTRACTION los atributos CountryId y CityId en claves forneas, y quitar, por tanto, a los atributos CountryName y CityName de dicha tabla (pasan a poder inferirse a travs de los anteriores; si se dejaran se tendra informacin redundante)

Atributos: almacenados e inferidos Aqu viene a cuenta la pregunta que Mary le hiciera a Diego sobre la confusa presencia de los atributos CountryName y CityName referenciados en la estructura de la transaccin Attraction, dado que no van a estar presentes en la tabla fsica asociada para qu Diego los coloc en Attraction entonces? Si el lector revisa unas pginas atrs (pgina 34) y observa el form de la transaccin, podr constatar que aparecen esos atributos. Para qu? La transaccin se va a convertir en un programa ejecutndose. El usuario final va a acceder a la transaccin mediante su Browser, y a travs de una6

Observe que GeneXus nombra la tabla concatenando el nombre de la transaccin al nombre del nivel: COUNTRYCITY

49

pantalla cuyo diseo ser el del WebForm, podr, por ejemplo, ingresar una nueva atraccin (nuevo registro en la tabla ATTRACTION subyacente). Sera deseable que cuando el usuario final colocara un identificador de pas en el campo correspondiente a CountryId, y uno de ciudad en CityId pudiera visualizar automticamente el nombre de dicho pas, CountryName y de dicha ciudad, CityName. Es decir, que CountryName y CityName sean trados en ejecucin de las tablas COUNTRY y COUNTRYCITY a travs de la clave fornea {CountryId, CityId}. Para poder colocar en el form atributos a los que se llega a travs de claves forneas, es necesario que estn presentes, inferidos, en la estructura. Qu sucedera si el usuario digitara para CountryId, CityId un par de valores inexistentes? Y si mediante la transaccin Country se quisiera eliminar una ciudad para la que existieran atracciones? Si se nos permitieran hacer estas operaciones, se estara violando una de las condiciones ms importantes de los modelos relacionales para mantener la consistencia de los datos: la integridad referencial. De hecho GeneXus agregar automticamente en las transacciones el cdigo necesario para realizar estos controles sin que el desarrollador se moleste en hacerlo.

Integridad ReferencialDiego comunic a Julia que ya haba definido las dos primeras transacciones. A los efectos de comprobar que el modelo reflejara la realidad, ella hizo un Diagrama de Bachman (diagrama de relaciones entre tablas) sobre las tablas inferidas por GeneXus a partir de las transacciones. Para ello expandi el nodo Tables del contenedor Folder View, luego, posicionada sobre cualquier tabla, puls el botn derecho para abrir el men contextual y escogi New/Object, tras lo cual se abri la ventana Create New Object donde seleccion el objeto Diagram para finalmente pulsar [Create]. Seleccion las tres tablas simultneamente y las arrastr hacia la hoja en blanco, obteniendo el siguiente resultado.

50

En este tipo de diagrama, la punta simple de la flecha representa la existencia de una instancia de la tabla apuntada para cada instancia de la otra; es decir: para cada ciudad existe slo un pas; para cada atraccin turstica existe una sola ciudad. Recprocamente, la punta doble representa la ocurrencia de varias instancias de la tabla apuntada para cada instancia de la otra, es decir: para cada pas existen muchas ciudades relacionadas; para cada ciudad muchas atracciones. Esto permite determinar las relaciones entre ellas. Por ejemplo, la relacin entre COUNTRY y COUNTRYCITY es de 1 a N (1 a muchos) y viceversa es N a 1 (muchos a 1). La de COUNTRYCITY con ATTRACTION tambin es 1 a N. Para asegurar la integridad referencial, deber entonces controlarse que cuando se inserte o modifique un registro en la tabla ATTRACTION, exista el registro relacionado en la tabla COUNTRYCITY. Y cuando se elimine un registro de la tabla COUNTRYCITY, no existan registros en la tabla ATTRACTION relacionados. GeneXus resuelve esto automticamente, agregando esta lgica a las transacciones Attraction y Country, en forma transparente para el desarrollador. Anlogas consideraciones pueden hacerse

51

respecto a los controles sobre las tablas relacionadas COUNTRY y COUNTRYCITY.

Concepto de Tabla Base y Tabla ExtendidaMientras Julia comprobaba que estuviera todo bien, al recuerdo de Diego vinieron fragmentos de la ltima conversacin en el bar: Mira, Mary, por una cuestin prctica, le llamamos tabla base, en el contexto que sea, a la tabla en la que ests parada en un momento dado, la que sea foco de tu atencin en ese momento, en el que ests queriendo hacer algo con sus registros. As es que en la transaccin Attraction, decimos que su tabla base es la del mismo nombre, porque siempre que trabajes con la transaccin, vas a trabajar con un registro de esa tabla, ya sea para insertarlo, modificarlo, o eliminarlo. Y luego vas a seguir por otro, y por otro y por otro. Pero adems, cuando ests trabajando con un registro individual de una tabla base, podras acceder tambin a la informacin que est unvocamente relacionada con l, de otras tablas. Aj, siguiendo las relaciones N a 1, desde el registro de la dijiste tabla base? en la que estemos parados, hasta llegar al registro que tiene la informacin que queremos. S, no hay nada nuevo en eso. Es verdad. Solo la terminologa: le llamaremos tabla extendida de una tabla base dada, al conjunto de las tablas a las que se llega partiendo de la tabla base, a travs de relaciones N a 1. A ver si entiendo Si no fuera por la necesidad de tener la informacin desperdigada en varias tablas para evitar redundancias, la tendras toda en una misma tabla fsica. En el caso de las atracciones, tendras una sola gran tabla con todos los atributos de ATTRACTION, ms los atributos de COUNTRYCITY, ms los de COUNTRY. No puedes, por lo de las posibles inconsistencias que provienen de hacer los datos redundantes, pero de todas formas le das un nombre a la tabla que tendras si s pudieras: y ese es el

52

concepto de tabla extendida. Una tabla que fsicamente no existe, pero que te la imaginas. Absolutamente cierto. Vers que utilizamos el concepto a lo largo y ancho de GeneXus y por eso se le ha puesto un nombre. Mientras Diego permaneca absorto en sus recuerdos, Julia comprob que se cumplan correctamente las necesidades de acceso a la informacin entre las tablas.Mirando un Diagrama de Bachman es fcil determinar cul es la tabla extendida de cada tabla (base). Todas las tablas a las cuales se pueda llegar siguiendo las flechas de punta simple (relaciones N-1) desde la tabla base, formarn parte de su tabla extendida. La tabla extendida no tiene existencia fsica, sino slo conceptual. Nos permitir referirnos a la informacin unvocamente relacionada con el registro en el que estemos posicionados.

Comenzando a PrototiparPara poder dejarle paso a Mike, y que ste pueda comenzar a jugar su papel de tester del proyecto, Diego puls para dar comienzo a la prototipacin.

Con GeneXus no hay diferencia entre prototipar e implementar el sistema. La prototipacin no es ni ms ni menos que la aplicacin generada en una plataforma determinada: lo mismo que la aplicacin final! La diferencia entre una cosa y otra es solamente el uso que se le da.

Recuerde que ya se haba seleccionado el ambiente cuando se cre la KB, de modo que varias propiedades ya aparecan configuradas7, entre ellas el DBMS Default (SQLServer). Pero an falta algo para poder implementar el sistema Un asistente (wizard) le pedir a Diego la informacin del servidor de base de datos (DBMS), y la base de datos, por esta nica vez.Si desea modificar alguna de ellas, alcanza con seleccionar el panel Preferences del contenedor Knowledge Base Navigator y all buscar la preferencia a configurar, por ejemplo el DBMS asociado, o el lenguaje de implementacin, etc. y con sus propiedades (en la ventana que se abre).7

53

Su DBMS es Microsoft SQL Server 2005 Express y se encuentra instalado en el servidor DevelopeSrv de la red. El nombre que Diego dar a la base de datos es TravelAgencyTest:

Si la base de datos an no existe, podr crearla presionando [Edit conection] y luego el link Create database. Tambin puede posponerlo y GeneXus lo har automticamente unos pocos pasos ms adelante. Luego GeneXus proceder a la generacin y ejecucin del Developer Menu8, a fin de que los desarrolladores puedan testar inmediatamente las aplicaciones. Una vez que el ambiente est completamente configurado, cada vez que se presione GeneXus proceder a efectuar todos los pasos pendientes, necesarios para ejecutar la aplicacin. Diego esperaba ver lo que se observa en la siguiente imagen: el primer Anlisis de Impacto de esta base de conocimiento.

8 Un sencillo men de prototipacin creado por GeneXus (es un xml conteniendo links a los distintos objetos GeneXus creados, para poder invocarlos en forma fcil y rpida como se ver en breve).

54

El Impact Analysis Report (IAR) que estaba observando le deca que se iban a crear las tablas que se mostraban a la izquierda, y cuyas estructuras y dems informacin como ndices, etc. 9, podan verse a la derecha. Qu es el Impact Analysis Report? GeneXus disea a partir de la base de conocimiento la base de datos. En todo momento pueden hacerse modificaciones a los objetos existentes, o pueden crearse nuevos objetos, modificndose la KB. El IAR es el resultado de un anlisis que realiza GeneXus del impacto causado por las definiciones nuevas o cambios del modelo de desarrollo en una KB sobre la base de datos fsica asociada. Por tanto, este anlisis tiene por finalidad informar al desarrollador sobre los9

Obsrvese que abajo se muestran las sentencias SQL que se utilizarn para reorganizar (en este caso crear) esa tabla.

55

cambios estructurales que GeneXus deber llevar a cabo sobre la base de datos para dejarla en el nuevo estado, consistente con la KB. De conformidad con el IAR, Diego puls [Create] dando paso a la reorganizacin de la base de datos10. Como en este primer paso sta no exista, se va a crear. Ser en sucesivos cambios que ser reorganizada, en tanto reestructurada. Ahora bien, cundo se generan los programas? Inmediatamente, listos para ser probados! Desde que Diego presion e ingres la informacin que le faltaba a la plataforma (nombre de BD y servidor), hasta que se le abri una ventana del Browser con el Developer Menu listo para ejecutar, no pas ms de un minuto. Diego estudi detenidamente unos listados desplegados por GeneXus antes, que le permitieron ver que iba por buen camino pero no se apure, estimado lector, que sobre este punto volveremos ms adelante y Mike est un poco ansioso por entrar en escena.

Mike 007 con licencia para matarEra su turno. Deba destrozarlas. A las transacciones, claro. Con su vista fija en el Developer Menu (desplegado en el Browser tras el ) conteniendo links a las transacciones, entrecruz sus dedos, los hizo sonar, y tras una breve pausa, se dijo all vamos.

10

El trmino reorganizar refiere a efectuar cambios fsicos.

56

La idea era comenzar cuanto antes a probar, cargando informacin en la base de datos recin creada por GeneXus y verificar el comportamiento de las transacciones. Puls sobre Country y apareci ante su vista una imagen semejante a la que se observa a continuacin.

Esta es la transaccin Country en plena ejecucin.

57

Inmediatamente se percat de que el atributo CountryId debera ser autonumerado, es decir, que el usuario no debera preocuparse por asignarle un valor especfico ya que CountryId no representa nada de la realidad, es slo un nmero que otorga unicidad al registro a ser insertado. Asimismo, cuando Mike se enfrent a CountryWorldRegion, atributo numrico de apenas un dgito, no supo qu valor numrico representaba cada regin del mundo (cmo indicar que se trata de un pas africano, norteamericano, europeo, etc.?) Hay que mostrarle al usuario final los nombres de las regiones y continentes para que escoja el apropiado!, se dijo. As que decidi iniciar con Diego una conversacin sobre el tema, de forma tal que todos estuvieran de acuerdo sobre lo que propona. Volvi a la KB, seleccion Country y luego ingres a su seccin de documentacin.

Agregando conversacinEntre los selectores que se presentan al abrir la documentacin, aparece uno: Talk, que tiene por finalidad permitirnos crear un espacio donde establecer un dilogo con otros usuarios sobre el objeto en cuestin.

Note que el texto indicador superior est declarando un documento Talk para la transaccin y que finaliza con un signo de interrogacin. Este signo indica que an no existe una pgina Talk para este objeto, y antes de comenzar58

a escribir, sta debe ser creada. Cuando Mike salve este espacio de memoria, se generar una pgina con su contenido. Al cliquear sobre el signo de interrogacin, cambi al estado de edicin e ingres el texto, grab, y pudo ver:

Determinando un Atributo Identificador como AutonumberRato despus, en cuanto Diego ley lo que haba escrito Mike, contest positivamente en el Talk de la transaccin Country y se dispuso a realizar los cambios. Quera que se numerara en forma automtica el atributo CountryId, identificador numrico, utilizando la funcionalidad Autonumber de los DBMSs que la soportan. Todos los objetos de GeneXus contienen propiedades que afectan tanto su apariencia como su comportamiento.

Las propiedades de todo objeto, atributo, etc. pueden editarse en cualquier momento con y se abrirn en una ventana flotante.

59

Por lo que Diego se posicion sobre el atributo CountryId y en la estructura de la transaccin Country puls 11.

Primeramente, asign el valor True a la propiedad Autonumber, y configur las propiedades como mostramos en la figura.

Sin necesidad de entrar a la transaccin, tambin puede buscarse el atributo para editar sus propiedades con , a travs de la ventana Attributes, que se accede mediante View/Work With Attributes. Las propiedades que se modifiquen de cualquiera de las dos maneras aplican al atributo en general, no al atributo en una determinada transaccin en particular.

11

60

Ciruga esttica para un atributoPara completar el siguiente pedido de Mike en el Talk, Diego se situ en el WebForm de la transaccin, se posicion sobre el control atributo CountryWorldRegion y puls (Diego tiene la ventana de propiedades con Auto Hide, as que ahora la ventana Properties se desplaz hacia afuera). Ya en la ventana de propiedades del control, en la propiedad ControlType seleccion Combo Box; a continuacin, seleccion la propiedad Values para abrir la ventana Values Editor y carg los valores para el atributo. Eso fue todo.

61

Si en lugar de haber hecho esto especficamente en las propiedades del control CountryWorldRegion del form lo hubiese hecho en las propiedades del atributo CountryWorldRegion en la estructura, habra hincado el bistur ms a fondo: significara que en todos los forms donde se colocase ese atributo, por defecto se mostrase como Combo Box, con la definicin indicada y no como control Edit. Cuando se percata de su distraccin, Diego decide hacer esa definicin a nivel de la estructura. Aqu queda claro cmo es que el conocimiento se infiere en la base de conocimiento, y es reutilizado. Pero all reconoce que lo ms conveniente, sin embargo, ser crear un dominio enumerado para ser utilizado por cualquier atributo que quiera representar regiones del mundo, en particular, CountryWorldRegion. Edita entonces los dominios y crea uno nuevo, WorldRegion de tipo Numeric(1.0), y en la ventana de propiedades () se posiciona en la propiedad Enum values y pulsando sobre el botn abre la ventana para ingresar los valores que tomar el dominio enumerado:

62

De esta manera evitar en la aplicacin tener que recordar que el valor 8 corresponda en su sistema a South America, y a partir de all, cuando se quiera referir a ese valor, escribir WorldRegion.SouthA, que ser sin duda ms fcil de recordar que 8. Por tanto edita las propiedades del atributo CountryWorldRegion (por ejemplo, posicionndose en ese atributo en la estructura de Country y pulsando ) y modificar su tipo de datos para que ahora sea del dominio WorldRegion.

63

Observar inmediatamente que el valor de la propiedad ControlType del atributo automticamente pasa a ser Combo box, y sus valores los del enumerado.

Reorganizando (reorg)Diego cambi propiedades de dos atributos de la transaccin Country, esto indirectamente disparar algn cambio en la tabla fsica? Veamos el siguiente Impact Analysis Report que se observa luego de que pulsara :

64

S, GeneXus encontr que debe realizar una reorganizacin de la tabla. Note que ahora aparece el texto Autonumber a la derecha del tipo de datos en el atributo CountryId. La reorganizacin deber encender esa propiedad a nivel del DBMS. Pero, qu pas con el otro cambio, con el de CountryWorldRegion? Nada! No se trata de un cambio a efectuar sobre la base de datos, sino que solamente vale a nivel de la KB: el dominio WorldRegion sigue siendo de tipo Numeric(1.0) por lo que el atributo CountryWorldRegion no cambia su tipo a nivel de la base de datos. El cambio principal ser esttico: en todos los forms donde se presente ese atributo como control, lo har como Combo Box con los valores del dominio enumerado. Aqu se evidencia que no todos los cambios que se efecten en un objeto GeneXus necesariamente provocarn una reorganizacin. Veremos otro ejemplo de ello a continuacin cuando hablemos de las reglas de una transaccin.

65

Diego puede decidir pedirle a GeneXus que haga efectivamente los cambios informados ([Reorganize]) o cancelar la reorganizacin, con lo cual la prxima vez que se presione volver a realizarse el IAR. Elige reorganizar. Al releer lo charlado en el Talk, con intenciones de contestar que todo fue hecho, encuentra que Mike propona que por defecto todos los Ids de transacciones fueran autonumerados. (Su confusin vino a raz de que Mike, en lugar de haber documentado esto en el Talk del Main Document, lo hizo en el de la transaccin Country). Pero entonces, para implementar lo sugerido, tendra que ir una por una a cambiar la propiedad Autonumber de esos atributos? No!, pronto record que todos ellos estaban basados en el dominio Id. Alcanzaba con editar el dominio, sus propiedades y all, de igual manera que se hizo para el atributo CountryId, encender la propiedad Autonumber a nivel del dominio. Todos los atributos basados en el presente y en el futuro en ese dominio, automticamente heredarn la propiedad! Pero#@!#[email protected]!, maldijo en voz alta. CityId no es clave primaria simple. Para dotar a un atributo con la caracterstica de autonumerado, ste debe ser clave primaria simple. CityId es parte de la clave primaria de COUNTRYCITY12. Cmo hacer, entonces, para que este atributo no tome la propiedad Autonumber como True dada a su dominio Id?13 Sencillo. Se editan las propiedades del atributo CityId (como antes se hiciera con CountryId) y se modifica la Autonumber, llevndola a False. Se est cambiando, pues, el comportamiento por defecto dado por el dominio. Lo mismo puede decirse del atributo AttractionCategoryId que por el momento es de Attraction y no es clave primaria, aunque pronto lo ser cuando Diego cree la nueva transaccin AttractionCategory, unos pasos ms adelante. Por esta razn, decidi dejar la modificacin en la definicin del dominio Id12 Para dar valores consecutivos a este atributo, habr, pues, que apelar a una regla: Serial. Le proponemos la investigue luego de ver algunas reglas, en la seccin siguiente. 13 De todas formas, como GeneXus sabe de esta restriccin, si Diego no se hubiera percatado del problema, GeneXus igualmente hubiera actuado con inteligencia y no hubiera definido el atributo en la base de datos con autonumber. A efectos didcticos preferimos hacer trabajar a Diego.

66

(para encender la Autonumber) para ms adelante, cuando cree la nueva transaccin (dejando este To-Do Diego que, creado seleccionando el objecto Document desde la ventana New Object, al guardarlo qued colgado en Orphan Documents).

Transacciones: no slo una cara bonita, tambin personalidadDiego decidi incorporar a las transacciones el comportamiento que los usuarios haban descrito respecto a la manipulacin de los datos. Nunca debe ingresarse al sistema una atraccin a la que no se le haya dado un nombre. Abri, por tanto, la transaccin Attraction, puls sobre el selector Rules y escribi lo siguiente:Error('Attraction must have a name') if AttractionName.IsEmpty();

En ejecucin, si el usuario dejara vaco el campo Attraction Name, le aparecer el mensaje indicado y el control quedar en el mismo campo sin dejarle continuar. Tampoco se le permitir grabar el registro en la tabla correspondiente. Nunca debe ingresarse al sistema un pas sin nombre y nombre completo S se permite no ingresar detalles del pas, pero en este caso se le quiere dar un mensaje al usuario, advirtindole por si lo dej vaco por distraccin. Seleccion, pues, el selector Rules de la transaccin Country y escribi las siguientes tres reglas en un orden cualquiera:Error('Country must have a name') if CountryName.IsEmpty(); Error('Country must be in full') if CountryFullName.IsEmpty(); Msg('No country datails were provided. Do you want to continue?') if CountryDetails.IsEmpty();

67

La tercera regla tambin emite un mensaje, pero a diferencia de la Error, no traba el paso del usuario hacia el campo siguiente, y permite grabar el registro. Existen muchas ms reglas, que permiten programar el comportamiento especfico que tendr la transaccin. Obsrvese que se escriben siguiendo un estilo declarativo: salvo excepciones no importa el orden. En nuestro caso, se dispararn de acuerdo al orden en que se encuentren los atributos CountryName, CountryFullName y CountryDetails en el form. En una transaccin de dos niveles, se estn manipulando registros de dos tablas. Por tanto, cuando el usuario ingresa un nuevo pas y sus n ciudades mediante el form de la transaccin Country, se estarn insertando n+1 registros: 1 en la tabla COUNTRY y n en la tabla COUNTRYCITY. Se insertarn en el orden en que se hayan ingresado en el form. Puede querer dispararse una regla inmediatamente antes o inmediatamente despus que una grabacin de estas se efecte. Para ello las reglas pueden condicionarse no slo con clusulas if como las mostradas, sino tambin con eventos de disparo como son el BeforeInsert o el AfterInsert. Luego de grabarse los n+1 registros de la transaccin (cabezal y sus n lneas) se realiza automticamente un Commit. Puede ser deshabilitado por el desarrollador mediante una propiedad de la transaccin. Tambin existen eventos de disparo de reglas, que capturan el momento inmediatamente anterior a realizarse el Commit, o el inmediatamente posterior. Por ejemplo, si quisiera realizarse un listado del pas recin ingresado con sus respectivas ciudades, podra invocarse a otro objeto GeneXus de otro tipo: Procedimiento, asegurndose de invocarlo luego de haberse insertado los n+1 registros, envindole por parmetro el identificador de pas recin ingresado y si se quiere que sea antes del Commit se escribir en la seccin de reglas:PrintCountry.call( CountryId ) on BeforeComplete;14Obsrvese que se est utilizando un mtodo de invocacin corriente en GeneXus: el Call, que est apareciendo aqu como una regla. Tambin obsrvese que lo que precede al call es el nombre del objeto invocado, en nuestro caso ser otro objeto GeneXus de tipo Procedimiento, y por ltimo, obsrvese que los eventos de disparo aparecen identificados en la sintaxis de una regla: Rule if condition on Event14

68

Y si se quiere que sea luego del Commit se escribir:PrintCountry.call( CountryId ) on AfterComplete;

Diego deja documentadas las modificaciones efectuadas. Piense cules fueron los cambios en la KB desde el anterior.

Lo que se esconde tras el 1. Lo primero que hace GeneXus tras un es un anlisis del impacto que tendr los cambios efectuados en la KB, sobre la base de datos. En caso de que haya impacto, desplegar el Impact Analysis Report que puede ser confirmado, en cuyo caso se reorganizar fsicamente la base de datos, o cancelado, como ya vimos.

Sabiendo que lo nico que modific desde el anterior fue agregar reglas a ambas transacciones, anticipa que cuando ahora vuelva a pulsar no habr reorganizacin, pero s los pasos que siguen.2. GeneXus da paso a la etapa de especificacin, que es un anlisis de todo lo definido en cada uno de los elementos que componen los objetos que usted haya cambiado, como por ejemplo, las estructuras, los forms, las reglas incorporadas, y ms. Esta tarea da por resultado un listado de navegacin en el cual GeneXus informa de la lgica que ha interpretado para cada objeto que haya sufrido cambios desde el anterior, junto con advertencias y errores (en caso de haberlos).

En el caso de nuestros amigos, dos objetos han cambiado: Country y Attraction, por lo que esto ser lo que Diego ver tras su :

donde condition es una condicin booleana y Event es uno de los eventos de disparo vlidos, que invitamos al lector interesado a buscar en las distintas fuentes de documentacin del producto. Listamos algunos: AfterValidate, BeforeInsert, BeforeUpdate, BeforeDelete, AfterInsert, AfterUpdate, AfterDelete, BeforeComplete, AfterComplete, etc.

69

No hubo advertencias ni errores. Observe el lector cmo al elegir Country a la izquierda, le informa las tablas en las que realizarn las grabaciones y la integridad referencial que controlar cuando se pretenda eliminar un pas, o una ciudad a travs de esta transaccin.3. Luego de especificar, se pasa a la etapa de generar el o los objetos que GeneXus entienda necesarios para que la ejecucin pueda realizarse en forma

70

completa (si hay objetos que no han variado, y fueron generados en un anterior, para qu hacerlo nuevamente?). La generacin implica la escritura de lneas de cdigo que implementen la programacin de los objetos en el lenguaje elegido por usted para el ambiente de desarrollo (por cada una de las dos transacciones de Diego, se generar entre otras cosas un archivo .cs. No olvide que l eligi C# como su lenguaje de desarrollo). Adems mientras el desarrollador no cree su propio objeto principal, se crear un xml: el Developer Menu, que contendr links a todos los programas (objetos) generados. 4. Por ltimo, GeneXus compila los programas y ejecuta (hasta que no se cree un objeto principal de la ejecucin) el Developer Menu en el Browser instalado en esa mquina.

Todo este proceso es enteramente automtico. Usted nunca tendr que especificar y/o generar un objeto en forma explcita, pues GeneXus es lo suficientemente inteligente como para determinar qu acciones disparar en cada momento. As fue que, avisado por Diego, previo paso por el Developer Menu, Mike ejecut Country, ingres unos cuantos registros, modific algunos, elimin otros, y document los resultados en la Documentation de la transaccin otorgndole el status de okay. Observe lo que sucedi cuando accidentalmente, teniendo al pas 1, Argentina, en edicin, borr su nombre y sali del campo. Recuerda que Diego program una regla Error con exactamente ese mensaje un poco antes?

71

Le faltaba an probar Attraction (habiendo encontrado cosas a modificar en Country, haba decidido esperar un poco), cuando vio en el Talk de la misma que Diego le indicaba que postergara la prueba hasta que l creara la siguiente transaccin relacionada.

Creando la Transaccin AttractionCategoryEn la transaccin Attraction, Diego nombr al par de atributos como AttractionCategoryId y AttractionCategoryDescription sabiendo que ms tarde creara una transaccin AttractionCategory, que los contendra.

72

La finalidad de esta transaccin es categorizar los variados puntos de atracciones de una ciudad. Ejemplos de esto pueden ser las categoras Buildings/Structures, Nightlife, Relaxation, Adventure, Safaris, Gastronomy, Business, etc. Con las estructuras de las transacciones Attraction y AttractionCategory estamos diciendo implcitamente que: una atraccin pertenecer a una y solo una categora, mientras que una categora podr contener n atracciones. El siguiente Diagrama muestra la nueva relacin existente ahora entre las tablas involucradas hasta el momento en el proyecto.

GeneXus deber reorganizar la base de datos en el prximo , creando la nueva tabla ATTRACTIONCATEGORY y quitando de ATTRACTION al atributo AttractionCategoryDescription, que pasar ahora a ser inferido, a partir de la nueva clave fornea, AttractionCategoryId. Antes de dar , Diego record modificar el dominio Id para que fuera Autonumber (como haba dejado anotado en la documentacin para hacer cuando creara la transaccin AttractionCategory). Ahora s, . Analiz los Impact Analysis Report correspondientes:

73

Observe cmo informa sobre los cambios habidos en Attraction. Y para AttractionCategory informa que la tabla es nueva, deber ser creada. Adems presenta una advertencia15:

15

Y si Mike hubiese testado anteriormente la transaccin Attraction y hubiese insertado registros antes de esta reorganizacin? Supngase que hubiera ingresado una atraccin con Id de categora 1 y descripcin Nightlife qu pasara entonces en la reorganizacin, cuando se cree la tabla ATTRACTIONCATEGORY y AttractionCategoryId pase a ser clave fornea en ATTRACTION y AttractionCategoryDescription inferido? Qu pasar con el registro pre-existente en ATTRACTION? Para que la base de datos quede en estado consistente, tendr que crearse un registro en ATTRACTIONCATEGORY, con Id 1 y con descripcin Nightlife. Esto lo har el propio programa de reorganizacin. Qu pasar si existan dos o ms atracciones con el mismo Id de categora y distinta descripcin? Es lo que informa la advertencia. Investguelo.

74

Tras el [Reorganize] confirmado por Diego, obtuvo la nueva base de datos y los nuevos programas generados. Cerr el Browser (pues la tarea de testar todo era de Mike) y finalmente document la nueva transaccin y los cambios de Autonumber. Mike ley lo escrito por Diego y se dispuso a prototipar todas las transacciones. nuevamente

Para que el usuario final no tenga que recordar cdigos para las claves forneas, GeneXus crea objetos automticamente que se conocen como Prompts y que se invocan mediante la imagen que aparece en ejecucin al lado de todo campo clave fornea. Se trata de listas de seleccin que muestran toda la informacin de la tabla referida, para que el usuario seleccione la deseada.

As, cuando Mike prob la transaccin Attraction, al momento de ingresar la categora de la atraccin Tour Eiffel, no recordaba el cdigo que corresponda a Buildings/Structures que deba asociarle. Entonces presion en la imagen que sucede al campo para ingresar el Id de la categora, , y se le abri la lista de seleccin de categoras creada automticamente por GeneXus, como aparece en la siguiente imagen:

75

Con esa lista abierta, Mike elegir la primera opcin, Buildings/Structures, y el control volver a la transaccin Attraction, donde aparecer en el campo AttractionCategoryId el valor 1, correspondiente; el foco estar all, y el usuario podr pasar a ingresar el siguiente campo (en nuestro caso, el Id de pas, para lo que el procedimiento podra repetirse). Tambin prob que estuvieran funcionando bien los controles de integridad referencial, por lo que coloc en AttractionCategoryId un valor inexistente de categora, y vio cmo en ejecucin apareca un mensaje de error indicndoselo16.16 Segundos ms tarde, probara intentar eliminar en la transaccin AttractionCategory una categora con atracciones asociadas, esperando ver que fallara la eliminacin, asegurndose as la integridad referencial. Amigo lector: pruebe y ver.

76

Para que el usuario final no tenga que estar abriendo estas listas de seleccin cada vez que tenga que ingresar el valor de una clave fornea, GeneXus provee de la facilidad de disfrazar en ejecucin un atributo por otro. Mike propuso esto ltimo; Diego lo realiz cambiando dos propiedades del atributo AttractionCategoryId, y como resultado, ahora para ingresar la categora Buildings/Structures Mike slo debe recordar con qu letras empieza, digitarlas y tendr autocomplete:

El atributo en el que el usuario final estar ingresando la descripcin, es en realidad la clave fornea AttractionCategoryId, que est disfrazada de AttractionCategoryDescription, de manera que el usuario final ingresa descripciones, pero lo que en realidad queda almacenado es ni ms ni menos que el Id correspondiente, que se fue a buscar a la tabla, en forma transparente.

77

Ahora quedaba mejorar un poco la usabilidad y la apariencia de lo que iba del proyecto, y dejaron por escrito que habra que comenzar a hacer uso de algunas de las otras herramientas de GeneXus, como los GXpatterns. Y tal