
El software ha invadido al mundo y existen aplicaciones digitales ejecutando en plataformas muy diversas. Debido a esto se hace necesario que nos detengamos un momento y tratemos de comprender los tipos de aplicaciones actuales y su arquitectura. En este video veremos cómo podemos clasificarlas, entender cómo están construidas y cómo pueden comunicarse entre sí..
Breve descripción de la herramienta, sus objetivos y características.
Para tratar los temas del curso, iremos desarrollando una aplicación como excusa para ir aprendiendo sobre la plataforma y su lenguaje. En este video veremos qué tipo de aplicación será la que desarrollaremos, sus componentes y las interfaces de usuario web y mobile de cada parte.
Primera ejecución de GeneXus: IDE, ambiente de desarrollo integrado. Cómo crear un nuevo proyecto o base de conocimiento (Knowledge Base), configurando el lenguaje de programación en el que se generará la aplicación mientras se la prueba, y su idioma.
Descripción de los objetos de la realidad mediante objetos GeneXus de tipo Transacción. Identificadores (llaves), tipos de datos, layout web.
Pedimos a GeneXus que cree automáticamente los programas y la base de datos y abra el navegador web para que podamos ejecutar y probar.
Presionando F5 GeneXus despliega informe conocido como análisis de impacto, tras el que se creará físicamente la base de datos, sus tablas e índices, y los programas. Se muestra la lista de selección creada automáticamente por GeneXus para poder elegir un cliente en la transacción Customer.
Creamos la transacción “Attraction” para registrar las atracciones turísticas y vemos el atributo llave, y cómo editar las propiedades de un atributo, definir dominios para sus tipos de datos y autonumerar atributos numéricos.
También presentamos el problema de registrar el país de la atracción turística.
Agregamos las transacciones Country y Category y especificamos en la transacción Attraction que una atracción pertenece a un país y categoría. Vemos la manera en que GeneXus mantiene consistente toda la información relacionada.
Se ve en la práctica el concepto de integridad referencial, para mantener la consistencia de los datos. Se presentan las llaves foráneas, relativas a las llaves primarias y la importancia, para ello, de nombrar de la misma manera a los atributos que corresponden a lo mismo. Se presenta la diferencia entre estructura de transacción y tabla física asociada (allí aparece el concepto de “atributos inferidos”). Se muestra la lista de selección como objeto creado automáticamente por GeneXus para facilitar el trabajo con los datos relacionados. Se ve cómo es posible indicar que una llave foránea pueda quedar sin valor, a través de propiedad Nullable.
¿Cómo representamos que un país tiene un conjunto de ciudades? Creando un segundo nivel en la estructura de la transacción Country
Vemos que GeneXus creará dos tablas y reparamos en la llave primaria de la que corresponde al segundo nivel. Vemos la grilla (grid) que se agrega en el form Web para registrar las ciudades. Agregamos la ciudad a la transacción Attraction y especificamos que puede quedar vacía (nullable) en ejecución.
Cuando vamos a crear un atributo nuevo, podemos nombrarlo como queramos. ¿Cuál es la forma sugerida?
Cada transacción tiene un lugar donde especificar reglas que deben dispararse cuando el usuario interactúa con la pantalla (para insertar, modificar o eliminar la información).
Sobre objetos GeneXus definidos en la KB, como las transacciones, podemos aplicar algunos patrones que construyen otros objetos sobre ellos para agregar funcionalidades, como las provistas por el patrón “Trabajar con” (Work with) los datos de una transacción.
El concepto de tabla base y su relacionado, tabla extendida, es fundamental en GeneXus, pues permite reconocer con qué entidad estamos trabajando en cada momento, pensándola desde un punto de vista más conceptual y menos pegado al modelo físico.
Se presenta el concepto de subtipo para poder utilizar un atributo existente pero cambiándole el nombre, y un ejemplo de uso en el que desde una transacción de vuelos hay que registrar el aeropuerto de partida y el aeropuerto de llegada.
Se ven los conceptos de: grupo de subtipos, subtipo y su supertipo, controles de consistencia (integridad referencial) y listas de selección, diagramas de tablas, atributo descriptor de una transacción y propiedad Contextual Title de un atributo. El caso de uso estudiado es la referencia múltiple de una transacción a otra. Se presentan otros casos de uso que no se estudian.
GeneXus provee las fórmulas para realizar cálculos que involucran valores de determinados atributos, constantes y/o funciones. Se estudian las fórmulas globales y se posterga el estudio de las locales para más adelante. Vemos las llamadas fórmulas horizontales y las de agregación.
A partir de un ejemplo en el que se necesita postergar el disparo de una regla de error para dar tiempo al usuario de ingresar datos de cabezal y líneas, se estudian los eventos de disparo de reglas en transacciones. Se pueden condicionar las reglas para que se disparen en estos eventos, y no antes ni después.
Estudiamos el momento AfterLevel, pero también presentamos AfterComplete, y la ejecución de un comando Commit en el medio, BeforeInsert y AfterInsert.
Este video explica el concepto de "índice" de una base de datos, y muestra los índices automáticamente creados por GeneXus a partir de la transacción Attraction (índice primario e índices foráneos). Se define también un índice de usuario para controlar que no se ingresen dos atracciones turísticas con el mismo nombre, y de esta forma se integra el concepto de "clave candidata" (índice Unique).
En este video se analiza paso a paso la estructura de tablas normalizada que GeneXus crea a partir de un determinado diseño de Transacciones. El caso de estudio incluye un atributo calculado, y un ejemplo de clave foránea inferida.
Se estudian los tipos de relaciones que pueden establecerse entre las entidades de la realidad: uno a muchos (fuerte y débil), muchos a muchos, sus características y formas de modelarlas a partir de las transacciones. Se dejan presentados dos casos de relaciones uno a uno.
Habíamos mencionado las relaciones 1 a 1 producto de la especialización, en la clase sobre subtipos. Aquí vemos el otro caso de relaciones 1 a 1, entre entidades diferentes.
Con frecuencia nos encontramos con la necesidad de exportar e importar objetos GeneXus, desde y hacia nuestra base de conocimientos. Los objetos exportados podrán ser compartidos de manera muy sencilla entre diferentes desarrolladores, aunque se encuentren en computadoras y proyectos diferentes. Se podrán exportar/importar todos los objetos ( KB completa), o seleccionar los que nos interesen.
Se presenta el objeto Procedure con uno de sus múltiples usos: implementar listados PDF desplegados en el navegador. Se estudian dos de los comandos fundamentales para ello: el print y el for each, que permite el acceso a los datos de una entidad.
Cómo utilizar for eachs anidados para imprimir información relacionada (las categorías y las atracciones turísticas). Este caso se conoce como join.
Muchas veces se desea listar para cada registro de una tabla sus relacionados en otra, pero sólo para aquellos registros que tengan relacionados. En definitiva, se tratará de listar información de una tabla, agrupada por cierto criterio, lo que se conoce como corte de control. A su vez, a través de un ejemplo, se presenta el concepto de cláusula Unique.
Fórmulas que declaramos localmente, como instrucción puntual dentro de determinado código (Source de procedimiento o Data Provider, evento de Web panel, etc.). Comparación con las fórmulas globales (definidas a nivel de atributo).
Cuando un objeto invoca a otro, ¿cómo le pasa información? Por ejemplo un objeto que pide al usuario que ingrese un país y llama a un listado para que imprima las atracciones de ese país.
Se utiliza un web panel para pedir datos al usuario. En él se utiliza una variable como dynamic combo box, es decir, una variable que carga todos los países para que el usuario seleccione el deseado. Se estudia la regla parm, para declarar los parámetros que recibe un objeto. Se utiliza “in” para decir que un parámetro es de entrada. Sólo se estudia el caso en el que los parámetros declarados en regla parm son variables.
Qué sucede cuando un objeto es invocado para que devuelva un resultado a quien lo llamó. Cómo se puede realizar la invocación y cómo se deben declarar los parámetros en el objeto llamado. Qué sucede cuando un parámetro en lugar de ser una variable es un atributo.
Recomendamos haber visto el video “Invocaciones entre objetos”
En este video se presenta el concepto de Tipos de Datos Estructurados. Además de los tipos de datos simples, GeneXus ofrece la posibilidad de definir tipos de datos estructurados o compuestos (SDT) para ser utilizados únicamente como tipo de datos de variables (no de atributos). Se introduce también el concepto de colección.
Se presenta el concepto de variable colección. Cuando se define una variable, independientemente de su tipo de dato, es posible declararla como colección mediante un ""check box"" presente en la solapa Variables. Al marcar este check box estaremos indicando que dicha variable almacenará en memoria una colección de ese tipo de dato.
A partir de un ejemplo se introduce el objeto Data Provider, cuyo objetivo es cargar y devolver una estructura compuesta (tanto simple como colección) para hacer algo con ella, como recorrerla e imprimirla. De acuerdo a la estructura de un SDT, ya sea definido como simple o como colección, se muestra cómo hacer para que un Data Provider devuelva la colección.
Se pone el foco en la forma de actualización de las transacciones, para presentar la forma de utilizarlas sin su pantalla, por código, introduciendo los Business Components.
Se estudia a partir de ejemplos cómo insertar, modificar y actualizar información de la base de datos por código, a través de Business Component de un nivel. Se estudian sus alcances, y se muestra cómo manejar los mensajes y errores.
Se implementa un requerimiento en el que hay que insertar un nuevo registro en una tabla y modificar los de otra, a través de Business components. Además: cómo vaciar las dos tablas.
Un Data Provider no sólo permite cargar y devolver una estructura compuesta con datos de la base de datos, sino también a partir de datos fijos. Por estructura compuesta entendemos tanto SDT como BC (business components). Y tanto simple como colección.
Para poblar de datos una tabla no lo haríamos en forma manual como hicimos en el video anterior, sino utilizando la propiedad Data Provider de la transacción.
Vimos como solución a la actualización por código de la base de datos el uso de Business Components. Sin embargo, en algunos casos, fundamentalmente por motivos de performance, necesitará actualizar sin mayores controles. Para ello se utilizan los comandos new, for each y Delete dentro del objeto procedimiento. Aquí se presentan.
GeneXus permite crear distintos tipos de aplicaciones en distintas plataformas. Veremos su arquitectura y cómo ésta se relaciona con la forma de desarrollarlas.
Se introduce lo que se verá en todo este módulo, que básicamente será el objeto Web Panel y el Design System. Se explica por qué se caracteriza como con foco en Back-office cuando también se desarrollan aplicaciones Customer-facing.
Construimos una pantalla similar a la que implementaba el pattern Work With de atracciones: con un grid con atributos ordenados por determinados criterios, con filtros sobre los datos, ingresados por el usuario, acciones sobre los datos del grid, etc.
Implementaremos un web panel con un grid con atributos y variables. Veremos los eventos Start, Refresh y Load del sistema, así como eventos de usuario, en particular el click asociado a un atributo o variable del grid. Llamaremos a la transacción Attraction que el pattern había modificado, en modo Update. Vemos la variable &Mode del sistema en transacciones, y los valores que entiende. Vemos que los atributos son de salida y las variables de entrada. Vemos cómo hacer que una variable sea Readonly.
Qué pasa cuando una acción a nivel de las líneas del grid modifica el valor de un elemento de la línea. Conceptualizamos todo lo visto respecto a web panel con un grid con tabla base, estudiamos web panel con atributos pero sin grid y el caso de web panels sin tabla base. Vemos el diseño web responsivo. Vemos cuándo es necesario ocultar una columna del grid.
A partir de ejemplos se va conceptualizando todo lo que hace a web panels. Se estudian las diferencias entre web panel con y sin tabla base a partir de los eventos Start, Refresh y Load. Se ve un ejemplo de diferencia entre recibir un parámetro en variable o en atributo.
Se presenta el esquema de ejecución de eventos para los web panels con y sin tabla base vistos en el video anterior, desde el punto de vista del código que ejecuta en el front-end y el que ejecuta en el back-end. Con esto queda integrado todo el conocimiento visto sobre la lógica básica de los web panels.
Cómo cargar variables en grid del pattern Work With for Web, y cómo agregar botón fuera o dentro del grid para ejecutar alguna acción.
Fue pensado como parte del curso CORE, por eso hace referencia a videos anteriores de ese curso.
Se muestra un ejemplo donde debe agregarse un grid a un web panel que tenía uno solo. Se ve la repercusión en los eventos del sistema (Start, Refresh, Load) y en los comandos Refresh y Load. Se presenta el caso de grids anidados.
Aprende los fundamentos de GeneXus.
GeneXus es el camino más rápido para insertarse en el mundo de la tecnología. Una plataforma de desarrollo que es fácil de aprender, es rápida para crear aplicaciones de calidad y es utilizada por las empresas más importantes, en negocios reales.
Objetivo:
A través del desarrollo de una aplicación, te enseñaremos los fundamentos de GeneXus que te permitirán introducirte en su lógica y construir rápidamente cualquier tipo de aplicación, presente o futura.
Requisitos previos:
Conocimientos básicos de programación y base de datos.
Metodología sugerida para el curso:
Intercala el teórico con el práctico que tienes para descargar en la Sección 1 “Materiales del curso”.
Mira cada video y haz en paralelo los ejercicios del Práctico correspondientes a esos temas, hasta terminar con todos los videos del curso.
Duración aproximada:
Son 8 horas de video más el tiempo que te lleve desarrollar la aplicación mencionada en los ejercicios del Práctico.
Una duración total máxima de 45 horas.
Examen:
Es un examen en computadora, con preguntas/ejercicios múltiple opción y verdadero/falso.
Al aprobar el examen obtendrás la Certificación de validez Internacional “Analista Junior GeneXus” y tu nombre aparecerá en la lista de Técnicos GeneXus Certificados.
Nota: El curso en esta plataforma NO incluye examen.
Bonus Material:
Puedes descargar la versión Trial de GeneXus de forma gratuita.