Mostrando las entradas con la etiqueta GX15. Mostrar todas las entradas
Mostrando las entradas con la etiqueta GX15. Mostrar todas las entradas

jueves, septiembre 13, 2018

Como implementar módulos en GX y no morir en el intento (Parte 2)

Después de haber sufrido un poco en "mi primer experiencia al intentar modularizar una kb" levante un respaldo y arranque nuevamente a modularizar mi kb.  Los problemas que voy a comentar se presentan por partir de una kb mediana que ya tiene años y el sistema atiende a todo el pais por lo que es algo relativamente importante. (Tengo que lograr que el cambio sea trasparente)

Básicamente me puse a pensar como hacer para modularizar mi kb sin tener que hacer un alto en el desarrollo y sin tener que dedicar mucho tiempo, la realidad es que la kb se encuentra en constante desarollo y en la actualidad tiene tres líneas de desarrollo que implican tocar bastante el código existente.

Necesito lograr comenzar a modularizar "rompiendo" lo menos posible mi kb e ir liberando estos cambios aprovechando el cronograma de trabajo establecido.

Quiero aprovechar las instancias de testing para no tener que volver a probar todo luego de pasar a modulos ya que como todos saben es complejo encontrar el tiempo para hacer grandes cambios y quiero aprovechar los cambios solicitados para poder mejorar el diseño de mi kb.

Aprovechando los tiempos que tengo decidi comenzar a modularizar sin hacer un análisis exaustivo de mi kb si no que arranque por las cosas que rompen los ojos y que son fáciles de pasar a un modulo (Ej. funciones de validación de CI o funciones varias que siempre tenemos en nuestra kb).

Para ilustrar y poder contar lo que hice voy a partir de una kb llamada MiKB. Lo que hice en el día de hoy para comenzar a modularizar y dejar andando mi kb es lo siguiente:

a) Hice una nueva Kb llamada MiKB_CORE: esta kb es la que tendra los modulos que luego voy a usar de MiKB. (Quiero trabajar como si fueran paquetes y tener un diseño de paquetes a futuro)

b) Exporte los objetos que fui seleccionando de MiKB y los importe en MiKB_CORE

c) Hice los módulos según el diseño que quiero implementar en la modularización de la KB. ej. utils, common, mensajes, etc.

d) Pase los objetos a cada Módulo según lo que correspondiera dejando público solo lo que corresponda, por ejemplo las transacciones las puse "Private" ya que desde MiKB quiero que solo vean los procedimientos en cada paquete y no las TRNS (Esto en el arranque).

e) Luego de luchar con algunas cosas que voy a poner en las conclusiones de este post genere un paquete por cada módulo.

f) En mi kb origen (MiKB) cargue estos módulos, al hacer esto los objetos que había exportado ya no están en MiKB y en el código hace referencia a los módulos.

g) En la kb origen (MiKB) borre las trn que pase a módulos en la kb MiKB_CORE

h) Hice "rebuild all" y verifique que todo quedara integrado, por ahora solo hice alguna pruebas unitarias teniendo en cuenta las funcionalidades que pase a los módulos.  Subí todo a GXserver y por ahora todo ha compilado y ha quedado instalado sin problemas.

Conclusiones positivas:

a) Al revisar mi kb pude aprovechar a realizar limpieza de objetos apoyándome en KBDoctor. Con la limpieza y la modularización pude eliminar 20 objetos por estar duplicados o deprecated, aparte de pasar 50 objetos a los módulos.

b) En la kb de los módulos aproveche para mejorar el código de los objetos que importe de la kb origen y pude unificar comportamiento de algunos objetos que tenían mas de 10 años.

c) Pude modularizar y visualizar la potencia de tener todo en módulos, aparte de comenzar con el re-diseño de mi KB después de 10 años de estar metiendo mano de una forma no muy organizada.

El resultado de mi primer etapa de trabajo es la siguiente:

KB CORE con los Módulos                                 


KB que utiliza los Módulos:

En síntesis me encuentro motivado y con ganas de seguir modularizando mi kb  para alcanzar un nuevo nivel de GeneXus Modularity Maturity Model.





















miércoles, septiembre 12, 2018

Como implementar módulos en GX y no morir en el intento (Parte 1)

Este es mi segundo intento de comenzar a trabajar con módulos en GeneXus y la verdad que mi experiencia no ha sido del todo buena dado que me he topado con algunos bugs que me están enloqueciendo. 
Según el GeneXus Modularity Maturity Model  me encuentro en el nivel 1 (Sin módulos) por lo que estoy intentando comenzar con los módulos pero no dentro de la kb que quiero modularizar, lo que estoy haciendo es tener otra kb en donde creo los módulos y luego trabajo con los módulos en la kb origen. 
Quiero aclarar que trabajando con módulos dentro de la misma kb no tengo problemas mayores pero quiero trabajar con los módulos como si fueran paquetes dado que quiero tener paquetes separados con las cosas que son comunes en varias kbs. 

Mi idea es poder distribuir los jar de cada paquete (modulo gx) en cada aplicación, me encantaría poder hacer un diagrama de paquetes con los diferentes módulos e integrarlos según mis necesidades. 

Esto dado que en la actualidad tengo 5 kbs que tienen objetos comunes y quiero poner esos objetos en un modulo y usar desde las 5 kbs ese modulo. Aparte de querer modularizar una kb grande para que me quede mas sencilla y aprovechar los beneficios de modularizar.

Básicamente en cuanto al trabajo estoy utilizando GX15 U9 y lo que hice fue crear una kb nueva en donde hice un par de módulos, desde la kb origen fue exportando objetos mediante xpz y los importe en la kb donde tenía los módulos.

En la kb de los módulos renombre estos objetos y los organice según mis necesidades, también me quedaron algunas carpetas dentro de mi módulo con el mismo nombre de la kb origen sin sospechar el resultado que iba a obtener al cargar este módulo en mi kb origen.

El resultado que obtuve al cargar el modulo en la kb origen fue el siguiente:

a) Un objeto que exporte de la kb origen llamado PMiObjeto a la kb de módulos en donde lo renombre a miobjeto y al crear el módulo quedo como mimodulo/miobjeto. Al cargar el modulo a la kb origen me cambio el código en toda la kb en donde estaba PMiobjeto.call(....) por mimodulo.miobjeto.call(...). Esto no es un gran problema pero me hubiera gustado poder hacer el cambio en el código a demanda y que no lo hiciera de forma automática dado que al objeto del modulo le había cambiado las rules por lo que tuve que tocar en varios objetos dado que al cambiar el código tuve que cambiar la llamada por el nuevo parámetro. Lo otro que me llamó la atención fue que me borro el objeto PMiObjeto de la kb.  Tengo que admitir que seguramente esto este documentado y sea que yo me lo comí al tirarme a hacer estos cambios dado que si no es así es un bug de GeneXus.

b) Una carpeta que exporte la puse adentro de mi modulo y al cargar el modulo en la kb origen me cambio en todos los objetos (255) que estaban en esa carpeta la propiedad Module/Folder por el nombre que esta adentro del modulo pero que no existe en la estructura de mi kb. Básicamente por la estructura de mi kb no puedo ver esos 255 objetos y al generar quedaron con el nombre del paquete adelante cuando en realidad no corresponde. 

Seguramente lo que esta pasando al exportar un objeto de la kb origen a una kb de modulo y luego cargar el modulo en la kb origen GeneXus deje algúna referencia en el objeto que haga que se tenga este comportamiento. 

Espero que esto sea un bug de GeneXus y que esto se arregle a futuro para no volver a pasar por esto, al día de hoy tuve que levantar una kb de respaldo y estoy haciendo todo nuevamente. 

Dejo estos comentarios para ir compartiendo mis experiencias, de todas formas no me voy a dar por vencido y voy a continuar intentando modularizar mi kb y no morir en el intento.












jueves, mayo 03, 2018

GeneXus - Cannot create MSHTML document - SOLUCION!!!

La verdad que tuve este problema que me dio al ejecutar GeneXus 9 en un windows 7 en el cual también tenía instalado la GX ev 3 y GX 15. No tengo mucha idea del problema pero al querer ejecutar GeneXus 9 me daba el problema. Por suerte el amigo Cristian dejo una solución que resolvió mi problema. El post es el siguiente: https://www.lawebdelprogramador.com/foros/GeneXus/734321-Cannot-create-MSHTML-document-SOLUCION.html Básicamente hay que descargar lo siguiente: https://www.microsoft.com/en-us/download/confirmation.aspx?id=8956

miércoles, febrero 22, 2017

'GeneXus' version 1.2.8.108986 cannot be downloaded

Estuve haciendo pruebas con los módulos de GeneXus y haciendo limpieza borre toda la carpeta Modules_v1.0 que es donde se almacenan todos los módulos de GeneXus mas los que estamos creando. Básicamente ahí están toda la información de la diferentes versiones de los paquetes que vamos creando.

Al hacer esto para poder generar nuevamente mis paquetes me da el siguiente error:

========== Rebuild All started ==========
========== Deploying Module 'GeneXus' started ==========
error: 'GeneXus' version 1.2.8.108986 cannot be downloaded. Is it a built-in module? Try execute "genexus.exe /install" command. Otherwise, you need to update the module version to an accessible one.
Deploying Module 'GeneXus' Success
========== Target Environment update started ==========
Target Environment update Success
Building changed objects list
========== Specification started ==========
Processing subtype groups ...

En un equipo me funciono haciendo el "genexus.exe /install" y en otro equipo tuve que copiar a mano el archivo: GeneXus_1.2.8.108986.opc que se encuentra en la carpeta de instalación de GeneXus ("C:\GeneXus\GeneXus15\Modules")  a la carpeta: "C:\Users\urulinux_win7\AppData\Roaming\GeneXus\GeneXus\15\Modules_v1.0\GeneXus_4f454e73-7d8f-4a0f-908a-1a355f3634a5\1.2.8.108986\Platforms\JavaWeb\".

Les dejo este pique ya que me enloquecí para solucionar este problema, sin dudas que el equipo en que no funcionaba tendría algún problema con la instalación pero haciendo eso quedo funcionando.