Migrando de GeneXus 9.0 a GeneXus X.

La idea de este post es comentar algunos de los problemas que he encontrado migrando desde Genexus 9.0 a GeneXus X. Tiene también algunos tips que pueden hacer mas fácil la vida (al menos la mia).



Los pasos que hice fueron:

1) Copiar el directorio de la KB para guardar en caso que pase algo.
Borrar de la KB el directorio de los modelos (los DATA00x). Esto es para asegurarme que no me queda ningun fuente viejo, ni ninguna dll, jar, etc de la versión anterior.

2) Entrar con GeneXus 9.0 a la KB y borrar todos los modelos que no se utilicen. Esto se hace con
File/Delete Model estando en diseño.
Conviene borrar el modelo de Backup (si existe) pues acelera la conversión.

3) Renombrar el domino Boolean si existiera y ponerle Boolean90.
En GeneXus X Boolean es un tipo de datos nativos y si existe un domino Boolean (como el que usa el Pattern WorkWith, se arma lio).

4) Borrar todos los objetos que no se utilicen y los que sean WIN.
Este paso no es indispensable, pero es muy saludable. Puede ahorrar muchos dolores de cabeza.

5) Salir de GeneXus 9.0 y compactar la KB y correr un rebuild. Tampoco es indispensable, pero sirve para ver si no hay algo mal en la KB original.

6) Abrir la KB con GeneXus X y realizar la conversión.
Si por algún motivo cancela, hay que reportarlo a Artech. En las ultimas que he hecho ha funcionado sin problemas.

7) Revisar el conversion.txt siguiendo el link "Open conversion log" en la pantalla que indica que termina la conversión.
Aunque diga Succes, hay veces que hay varios errores en la misma que conviene mirar:
* Error al convertir webservices (no se porque no los muestra como errores) en mi caso
Importing WebService from C:\Models\100\MTX1\kbdata\usrtypes\localhost_MTNet_amtwsfilsolMTWSFilSol.xml ...
>>>ERROR: Failed
>>>ERROR: Object reference not set to an instance of an object.
Successful
Importing WebService from C:\Models\100\MTX1\kbdata\usrtypes\localhost_MTNet_amtwssolxmlMTWSSolXML.xml ...
>>>ERROR: Failed
>>>ERROR: Object reference not set to an instance of an object.
pero muestra todo como Succesful. Se puede arreglar mas adelante, pero conviene conocerlo.

* HTML mal formado
Tambien hay que mirar a las correcciones que haga a programas que tengan html mal formado, para revisar y ver como quedaron las pantallas.
Converting WebPanel HDHorTaP...
>>>WARNING: Webform modified to be XHTML well-formed

* Deprecated functions.
Hay que ver si se tienen algunas funciones que eran validas en 9.0 y que ahora no se pueden usar mas.
En mi caso tenia UDF (que las sustitui con UDP)
Allownulls (hay que cambiar declarando en los atributos que puedan ser nulos)
Hidden (Si es de una Grilla Freestyle , hay que cambiar el codigo y poner columna.visible=0 y si es una grilla normal, hay que poner la columna como oculta)
>>>WARNING: 'allownulls' is a deprecated function. (Rules, Line: 12, Char: 1)
>>>WARNING: 'nocheck' is a deprecated function. (Rules, Line: 14, Char: 1)

8) Borrar los lenguajes que no se usan. Es bueno desmarcar el Chino, Japones, etc si no se van a usar.

9) Revisar las propiedades de MasterPage y Default Theme y ponerle las correctas (no se bien porque no se migran correctamente)

10) Instalar el KBDoctor y correr las consultas:
a) Objetos no alcanzables. Revisar los objetos que estan en la Categoria KBDoctor.Unreachables y borrar todos los objetos que no se utilicen, incluyendo atributos. NO BORRAR TRANSACCIONES hasta no estar seguro. Puede ser que el objeto transaccion no se use, pero si se use la tabla que esta genera.
Si hay transacciones que no se ejecutan, pero si se necesitan para la creacion de tablas, marcar la propiedad de dichos objetos, para que no las genere.

Antes del KBDoctor

Despues del KBDoctor

En una KB chica que use para la migracion , pase de 730 objetos a 634, por lo que baje mas de un 15% la cantidad de objetos a especificar y un poquito mas los que tengo que generar. Esto seguramente va a hacer mas rapido el ciclo de desarrollo.
b) Atributos sin tabla base. Revisar donde estan siendo referenciados estos atributos y quitar dichas referencias, si es necesario, crear nuevos dominos y despues borrar dichos atributos.
c) Objetos con variables no usadas. Borrar todas las variables que no se utilcen en los programas.

10) Hacer un build all y arreglar todos los errores que aparezcan (esta es la parte divertida, pero no hay receta que valga para arreglarlos. La mayoría de los problemas que tuve fueron con SDT que pasan a ser dominios en la conversión.

11) Revisar todos los warnings que aparezcan.
En GeneXus X se hacen unas cuantas validaciones nuevas (generalmente necesarias) y por lo tanto se pueden tener mas warnings que en la versión anterior. Conviene mirarlos en detalle.
Puede ser conveniente deshabilitar los warning spc0038 (no existe índice por esos atributos) y el de "Commit on Exit" por un rato hasta tener solucionados todos los problemas. Esto se hace en la propiedad del generador, que se llama Disabled Warnings.

12) Compilar todo, hasta que quede todo pipi-cucu.
Se puede tener problemas con programas externos, dll del usuario, flag del compilador, y un conjunto de etceteras grandes.

13) Empezar a programar en GeneXus X.
Usen muchos DataSelectors, Data Providers, user controls y demas que estan muy buenos....

14) Correr otras consultas del KBdoctor para poder arreglar otros errores.

15) Disfrutar la vida.

UPDATE: Conviene mirar la pagina del Wiki que explica el proceso de conversion que tiene información mas completa y detallada de la migración.

Comentarios

  1. Personalmente también exporto toda la KB antes de convertirla, de ese modo por lo menos obligo a que se lean todos los objetos. Me ha ayudado a detectar problemas originales en la KB que no son de la conversión en si.

    Hace 10 minutos me pasó de nuevo con una KB de +6.000 objetos, algún lio de los IDXs porque con un rbld lo resolví (con el "-y" por las dudas).

    BTW: En la X no existen más los IDXs :)

    También he encontrado información sobre otros casos que me encontré en el wiki: http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?5710

    ResponderBorrar
  2. Guscarr: Agrege un link en el post, para que la gente que quiera vea la pagina del wiki que esta muy completa.

    Despues de publicar esto, intente migrar 2 kb mas (un poco mas grandes) y me cancelaron en forma estrepitosa por otros motivos :(

    Hay que seguir probando.

    ResponderBorrar
  3. Hola Enrique, disculpa, te hago una consulta que no tiene nada que ver con el titulo.
    Soy novato en genexus, me podrias decir donde conseguir un ejemplo como imprimir en una impresora fiscal usando genexus?. Uso GX 9 .NET.
    Gracias.

    José

    ResponderBorrar
  4. Jose:
    No tengo experiencia en impresoras fiscales...

    Podes mirar en http://www.gxtechnical.com/gxsearch/hgenexussearch_f.aspx?impresora+fiscal,

    ResponderBorrar
  5. Gracias Enrique, apenas pueda hacer funcionar esto te envio código.

    José

    ResponderBorrar
  6. una pregunta
    no es mejor distribuir el modelo de gx9 y consolidarlo en gx10?

    ResponderBorrar
  7. Anonimo:
    El distribuir en 9.0y consolidar en la X es una opcion, pero no siempre es la mejor.

    Algunos de los problemas que puede haber:
    Si un objeto no consolida, es dificil arreglarlo.
    Demora mucho mas que convertir.
    El modelo de datos, puede quedar diferente y por lo tanto la base de datos tiene diferencias.

    En KB chicas, puede usarse (lo he usado), en KB mas grandes prefiero la otra solucion.

    Saludos.

    ResponderBorrar
  8. Hola Enrique he leido tu post y seguido todos tus cosasejos, y efectivamente sucedio cada una de las cosas que mensionas y las pude resolver, sin embargo estoy atorado en uno y ya perdi varios días dandole vuelta al asunto y no mas no queda.

    Migre una aplicación hecha en genexus 9.0 a GX X, pero tengo problema en los webpanels donde uso GRIDS y en estos grids introduzco BC, cuando estos BC son de un nivel no hay ningun problema, pero cuando son multinivel me marca un error en ejecución...

    identifique que el error tiene que ver con una propiedad de las columnas del grid "FieldSpecifier"

    Familiar.item(0).PWBenPaternoFam

    cuando lo tengo en cero me manda el siguiente error:

    javax.servlet.ServletException: java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
    at java.util.Vector.elementAt(Unknown Source)
    at com.genexus.GXObjectCollectionBase.elementAt(Unknown Source)
    at hpwsolben_impl.strup1B0(hpwsolben_impl.java:1093)

    la linea del código (hpwsolben_impl.java:1093) es:

    AV46GXV1 = nGXsfl_97_fel_idx ;
    Currentitem0 = (((SdtTPWBeneficiario_FamiliarItem)AV27benef.getgxTv_SdtTPWBeneficiario_Familiar().elementAt(-1+AV46GXV1)));
    if ( ( ( localUtil.ctol( httpContext.cgiGet( avCtlpwbennumfam_Internalname), ".", ",") < -9 ) ) || ( ( localUtil.ctol( httpContext.cgiGet( avCtlpwbennumfam_Internalname), ".", ",") > 99 ) ) )
    {
    httpContext.GX_msglist.addItem(localUtil.getMessages().getMessage("GXM_badnum"), 1, "_GXV12Q");
    GX_FocusControl = avCtlpwbennumfam_Internalname ;
    httpContext.ajax_rsp_assign_attri("", false, "GX_FocusControl", GX_FocusControl);
    wbErr = true ;
    ((SdtTPWBeneficiario_FamiliarItem)AV27benef.getgxTv_SdtTPWBeneficiario_Familiar().elementAt(-1+AV46GXV1)).setgxTv_SdtTPWBeneficiario_FamiliarItem_Pwbennumfam( (byte)(0) );
    }
    else

    Suponiendo el problema era esta propiedad decidi cambiarla por:

    "FieldSpecifier"

    Familiar.item(1).PWBenPaternoFam

    y desaparecio el error, pero ahora ya nop puedo ver la información desplegada en el grid... me aparece vacio....

    Ojala tengas tiempo de darle un vistazo e iluminarme con tu sabiduria...

    Gracias Enrique


    Juan Esteban

    ResponderBorrar
  9. Enrique, te hago una pregunta, vos decís que la mayoría de los problemas que tuviste fueron con SDTs, bueno, efectivamente al convertir desde la 9.0 a Xev1, al compilar tengo como 100 errores de SDTs, alguna sugerencia en que fijarme¿? por que en realidad, los SDT parecen estar bien formados.

    GRACIAS!
    Laura.

    ResponderBorrar
  10. Laura:
    Que problemas estas teniendo?.
    Te da errores al generar o al compilar?.

    He podido solucionar todos los problemas que encontre, pero son bastantes variados.

    ResponderBorrar
  11. Hola, pero cuando quiero migrar gxflow de 9,1 a X Ev1, me sale, Error! Private Object, que no puedo exportar el objeto, mi modelo tiene un modulo de seguridad y usuarios que me "regalo" el proveedor,

    Es decir el proveedor me ha sembrado dichos programas y ahora ya no puedo migrar a una nueva version y tengo que depender de el?

    ResponderBorrar
  12. Anonimo:
    Como dice en esta pagina (http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?3152) los Objetos Privados aun no estan implementados en GeneXus X ni en la Evolution I.

    Creo que si tenes objetos privados vas a tener que esperar un poco para migrar.

    ResponderBorrar
  13. donde esta el objeto report en el genexus x? alguien ke me ayude urgente!!!

    ResponderBorrar
  14. AB:
    Los reportes los podes hacer con procedure.


    Antes teniamos procedures (podian modificar la base de datos) y reportes (tenian salida impresa).

    Esto hacia que si teniamos que hacer un reporte que acutualizar la base de datos (por ejemplo marcar una factura como impresa) se debia crear un reporte y un procedure.

    Ahora alcanza con solo un procedure que haga las dos cosas.

    A mi me hubiese gustado, que dejaran los reportes (como son ahora los procedures o sea impresion + update en base de datos) y los procedures que no tuviera salida impresa.

    ResponderBorrar
  15. hola
    comentare un problema que tengo haver si me pueden ayudar.
    tengo una aplicacion hecha en genexus evo1 compilada en web en .net contra sql 2008, la aplicacion esta trabajando en la intranet de la empresa y trabaja sin ningun problema, pero no la hemos podido publicar a la web por medio de un servidor isa server 2006 y aque parese tener problemas de permisos o algo asi, si me pueden dar la amno de como publicar una aplicacion web por un servidor isa 2006 les agradeceria mucho..

    gracias

    ResponderBorrar
  16. Anonimo:
    Para poder ayudarte, deberias poner que error te esta dando, revisar los logs del ISA server y tambien dar una direccion de mail donde se te pueda contactar.

    ResponderBorrar
  17. Enrique, hice una conversiòn de una KB bastante grande de GX 9.0 a la Ev1. U3. El proceso de conversion le agrega al principio del nombre una letra P a los procs, una H a los webpanels, etc. En mi caso particular tengo aprox 6000 mil objetos que se encuentran en esta situación. Sabes si hay forma de evitar ese renombramiento que hace la conversion? Hay alguna forma de cambiar nombres de objetos que no sea manualmente? Gracias, Sebastian.

    ResponderBorrar
  18. Sebastian:
    No conozco la forma de evitar para que no renombre los objetos a la migracion y creo que no existe tal forma.
    Antes se podia tener varios objetos con el mismo nombre, si eran de diferente tipo, ahora no se permite mas.. por eso necesitan diferenciarlo por la letra inicial.

    En que te afecta que renombre los objetos?

    ResponderBorrar
    Respuestas
    1. Tengo una duda, para los estilos, es necesario quitarlos de la KB en Genexus 9 o no generan ningun problema en la conversion de la KB,

      Borrar
    2. Patricio:
      En la conversion de la 9 a la X, los styles no produjeron ninguna problema.

      Si tuve algunos lios con styles, cuando empece a trabajar con GeneXus Server, pues no soporta styles.
      Se pueden eliminar de forma facil como esta explicado aqui http://ealmeida.blogspot.com/2012/02/eliminar-styles-de-kb-en-genexus-x.html

      Borrar
  19. Enrique, en principio no sabía lo de la unicidad del nombre de objeto. Mi pregunta es porque quería mantener el nombre de los objetos tal como estaban en GX 9, hubiera estado bueno que la conversión solo agregara esa letra cuando los objetos de distinto tipo tienen el mismo nombre, es decir, cuando realmente se necesite. Por otro lado, tengo parametrizados nombres de objetos en tablas de la BD, creo que esto no me afecta tanto.

    ResponderBorrar
    Respuestas
    1. Si, algunas veces los nombres de los objetos que cambian traen problemas. En la mayoria no.

      Podria ser opcional en la conversion, que agregara o no la primer letra, con una validacion previa para ver si no hay duplicados y que te los hiciera renombrar antes de migrar.

      No fue demasiado traumatico para noostros el tema de los nombres con letras delante y rapidamente podes empezar a arreglarlos.

      Borrar
  20. Hola Enrique

    ¿como haces para compactar la KB?
    ¿antes de hacer rbld es necesario borrar ciertos ficheros ( ari, ver ...? ¿que ficheros borrar?
    Gracias

    Un saludo, Victor

    ResponderBorrar
  21. En GeneXus 9.0, existe un utilitario para compactar las KB, que reduce el tamaño de los .DAT y despues los reindexa. Lo podes bajar en http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,8,8,O,S,0,,1670s
    Usalo con cuidado, hace siempre un backup previo de la KB.

    En la X, la mejor forma de compactar tu KB es distribuirla y conslidarla en una KB vacia que tenga las mismas propiedades. Ojo que puede cambiarte algun nombre de tabla, el orden de algunos campos y pocas cosas mas...

    ResponderBorrar
  22. Hola
    Donde puedo conseguir informacion o tutorial de genexus 9.
    Mi email jo2006na@hotmail.com
    Gracias.

    ResponderBorrar
    Respuestas
    1. Este comentario ha sido eliminado por el autor.

      Borrar
    2. No se donde se pueden bajar los cursos de 9.0.

      Los de Genexus X, podes hacerlos en http://training.genexus.com o en http://www2.gxtechnical.com/portal/hgxpp001.aspx?15,5,298,O,S,0,MNU;E;38;33;MNU;,2613

      Borrar
  23. Buen día tengan ustedes, al momento de realizar la conversión de mi KB en genexus 9.0 a genexus evo 1, me salen estos dos errores, bueno no solo para estos dos objetos, sino para muchos otros, pero no los pondré, por que sería una lista enorme. Al principio me salio error por tener Transacciones Privadas, pero ya lo solucione. ahora tengo estos problemas. Haber si alguien puede ayudarme a solucionarlo. Gracias.

    Converting Web Panel 'HObjExt' ... Failed
    >>>ERROR: Failed processing object properties
    >>>ERROR: 'Artech.Genexus.Common.CustomTypes.WebPanelReference' invalid value for property 'MasterPage'.

    Converting Transaction 'TActJur' ... Failed
    >>>ERROR: Failed processing object properties
    >>>ERROR: 'Artech.Genexus.Common.CustomTypes.WebPanelReference' invalid value for property 'MasterPage'.

    ResponderBorrar
    Respuestas
    1. Kelvin:
      El error parece ser porque un webpanel y una transaccion hacen referencia a una masterpage que no existe o que tuvo problemas al convertirse.

      Lo que podes hacer es revisar si la MasterPage se convierte sin errores.
      Si tiene errores, deberias arreglarlos y volver a convertir.

      Si no fuera este el caso, podes sacarle la masterpage a los objetos con problemas, convertirlos y luego volver a ponerle la masterpage.

      Espero que te sirva,
      Enrique

      Borrar
    2. Lo raro es que ya intente cambiar sus propiedades, colocando en MaterPage: (none), y al verificar otros objetos, los cuales tuvieron una conversión exitosa, me percate de que estos tenían estas propiedades señalando Master Page: "MPPrompt : Master Page Prompt". Intentaré realizar otras cosas para solucionar este problema. de todos modos, Gracias por tu tiempo.

      Borrar
  24. >>>ERROR: Could not connect to GXpublic. It may not have been installed during GeneXus setup. You may need to reinstall GeneXus and/or GXpublic.
    :::::::::Knowledge Base Conversion:::::::::Failed
    Could not connect to GXpublic. It may not have been installed during GeneXus setup. You may need to reinstall GeneXus and/or GXpublic.

    Quiero pasar de Gx 9 a Gx15trail y me sale ese error

    ResponderBorrar
  25. >>>ERROR: Could not connect to GXpublic. It may not have been installed during GeneXus setup. You may need to reinstall GeneXus and/or GXpublic.
    :::::::::Knowledge Base Conversion:::::::::Failed
    Could not connect to GXpublic. It may not have been installed during GeneXus setup. You may need to reinstall GeneXus and/or GXpublic.

    ResponderBorrar
  26. >>>ERROR: Could not connect to GXpublic. It may not have been installed during GeneXus setup. You may need to reinstall GeneXus and/or GXpublic.
    :::::::::Knowledge Base Conversion:::::::::Failed
    Could not connect to GXpublic. It may not have been installed during GeneXus setup. You may need to reinstall GeneXus and/or GXpublic.

    Asi podre recibir los comentarios

    ResponderBorrar
  27. Mi correo de contacto jaime_j90@hotmail.com quiero hacerle consultas sobre la migracion desde gx9 a gx 15, lo he intentado y no me ha resultado enviando un error de un programa que no tengo instalado y ya lo instale

    ResponderBorrar
  28. Buenas tardes Enrique, mi nombre es Nicolas. Muchas gracias por este aporte, muy útil realmente.
    Estuve utilizando la Navigation Comparer tool y veo que, aunque te genera los *.text files para Evolution 3, la documentación nunca hace referencia a Evolution 3. ¿Tú utilizaste esta tool para hacer la comparación de navegaciones?. ¿Habrá que abrir la KB en Evo2 y obtener las navegaciones para luego ir a Evo3?. Muchas gracias desde ya.

    ResponderBorrar
    Respuestas
    1. Para comparar Evo2, Evo3 y GX15, uso el KBDoctor, que permite generar los txt de la navegacion en forma un poco mas facil (segun me parece a mi).

      Borrar
    2. Gracias Enrique por la respuesta. Pero decís que utilice KBDoctor en Evo3 para comparar esos archivos contra los archivos generados en 9.0 por el Navigation Comparer? Entiendo que los formatos son diferentes, cómo comparo?. Gracias nuevamente

      Borrar
    3. son formatos parecidos, pero no iguales.
      Proba y contanos.
      El comparador de navegaciones, si puede generar txt de Evo3. Tal vez tengas que generar algun cambio en el xslt para que tome los formatos.

      Borrar
  29. Sr. Enrique estoy haciendo un lab para la migración de mis kbs. Desde 6.1 to 9.0 to 10evo3.
    La pregunta es cuando importe la Kb a la 10evo3 hay una properties ( significant object name length) seteada a 128. La quiero pasar a 8 como tenia en la 6.1 y se cambia automáticamente a 128. Probe con varios valores hasta que quedo en 12. El motivo del cambio es que tengo el generador cobol 400.
    Le agradezco mucho si me puede orientar.
    Gracias.

    ResponderBorrar
    Respuestas
    1. Sergio:

      Genexus no deja cambiar esa propiedad, si se tienen objetos con largo mayor. O sea, si tenes un objeto cuyo nombre es de largo 12, te va a dejar bajarlo hasta 12 y no mas que eso.
      Por eso, te conviene revisar los SDT y otros objetos que te agrega la migracion y borrarlos para que no molesten y fijarte hasta donde deja setearlos.

      En el KBDoctor hay una opcion para recortar el nombre de tablas y atributos a un largo dado, que tambien podria usarse para objetos (no lo tiene hoy, pero es muy facil hacerlo).

      Avisame si pudiste solucionarlo por el metodo 1) y sino te ayudo con el kbdoctor.

      Enrique

      Borrar
    2. Enrique:
      Gracias por la respuesta.

      Aplique el método 1, tenia un solo SDT llamado messages. lo borre pero sigo con la misma problemática.
      Lo que me preocupa son esos objetos que agrega la migración, están documentados,
      se pueden borrar sin problemas para poder limpiar la KB?

      Me da la impresión que voy a tener que estudiar un poquito el KBDoctor .
      La ultima, en 6.1 tenia una función llamada confirm a secas. Ahora no funciona mas ?
      Hay que reescribirla en 10ev3 ?

      Gracias Enrique !!

      Borrar
    3. Enrique, sin abusar de su profesionalidad, le pido las indicaciones para utilizar el KBdoctor
      así encuentro que nombre de objeto es mayor a 8 caracteres.
      Tengo instalada la versión de kbdoctor 10.15.0.

      Gracias.

      Borrar
    4. Sergio:

      El KBdoctor, tiene una opcion (NO VISIBLE EN LA VERSION LIBERADA) que permite acortar el nombre de todos los objetos que tengan nombres mayores a 10 y las tablas mayores a 8 caracteres. No tiene una opcion para detectar solo los objets de nombres largos.

      Lo que podes hacer es usar la opcion de ListObjects, pasar el resultado a una planilla electronica y en la planilla agregar una columna con el Len() de la columan ObjName.

      Ordenando por esa columna, deberias encontrar facil los objetos que buscabas.

      Enrique

      Borrar
  30. Sr. Enrique.

    Eureka !! el problema de la properties ( significant object name length) eran los subtipos subtipos.
    Cambie los nombre y se soluciono el problema.

    Gracias sigo en la lucha con la regla confirm.
    ejemplo:
    call (prg) if confirm;

    //Sin paréntesis ni nada.

    Gracias.


    ResponderBorrar

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

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

Aplicación monolítica o distribuida?

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