Entradas

Escenarios de desarrollo con GeneXus e instalación en producción.

Imagen
Existen muchas forma de organizar el desarrollo de aplicaciones GeneXus. Esta variedad de escenarios, hace que a veces se dificulte el discutir sobre herramientas o procedimientos generales, pues algunos son buenos para un caso, pero no aplican o no son convenientes para otros escenarios.  Quiero hacer una lista de cada uno de los que tengo identificados, para tratar de explicar pros y contras de cada uno.  KB Monolítica - Empaquetado Monolítico - Instalación monolítica en una sola maquina Es ideal para aplicaciones chicas, que no tengan requerimientos grandes de escalabilidad. Permite mantener sencillo el desarrollo y es como conviene empezar todos los desarrollos.  El empaquetado es sencillo y la puesta en producción también. Hay que testear toda la aplicación para ponerla en producción.  KB Monolítica - Empaquetado Monolítico - Instalación en mas de un nodo con base de datos compartida Una unica KB, la cual se empaqueta en un único package, pero se instala en mas ...

Cambiar de versión de GeneXus: Que preguntas debo hacerme?

Imagen
Problema: Tengo una KB Genexus y la estoy generando con la version N (sin errores y esta en producción) y necesito parasarla a la version M con M > N.  Antes de cambiar de versión, intento siempre contestar las siguientes preguntas.  Los usuarios van a poder ejecutar simultáneamente la version anterior y la nueva? Siempre conviene que los usuarios puedan seguir ejecutando por un tiempo limitado, hasta estabilizar la nueva versión, tanto la version anterior como la nueva. De esta forma, cada vez que aparece alguna dificultad o diferencia, se puede volver al sistema anterior y permitir que el usuario no se tranque en su trabajo. Este tipo de problemas, deberia tener una prioridad alta para su resolución pues el objetivo es sacar de produccion la version vieja lo antes posible.  Alguna funcionalidad del sistema anterior, no va a existir mas en la version nueva?  Si fuera asi, conviene evaluar si esta funcionalidad es indispensable y si asi lo fuera, hay que desarroll...

Pasar una KB de monolitica a servicios distribuidos

Imagen
Una de las tareas que tenemos por delante quienes desarrollamos con GeneXus desde hace mucho tiempo es pasar algunos de nuestros desarrollos que vienen de versiones anteriores de GeneXus en una KB monolítica, a varias KB interconectadas.  Los motivos de este cambio, no es caprichoso, sino que hoy que esta motivado por la necesidad de nuestros clientes de tener los cambios mas rapido y nosotros necesitamos instalar con mucha mayor frecuencia que lo que hacíamos antes.  En una KB monolítica, teníamos que esperar a tener TODO el sistema en un estado instalable, y los que desarrollamos sabemos que el tiempo de estabilización de los cambios para que sea instalable es proporcional a la cantidad de objetos, cantidad de desarrolladores y cantidad de cambios introducidos.  La mejor solución que ha encontrado la industria para este problema, es el clásico " divide & conquer ". Cuando tengo un problema grande que no puedo resolver en un tiempo limitado, es mejor dividirlo en pro...

LowCode - Es mas importante poder entender programas, que escribir poco código.

Imagen
 LowCode es una tendencia actual en el desarrollo de aplicaciones.  No es una tendencia nueva, pero es una buena categoría para agrupar herramientas y lenguajes que comparten características comunes.  Lo que me causa un poco de ruido, es que se ponga el foco en el código y en que el mismo sea poco, cuando creo que el foco debería ser diferente.  En vez de hablar de código, deberíamos hablar de PROGRAMAS y los programas pueden ser muchas cosas mas que código. Cualquier cosas que pueda crearse y ejecutarse debería ser considerado como cosas que deberíamos programar en los próximos años.  Pensemos en diagramas, audio con instrucciones, instrucciones biológicas tipo ADN/ARN y la metodología CRISP. No seria raro que aparezcan nuevas formas de programar con las computadoras cuánticas y otros modelos.  El codigo es solo una representación de los programas y es la mejor que tenemos en el momento, pero es bueno tener claro que no es la única y posiblemente en el fut...

IIS con autenticación con certificados de clientes (Autenticación mutua) - Error 403.16 Forbidden

Imagen
Necesitaba configurar un sitio con autenticación exigiendo certificados X.509 (del tipo del que contiene la actual Cedula de Identidad uruguaya). Los certificados son usados por la aplicación también para identificar que operaciones puede realizar dicho usuario y para firmar digitalmente operaciones que necesitan ser firmadas.  El sitio exigía https y certificados del lado del cliente (también llamada autenticación mutua), pues tanto el server como el cliente deben usar certificados para demostrar quienes son.  Hay una guia paso a paso cómo hacer esto en este link . La idea es que al intentar conectarse al sitio, presenta una lista de los certificados personales  que tengo instalado en mi maquina (o en algún otro repositorio local) de la forma: y luego desde la aplicación recuperar la información de dicho certificado, como por ejemplo a que empresa representa esta persona o que documento tiene la misma.  Para algunas aplicaciones este tipo de autenticación puede ahor...

Low Code y grandes aplicaciones

Imagen
Hace unos dias, me apreció en Twitter un aviso de strumenta, A guide to Low Code Platforms  donde dicen: A low-code (development) platform allows to create applications through graphical user interfaces and/or configuration instead of traditional computer programming. They can be a great tool for enterprise companies to reduce the cost of development mainly in two ways: by giving a software that non-developers can use to create apps tailored for their needs by giving programmers a system to quickly develop small applications En el post visualizan que Low Code es para hacer pequeñas aplicaciones dentro de las organizaciones.  Estoy parcialmente de acuerdo con lo que dicen, pues en esas areas es donde mas rapido se pueden adaptar las herramientas Low Code, pero donde se les puede aprovechar mas, es en las grandes aplicaciones.  La complejidad de los desarrollos actuales, es inabarcable para que las manejen pocos desarrolladores. Es necesario contratar a muchos especialista...

Como generar un archivo xml que cumpla con un XML Schema con GeneXus.

Imagen
Un patrón bastante común con el que me he encontrado en varias aplicaciones GeneXus que intercambian datos, es el de tener que generar un archivo XML con un formato que cumpla con un XML Schema. La aplicación con la que nos queremos comunicar, nos brinda un archivo de extensión XSD y debemos generar un XML con los datos de mi aplicacion que tenga dicho formato.  Una forma fácil y de poco código que utilizo es la siguiente.  Importar XSD a GeneXus.  Haciendo Tools / Application Integration / XML Schema Import Con esto, va a generar un SDT con el formato equivalente al del Schema. Debemos revisar que el SDT tenga los tipos de datos correctos, pues puede haber algunos no soportados por Genexus o que hayan quedado mal.  Generar un Data Provider con ese SDT de salida.  El segundo paso es generar un Data Provider, que tenga el SDT recien importado como salida. La tarea de ese DP va a ser leer la base de datos y cargar el SDT con datos.  Este paso implica solo ...

SUGERENCIA para GeneXus (2) : Poder especificar NULL en Data Providers

Imagen
La sugerencia, seria poder especificar de una forma sencilla el insert de un registro con un atributo nulo en la base de datos.  Ejemplo: Ejemplo: Persona * PersonaId    CiudadID  - Nullable = True que tiene las propiedades Data Provider = True Use To = Populate Data.  En la carga inicial, necesito agregar registros con CiudadID NULL.  Cual seria la mejor forma de hacer esto?.   Siento que me estoy complicando con un tema que debe tener una solución sencilla, pero no le encuentro la vuelta.  Probe varias opciones en el Personas_DataProvider asociado a la transaccion.  PersonasCollection {    //Opcion 1 - No poner Ciudad en el DP (no funciona)  Persona     {        PersonaID = 111        // CiudadID    } // Opcion 2 - Intentar hacer un SetNull()    Persona    {       PersonaID = 222       CiudadID.Se...

SUGERENCIA para GeneXus (1) : Poder cargar una imagen desde un texto

Imagen
Me gustaría contar con una forma de cargar una tabla, que tiene un atributo del tipo Image, sin tener que tener un objeto del tipo image en la base de datos. Hoy se puede hacer asi: New    CountryId = 'br'    CountryName = 'Brasil'    CountryFlag   = flag_brasil.link endnew A mi me gustaria poder hacer algo asi: New    CountryId = 'br'    CountryName = 'Brasil'     CountryFlag.FromBase64String( ' 0xFFD8FFE000104A46494600010101 006000600000FFDB00430008060607 0605080707070909080A0C140D0C0B 0B0C1912130F14.....') EndNew o en Data Provider CountryCollection{ Country   {    CountryId = 'br'    CountryName = 'Brasil'    CountryFlag = ImageFromString(' 0xFFD8FFE000104A46494600010101 006000600000FFDB00430008060607 0605080707070909080A0C140D0C0B 0B0C1912130F14.....' )   } } Se que no es lo mas lindo, ni lo mas fácil de leer, pero es muy práctico para los casos que queremos cargar datos si...

Error al usar DynTrn de Populate Data, 32bits.

Imagen
  En estos dias me paso un problema en una KB con GeneXus 16 U10, generando C# cuando intentaba usar una transacción dinámica, que usaba un Data Provider para cargarle datos y estaba compilando para la plataforma x86 (32bits).  El problema se daba pues no lograba cargar la dll generada del data provider pues daba un BadImageException y cancelaba.  La solución está en forzar al programa  GXDataInitialization.exe para que ejecute en 32bits. El comando es corflags /32bitsreq gxdatainitialization.exe  CorFlags.exe se instala con los SDK de Windows.  Va a ser corregido en próximas versiones de GeneXus.