Entradas

Mostrando las entradas con la etiqueta Migracion

Cambiar el valor default de una propiedad en una KB GeneXus

Imagen
En GeneXus, las propiedades de los objetos tienen un comportamiento jerárquico: pueden definirse a distintos niveles (KB, Version, Environment, Generator, Folder, Object, etc.), y los valores definidos en niveles superiores se heredan como default por los niveles inferiores. Este modelo facilita la consistencia general del desarrollo, pero plantea un desafío cuando queremos cambiar el valor por defecto de una propiedad en toda la Knowledge Base (KB). Ese cambio puede tener un impacto masivo, afectando a miles de objetos en cascada. Un ejemplo concreto: Commit on Exit Supongamos que tenemos la propiedad Commit on Exit configurada en YES a nivel del Environment . Esto significa que todos los objetos que no tengan un valor explícito heredan ese comportamiento y realizan un commit automático al finalizar la ejecución. Ahora imaginemos que queremos modificar esta configuración para que cada desarrollador maneje manualmente las UTL (Unit of Transaction Logic) , y por tanto necesi...

Haciendo una KB GeneXus mas mantenible: Mantener aislado el código externo.

Imagen
Con GeneXus se pueden hacer aplicaciones multiplatafoma de manera eficiente en diferentes lenguajes. Sin embargo en algunas ocasiones especificas hay que recurrir a programar en codigo C# o Java. La que sigue, es una recomendación sencilla, que me hubiese gustado que alguien me la diera hace unos cuantos años, pues simplifica mucho el mantenimiento futuro.    Para hacer que la KB GeneXus sea mantenible en el tiempo y fácil de migrar, es indispensable mantener dicho código en su mínima expresión y lo más aislado posible.  En particular, existe la posibilidad de incluir código C# o Java dentro de los objetos Genexus, con los comandos CSHARP JAVA SQL EXEC Mi recomendación, para hacer facilitar la migraciones futuras, no tener estos comandos mezclados con el resto del código Genexus. En particular, conviene poner en procedimientos estos comandos, de forma que cuando cambie de sistema operativo (EXEC), de base de datos (SQL) o de lenguaje de programación (CSHARP, JAVA) tenga q...

Haciendo una KB Genexus más mantenible: Evita depender de objetos que cambien fuera de tu control

Imagen
En el mundo digital, la velocidad con la que se actualizan y cambian las herramientas y tecnologías es asombrosa. Y mientras que estar al día con las últimas novedades puede ser emocionante, también puede representar un desafío significativo en cuanto a mantenimiento y compatibilidad. Si estás trabajando con Genexus y quieres construir una Knowledge Base (KB) robusta y fácil de mantener, te hago algunas recomendaciones.  GeneXus garantiza la actualización tecnológica; sin embargo, es esencial estar preparados para abordar estos cambios. A pesar de que he presenciado numerosas charlas sobre el tema, noto una falta de énfasis en cómo prepararnos adecuadamente para las transiciones entre versiones. Por ello, he decidido elaborar una serie de publicaciones que se centrarán precisamente en este aspecto crucial. El problema con las herramientas de terceros Si bien las herramientas y recursos de terceros, pueden acelerarte muchisimo el desarrollo y la puesta en produccion, traen como cons...

Eventos en webpanels y transacciones GeneXus.

Imagen
  Este post es parte de una serie de artículos sobre como hacer KB mas mantenibles y actualizables a nuevas versiones de GeneXus. Los objetos que tiene interfaz de usuario, soportan eventos en su programación. Dichos eventos son necesarios para permitir al usuario hacer acciones sobre los datos. Los eventos pueden dispararse por diferentes motivos como ser apretar un botón, cambiar algún valor, salir de un control, paginar, cargar una grilla, etc.  Una practica que recomiendo fuertemente para hacer la KB mas fácil de mantener y sobre todo mas migrable a nuevas versiones, es la de solo incluir en el código de los eventos, aquellas cosas que interactúan con los elementos de las pantalla, y todo lo demás, resolverlo con otros objetos (procedures, data providers, etc).  Cosas que SI deben hacer los eventos: Mostrar mensajes al usuario Ocultar/Mostrar controles (botones, grillas, tablas) Actualizar datos en pantalla, dependiendo de lo ingresado por el usuario Cambiar texto de...

Cambio de versión de GeneXus - Paso 4 - Comparar versión vieja con versión nueva

Imagen
Paso 4 del ciclo  Metodología para el cambio de versión de GeneXus  En el paso anterior, pudimos crear una build all exitoso de la KB GeneXus, para generar la aplicación y una instalación de la aplicación en un ambiente de pruebas.  Una vez que tenemos la aplicación instalada en la versión vieja y la versión nueva, tenemos que pensar en comparar el funcionamiento de ambas aplicaciones y poder detectar las diferencias.  Las comparación van a ser de diferentes tipos: Configuración En este paso se deben comparar los archivos de configuración (web.config, client.cfg, log.config, etc) para estudiar las diferencias entre ambas versiones y entender cuales pueden afectar a la nueva aplicación.  Comparar los temas y archivos css generados en la nueva versión. Identificar las clases que tienen diferencias.  Navegación  Al hacer el REBUILD ALL de una KB en una versión nueva de GeneXus, se hace una re-escritura del 100% del código generado.  En esta re-escrit...

Cambio de versión de GeneXus - Paso 3 : Build exitoso de la KB en la nueva versión

Imagen
Paso 3 del ciclo  Metodología para el cambio de versión de GeneXus  Ya tenemos una nueva instalación de GeneXus completa y operativa y una lista primaria de las cosas que vamos a tener que testear.  Ahora llega un paso que puede ser sencillo, que es el de lograr un BUILD ALL exitoso en la nueva versión.  Dependiendo de cuan grande sea el salto entre versiones de GeneXus, puede ser desde muy difícil a trivial.  La idea aca es trabajar en una COPIA de la KB original. La forma de lograr esta copia puede ser CLONANDO la KB original o volviendo a bajar la KB en caso que se utilizando GXServer.  Habitualmente lo que hago en esta etapa es:  Si uso GXServer  -->     Create KB From Server si no                     --->    Clonar la KB original usando KBClone   Export de todos los objetos y la KB (para recurrir en caso que algo salga mal).  Abrir la KB con la nue...

Cambio de versión de GeneXus - Paso 2 - Identificar y planificar chequeos

Imagen
En esta etapa hay que hacer una lista de cuales serian los chequeos que hay que realizar y comparar entre la versión vieja y la versión nueva de la aplicación. Release Notes.  Leer las Release Notes de la versión e identificar que es lo que pueda afectar a mi aplicación.  ¿Que hay que buscar?.  Hay que leer bien todas los SACs que están en la sección "Consideraciones de compatibilidad"  de todas las Releases Notes para encontrar que nos puede afectar. Listar los objetos que puedan verse afectados por estos problemas de compatibilidad.  User Controls En el paso anterior, cuando generamos el entorno de desarrollo, comparamos la instalación vieja y la nueva de GeneXus y podemos ver los UC que cambiaron. Listar los objetos que usen los UC que cambiaron.  API de la KB.  Agregar a la lista de objetos a probar:  Objetos main con protocolo HTTP (comparar respuestas) Objetos main con protocolo SOAP (WSDL y comparar respuestas) Objetos main command line ...

Cambio de versión de GeneXus - Paso 1 - Crear el nuevo entorno de trabajo con la nueva versión

La primera etapa que hay que lograr en un proyecto de cambio de versión, es una instalación de GeneXus que tenga todo lo necesario para poder desarrollar, especificar, generar, compilar, empaquetar, instalar y probar la aplicación en la nueva versión, sin errores.  Pre-requisitos.  Leer con cuidado todos los pre-requisitos necesarios para la nueva versión e instalarlos. La información de esto, puede estar desparramada por varias paginas y diferentes sitios web.  Los pasos que realizamos aquí son:  Bajar la nueva versión y otras cosas necesarias.  GeneXus Ir al Download Center de GeneXus y bajar la nueva versión y paquetes relacionados. En mi caso tengo que bajar  GeneXus GeneXus Platform SDK GAM para Oracle GXFlow para Oracle  Releases Notes de la versión Bajar versiones compatibles de los patrones utilizados En caso de usar algún patrón de la comunidad, es necesario bajar un instalador compatible con la versión.  Workwithplus, K2btools, Ignia, ...

Metodología para el cambio de versión de GeneXus

Imagen
Hace unos días hice un relevamiento para conocer como manejaban los colegas de la comunidad los cambio de versión . Los que contestaron el cuestionario, en su mayoría hacen cambios frecuentes, actualizando desde versiones recientes.  Voy a tratar de resumir como manejamos nosotros los cambios de versión para formalizar el proceso. Hay muchos pasos que llevan mucho tiempo y son tareas repetitivas y son ideales para automatizarlas.  Etapas.  Cada proyecto de cambio de versión es diferente y ahí radica la dificultad de su formalización.  Voy a tratar de explicar en un post diferente cada uno de los pasos que realizamos:  Crear el nuevo entorno de trabajo con la nueva versión Identificar y planificar que controles vamos a hacer Build exitoso de la KB en versión nueva Hacer una instalación de la versión nueva Comparar versión vieja con versión nueva Validar y corregir warning, errores y diferencias Desarrollo con la nueva versión Instalación en Producción Eliminar In...

Metodología de actualización de versión de GeneXus.

Hace unos dias, hice un pequeño relevamiento sobre como manejan los cambios de versión en GeneXus. Me da la sensación que hay mucho para mejorar en la forma en que se hacen los cambios de version y lo primero que quería era tener la opinion de algunos. Respondieron al cuestionario 22 personas. Muchas Gracias! a quienes se tomaron el tiempo para responder. Hago un breve resumen de las preguntas y respuestas.   ¿Con que frecuencia cambian la version de GeneXus? Hay muchas situaciones diferentes.  La mayoría de quienes respondieron, dijeron que instalaban la version cuando salia o casi cuando salia. Hay gente que migra cada un periodo de 2 años y otros es mas a demanda, de nuevas funcionalidades, de bug arreglados o de estabilidad de la version.   Que proceso/metodología usan para cambiar de versión? Explique brevemente los pasos que sigue En las respuestas no hay un patrón claro de como hacer un cambio de version. Para algunos es instalar la nueva versión y convertir ...

Herramientas útiles para migraciones

Imagen
Desde hace un buen tiempo, estoy participando en un proyecto de migración de una KB grande desde GeneXus Evo3 a GeneXus 16 Upgrade4. En el proceso, hemos tenido que asegurarnos que la ejecución del sistema nuevo, es compatible con el sistema anterior. Como es un sistema bastante grande, hemos tratado de automatizar lo que podemos para hacer el chequeo mas eficiente y encontrar mas rapido las diferencias. Algunas de las cosas que comparamos son: * WSDL de los servicios SOAP del sistema * Respuesta de los servicios SOAP (cuando lo llamamos con parámetros) * Respuesta de los servicios REST * Salida de los procesos batch * Ejecución de pantallas WEB Para lograrlo, hemos estado utilizando algunas herramientas que pienso que pueden ser de utilidad a otros en proyectos parecidos. Estas herramientas son las que usamos para SoapUI.  Permite probar en forma fácil servicios SOAP (y también REST) pero en principio lo usamos mas para el SOAP. Como lo usamos?. Dado el WSDL...

Crónica de una migración con instalación complicada 7 - WSDL de servicios SOAP

Imagen
Luego de un pequeño parate (por motivos externos a nosotros) volvimos a poner en producción la aplicación generada. Ayer le tocó a los servicios web externos. No tuvimos mayores inconvenientes, tuvimos 2 cancelaciones, una fue un error 500 - Internal Server error pues teníamos: &ret= &XMLIn.ReadType(&XMLIn.ElementType, 'Imagenes_Documentos') y la variable &ret era N(1) y puede devolver hasta 128, dando un overflow. Es un error de programación que no tiene nada que ver con el cambio de versión. También nos reportaron que los WSDL tenian error, que decia This page contains the following errors: error on line 4 at column 7: Entity 'nbsp' not defined Below is a rendering of the page up to the first error. Esto se daba en la seccion:  <documentation> &nbsp; </documentation> El error no es demasiado grave, porque no afecta la operativa, pero si es bastante molesto porque nos llaman los programadores que usa...

Crónica de una migración con instalación complicada 6 - Web services y GxUI.

Imagen
Seguimos con la instalación de servicios web. GXUi.  Esta es una biblioteca que soporta algunos user controls interesantes para el desarrollo WEB. Cuando ejecuta en GX16 algunas cosas funciona diferente (por ejemplo, no se puede hacer el Resize de columnas en grillas, no aparece el menu que permite seleccionar que columnas mostrar y cuales no). Es una biblioteca que ya esta mostrando sus años y no parece adaptarse correctamente a los nuevos desarrollos, pues por ejemplo, no es responsive. Cuando busque en el Marketplace vi que la ultima version es la que soporta GX15 U10 y no parece claro que vaya a tener soporte para la 16. Vamos a tener que buscar WA temporales para salir del paso y luego encarar una reprogramación de los programas que la usen buscando alternativas al Layout, Menu, Message, Panel , Grid, etc.  Agrandamos un poco y de forma un poco inesperada, nuestra deuda técnica. Web Services SOAP.  Algunos clientes que consumen web services SOAP reportaron e...

Crónica de una migración con instalación complicada 5 - Mas errores en ejecución

Imagen
Continuación de  Crónica de una migración con instalación complicada 4  En esta última semana hemos estado bastante ocupados en la puesta en producción. Hemos logrado poner en producción algunos módulos mas, pero también aparecieron algunos problemas nuevos. GXClasses GeneXus nos mandó una nueva GxClasses.dll que corrige algunos de los problemas que había planteado en el post anterior, el OLD(&Date) en KB en español y el problema de concurrencia por usar Dictionary en vez de ConcurrentDictionary en dichas GXClasses. Hace 24 horas que estamos con esa dll en producción y no se ha vuelto a repetir el problema de encolamiento que nos tenía a mal traer. Bloqueos en web transactions.  Nos ha pasado en el ambiente de test, que las transacciones se "trancan". El síntoma que tienen los usuarios es que las pantallas quedan grises y el mouse bloqueado, pero no hay errores de javascript, ni parece estar bloqueado el teclado. Estamos trabajando para aislar este prob...

Crónica de una migración con instalación complicada 4 - Errores en ejecución

Imagen
Continúa de post anterior . Durante la puesta en producción de la aplicación generada con GeneXus 16 aparecieron algunos errores. OLD(Fecha) en KB Spanish.  Se está calculando mal el valor OLD en campos fecha en la KB si tiene el lenguaje Spanish.  Por ejemplo, si un atributo fecha tenía el valor 2019-01-02, el OLD de ese atributo queda como 2002-01-19.  Toma el año como dia y el dia como año.  Esta reportado y rumbo a corregirse.  Para lograr zafar de este error, tuvimos que dejar instalado en paralelo la versión anterior en Evo3, para darle una forma de escape a los usuarios que tenían que usar los programas que usaban OLD(). Como dije antes, no es bueno que convivan la version vieja y la nueva en un ambiente de balanceo de carga, pero en este caso no le encontramos otra salida. Lo habíamos detectado en testeo, pero no pudimos reproducirlo correctamente. Regla Serial  Si una transaccion, tiene 2 niveles y en el segundo nivel tiene u...