lunes, 31 de julio de 2017

Migraciones Win de modelos #GeneXus

¡Hola a todos!

En este artículo quiero compartir algunas lecciones aprendidas de dos migraciones Win (también con componentes web) de Genexus 8 y 9 a Evolution en las que he participado en este último tiempo. Aunque algunas son lecciones sobre aspectos técnicos, me interesan tembién otros aspectos que quizás puedan verse cómo reflexiones y/o críticas al uso de KBs (Knowledge Bases) GeneXus Win y sus "consecuencias" en la actualidad.

Tiempo de lectura estimado: 10-12 minutos.


Comencemos por los temas técnicos

Una de las migraciones consistió en llevar una KB de Genexus 9 Win-VisualBasic y Web-Java a Genexus Evolution 3 Java. La KB era mayoritariamente Win, ya que la cantidad de objetos Web en su momento no alcanzaba el 10%.
Era una KB de unos 3000 objetos y el tiempo total en horas de trabajo fue algo menor a las 1500 hs. Hubo una gran dedicación destinada al testing y también a algunos puntos funcionales que estaban solucionados con particularidades que permitia VB y que debieron implementarse en Java logrando soluciones similares a las que ya existían. Mas allá de eso, el resto de las horas fueron dedicadas a las actividades esperables/planificadas teniendo en cuenta nuestras experiencias anteriores y las compartidas por colegas en la web. Por ejemplo, Enrique Almeida en su artículo Migrando de GeneXus 9.0 a GeneXus X compartió en su momento información relevante y útil al momento de planificar una migración de este tipo (les recomiendo ese artículo).

La otra migración (en la cual aún estamos trabajando) consistió en llevar una KB de Genexus 8 Win y Web (Java en ambos casos) también a Evolution 3 Java. En este caso la KB está repartida casi equitativamente entre objetos Win y Web. 
Esta KB cuenta con unos 3500 objetos, como mencioné anteriormente aún no hemos terminado la migración pero estimamos rondar las 1500 hs de trabajo ya que a pesar de ser más objetos que la otra KB, el ambiente win de esta KB ya genera Java, lo cual minimiza la posibilidad de encontrarse con sorpresas técnicas.

En ambos casos, la versión final de Genexus en la migración fue Evolution 3 pero no necesariamente porque fuera la última versión disponible de Genexus, si no que era y es la última versión de Genexus con generador Win! Más adelante volveré sobre este tema porque no es para nada menor y es la razón que me motivó a hacer esta publicación.

A continuación dejo algunas de las soluciones que encontramos a ciertos inconvenientes que surgieron en estas dos migraciones, más abajo dejo ciertas consideraciones que tuvimos en cuenta al momento de realizar el testing de lo migrado, luego algunos puntos interesantes de ciertos artículos de la wiki de Genexus y finalmente unos enlaces por si quieren ver datos y/o sugerencias sobre otras experiencias de migraciones.

Soluciones, sugerencias y el proceso


Manejo de archivos de tipo Excel: Se utilizaban las funciones GXOffice para este tipo de archivos y se pasó a utilizar el tipo de datos ExcelDocument, con los métodos Open(), Clear(), Cells(), Save(), Close(). Y para mostrar los archivos en pantalla se utilizaó el método openDocument().

Manejo de archivos de tipo Texto: Se utilizaban funciones específicas para VB como OpenTxt, ReadTxt, etc. y se pasó a utilizar las funciones para manejo de archivos ASCII tales como DFROpen (lectura) y DFWOpen (escritura).

En el caso de la migración de VB a Java hubieron problemas específicos como el manejo de transacciones con más de dos niveles y el modo de trabajo a pantalla completa que tuvieron que ser resueltos cambiando la modalidad de trabajo de los usuarios.

Aquí listo algunas sugerencias tomadas de nuestra lista de pasos a seguir al momento de la migración. No es una lista exhaustiva, simplemente son puntos que considero relevantes. Pueden ver una lista más detallada en el artículo que comenté al comienzo de Enrique Almeida Migrando de GeneXus 9.0 a GeneXus X en el que brinda bastante detalle de los pasos que siguió y además hay varios comentarios en ese post con preguntas y respuestas que pueden resultar útiles.
  • Eliminar todos los modelos de la KB original (previamente respaldada) dejando solamente diseño
  • Eliminar todos los objetos que ya no se utilizan
  • Pasar primero a Evo 2 y después a Evo 3, de lo contrario da algunos errores de conversión
  • Las Transacciones con un solo nivel no pueden tener en el form simplemente una grilla, por lo tanto es necesario pasar dichas trn a dos niveles
  • Las Transacciones deben tener el evento Enter asignado, de lo contrario da error
  • Una alternativa para quitar algunas de las reglas obsoletas puede ser generar de la KB en gx8/gx9 un xpz para luego cambiar la ocurrencia de las palabras como hidden por //hidden, nocheck por //nocheck, allownulls por //allownulls y udf por udp.
  • Cambiar las ocurrencias de losfocus por isvalid
  • En caso de tener un dominio de nombre Boolean, cambiar el nombre (ej. Boolean90) para que no haya conflicto con el tipo de dato Boolean de Evolution 
En cuanto a los pasos que hemos seguido en nuestro proceso de migración, éstas han sido las distintas etapas:
  • Planificación (ej. armado de ambientes, investigación y repaso de histórico de migraciones)
  • Conversión inicial (ej. pruebas iniciales y documentación de errores)
  • Segunda conversión (ej. builds y eliminación de warnings, comparación de navegaciones)
  • Conversión final (ej. KB migrada funcionando, documentación actualizada) 

Consideraciones al momento de realizar el testing

  • Pruebas representativas: Inicialmente realizamos pruebas sobre casos representativos (ej. Trn con Cabezal, Grilla, Tabs, Combos, Check-boxes). Esto nos permitió tener una lista de problemas-soluciones conocidas y facilitó su detección y corrección en el resto de la KB
  • Utilizamos planillas Excel independientes por cada uno de los grandes módulos del menú principal, bajando de nivel en el árbol de ejecución en cada uno de estos módulos
  • Separamos en "bloques" cada Excel de pruebas, agregando la fecha de trabajado en una columna correspondiente a la etapa de pruebas. Esto nos resultó útil ara tener en tiempo real una idea del avance de las pruebas
  • Estado de la BD: antes de realizar las pruebas de procesos grandes/importantes (ej. Liquidaciones) respaldamos la BD para luego poder volver al estado inicial en caso de ser necesario
  • Registro de errores: esto es tan básico como fundamental. Registramos los erroes, cómo se llegó a ellos para poder reproducirlos al realizar el testing posterior a la corrección y finalmente cómo los solucionamos (algunos de ellos luego pasan a formar parte de las lecciones aprendidas o simplemente del log de migración)

Puntos interesantes de ciertos artículos sobre migraciones que involucran GX-9

    • Date format, Time Format and Decimal Separator
    • Client side validation
    • Default Join Type changed
    • Consolidation distribution file (xpz) from previous versions 
    • Design Model Properties: Compatibility
    • Prototype/Production Model Properties: Decimal Separator, Date Format, Time Format, Join Type
 
Converting a KB From GeneXus 9.0 (or prior) To GeneXus X / X Evo 1 / X Evo 2 / X Evo 3


Pros y contras de las migraciones (Win) gracias a GeneXus


El esfuerzo de migración estimado de ambas KB fue menor al 5% del esfuerzo acumulado de desarrollo y mantenimiento de cada una de ellas, con lo cual Genexus suma varios puntos a favor en este aspecto.

Otros aspectos positivos de la migración a la versión GX-Evo3 fueron las mejoras implícitas que provee el uso de Genexus en sus versiones Evolution, tales como poder trabajar sobre los objetos mientras se realizan builds, así como la facilidad del build automático al momento de darle Run a un objeto main de la KB. Particularmente en la KB que inicialmente estaba en GX-9 VB, por limitaciones de VB en cuanto a tamaño, la aplicación se conformaba por varios objetos main (exe) y eso dificultaba la operativa al momento de generar una nueva versión. En el caso de la KB Java este aspecto no fue relevante.
En cuanto a las contras, al menos desde mi punto de vista no hay nada para reprochar respecto a los ambientes Win o Web propiamente dichos, sería muy difícil encontrar cuestiones negativas en lo que respecta a características de ambiente, del IDE o de los generadores de Genexus en su versión Evolution respecto a sus versiones GX-8 o GX-9.
El gran problema es que hay un techo en la versión a la que se puede alcanzar con una KB Genexus en ambiente Win, y es Evolution 3! En mi opinión esto realmente es un debe de Genexus para con sus desarrolladores y por consiguiente con sus respectivos clientes, pues hoy en día hace ya unos 7 meses que contamos con la versión Genexus 15 que tiene avances significativos en varios aspectos excepto que no cuenta con generador Win!!!

Concluyendo...


Genexus ha permitido lograr la escalabilidad de los sistemas a lo largo de los años sin perder la base de conocimientos, las reglas fundamentales del negocio y aumentando no solo las funcionalidades brindadas, sino también evolucionando según los cambios tecnológicos que se han dado.

Sin embargo, en el caso de los modelos Win que suelen ser grandes sistemas y con cierta complejidad ya que llevan años evolucionando, todo esto que venia siendo positivo y un beneficio invalorable de utilizar Genexus se va por la borda! Si tienes un ambiente Win debes estancarte en Evo3 o bien duplicar la KB para seguir avanzando en Web y Smart Devices.

Según tengo entendido, Genexus alude su "estancamiento" de los generadores Win a cuestiones de plataformas y a tendencias tecnológicas, pero deja de lado la necesidad y la realidad comercial tanto de quienes desarrollan aplicaciones con Genexus como a los clientes actuales de aplicaciones Genexus Win.
Si consideramos migraciones como las mencionadas al comienzo de este articulo, la dedicación y esfuerzo de lo que significaria migrar de Win a Web sería realmente considerable respecto a migrar a una nueva versión manteniendo el entorno Win.

Desde el punto de vista de que hoy en dia Genexus practicamente no da soporte para la versiones 8 y 9, resulta positivo actualizarse a la version Evo3, sin embargo teniendo en cuenta que Win quedó estancado en Evo3 y ya estamos en GX-15, genera cierta incertidumbre del nivel de soporte que brindarán a futuro para los generadores Win, pues bien o mal formarán parte de una vieja versión de Genexus.

Ojalá en el corto o mediano plazo Genexus tenga la posibilidad de replantearse este tipo de situaciones a las que se enfrentan muchos de los que desarrollan y mantienen sus aplicaciones con Genexus para ambientes Win y la tecnología les permita tomar la decisión de seguir manteniendo y actualizando sus generadores Win en versiones futuras.

¡Hasta la próxima!

PD: Espero les haya resultado interesante y útil el artículo. No duden en dejar sus comentarios y/o sugerencias sobre sus experiencias en migraciones de este tipo, o bien alguna opinión respecto al tema "la evolución de Genexus Win en Evolution".

2 comentarios:

  1. Hola Guillermo. Excelente articulo. Dos preguntas rapidas.
    1. si voy a migrar de 8.0 Java Win a Ev3 Java Win, el clean-up de la KB me recomiendas hacerlo en la 9? o de una vez en la 8?
    2. Como identifico objetos que no estan en uso en la 8 o la 9?

    Desde ya, gracias.

    ResponderEliminar
    Respuestas
    1. Hola Jose,
      muchas gracias por el comentario!

      Aquí va mi opinión respecto a tus dos preguntas.

      1. Creo que lo mejor seria hacer el clean-up directamente en 8, eso evitará entre otras cosas que tengas que solucionar problemas en 9 que quizás después ni siquiera sean cosas que te sirvan.

      2. Para identificar objetos que no estan en uso en 8 y 9, la única manera que conozco es listar "Callers tree" (Tools >>> Browsers) y analizaar los que no son llamados por nadie. Hay que tener cuidado con las transacciones, porque muchas veces se usan transacciones simplemente para definiciones. También pueden haber procedimientos que sean utilizados como procesos nocturnos y que sean main, esos probablemente no tengan llamadores. También estaría bueno revisar atributos y dominios, como recomienda en su blog Enrique Almeida en un post "Haciendo limpieza en la KB"
      (http://ealmeida.blogspot.com.uy/2012/03/haciendo-limpieza-en-la-kb.html).

      Espero haber aportado en tus inquietudes, después cuentame como resolviste estos temas, para seguir compartiendo opiniones y experiencias.

      Saludos!

      Eliminar