Migrar a GeneXus 18 (+20.000 objetos después)

Hemos realizado unas cuantas migraciones a GeneXus 18, de muy diversos tipos. La idea es contar algunas de las diferencias encontradas para que a otros le sea más fácil. 

Como siempre, y como no esta recomendado, hemos realizado algunos cambios para aprovechar nuevas funcionalidades. 

Migración de .NET Framework a .NET Core. (.NET Core)

El generador .NET Framework va a ser discontinuado, por lo que conviene empezar a realizar la transición de uno a otro. El mayor problema que tuvimos aquí, es con el código C# externo que tenemos en la aplicación.  La mayoría de los cambios fueron por temas de namespaces cambiados y otros por el uso de WCF (Windows Communication Foundation). 
También tuvimos que re-programar funcionalidad para manejo de PDF (concatenar, firmar, reemplazar dentro de PDF) porque usábamos un componente que no tiene soporte en .NET Core. 

No carga la grilla - Smooth y Automatic Refresh = NO (.NET Framework)

En varios paneles, que estaban como Smooth y tenían Automatic Refresh = NO vimos que no se cargaban datos. Esto era porque tenian el botón de CONFIRMAR asociado a un evento Enter, y el mismo no hacia un refresh automático como en versiones anteriores. 
Parece razonable que si le ponemos Automatic Refresh = NO , el Refresh sea manejado por el usuario, por lo que procedimos a cambiar esos objetos agregando un Refresh o un Grid.Refresh() en los eventos que lo necesitaran.  El arreglo es trivial, pero es muy engorroso encontrar los objetos que tienen este problema. 

Carga de registros duplicados (.NET Framework)

En algunos casos que teníamos Smooth y Automatic Refresh = NO, cargaba registros duplicados. 

No pude determinar bien cual era la secuencia de disparo de eventos que lograba ese efecto. En todos los casos, lo que vimos es que tenia evento LOAD, pero no tenia un load explicito. 

Agregando el load al evento LOAD o Grid.Load, no se duplicaban los registros. 

Command line no terminan cuando llaman a servicios (Java)

Teníamos procesos batch, que llaman a servicios y luego terminan.  Nos pasaba que quedaba abierto y si bien el proceso no hacia nada, no terminaba nunca (o casi nunca). 

Agregamos código nativo para forzar el cierre.  Parece que hay alguna conexión que no se cierra correctamente y por eso no puede cerrarse. 

Mejoras

Deploy

Al migrar a GX18, mejoraron mucho las tareas de Deploy. Son más rápidas y además permiten mejor personalización en lo que se distribuyen en las deployment units. 

Docker. 

Algunas aplicaciones las pudimos instalar en Docker / Kubernetes con Java y con .NET Core. 
Facilita mucho la operación de las aplicaciones el darle un entorno conocido a los administradores. 

Observabilidad

Algunas de las aplicaciones les agregamos OpenTelemetry para poder consultar los errores, trazas y logs de los mismas. 


Que nos queda por hacer

  • Migrar todo lo de .NET Framework a .NET Core 
  • Migrar todo las pantallas que tienen la propiedad Web User Experience = Previous Version Compatible a Smooth. Esto cambia la forma en que se disparan los eventos y necesita una revisión cuidadosa y mucho testeo. 
  • Migrar servicios de SOAP a REST usando el objeto API. 


Comentarios

  1. Estimado,
    Estoy queriendo migrar mi KB de .NET Framework a .NET y no logro que Genexus encuentre el tns para conectarse a una base de datos Oracle, usando IIS. Solo funciona si copio el archivo tsnames.ora en la carpeta bin del modelo, pero no mediante las variables de entorno del sistema.

    Aclaro que no tengo problema si lo corro con Kestrel como web server.
    Has tenido un problema similar?
    Gracias,
    Saludos

    ResponderBorrar
    Respuestas
    1. Con la variable TNS_ADMIN apuntando al directorio donde esta el tsnames.ora nos funciono correctamente, luego de setear el valor de la variable de ambiente y rebootear la maquina.

      Borrar
  2. Hola, solo como información

    Donde indicas esto,
    "Carga de registros duplicados (.NET Framework) y Automatic Refresh = NO, cargaba registros duplicados. "

    nos ocurre cuando en la grilla se utiliza un atributo formula (count), para solucionar se debió contar en forma manual con un for each

    Se migro todo nuestro sistema a Genexus 18 con .net 8 ( ex net core) , lamentablemente cuando supera aprox. 300 usuarios se cae por error de memoria, parte del error
    "System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. Stack: at Interop+ZLib.Deflate(ZStream*, FlushCode)"

    Solución 1 , se cambio el hostinmodel a "InProcess" funciona bien, pero los excel con rango de fechas por ejemplo de 2 meses por ejemplo no funciona, (utilizo httpresponse y proc. main)

    Solución Final (Transitoria), fue pasar a net framework y todo funciona en forma correcta.

    Saludos

    Leonardo Zepeda A.

    ResponderBorrar
    Respuestas
    1. Gracias por comentar tu experiencia Leonardo.
      Viene bien saber que problemas se pueden encontrar y que ya encontraste algunas soluciones.

      Borrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.