Receta: Como limpiar una KB GeneXus

Ingredientes


Preparación

1 - Crear un punto de retorno seguro. 

Las tareas de limpieza pueden borrar mas cosas de las deseadas, por lo que es importante crear siempre un punto seguro de retorno, por si algo sale mal. 
Lo recomendable es hacer un Export de toda la KB y sus propiedades con GeneXus. 
Ademas del export, es bueno hacer un Versión congelada y ponerle el nombre "Antes de la limpieza".  View / Versions / (botón derecho) Freeze 

2 - Revisar la KB y Comprimir la KB. 

Salir de GeneXus y desde la linea de comandos, usar las KBTools y ejecutar
KBTools/KBCompress/KBCompress.cmd 

Dependiendo el tamaño de la KB, puede demorar bastante, mas de una hora. 

Luego hacer 
KBTools/KBCompres/KBCompressMDF.cmd

esto lo que hace es comprimir la base de datos SQL Server. 

3 - Borrar todos los atributos que no están en ninguna tabla. 

Con el KBDoctor, ejecutar la opción KBDoctor / Clean KB / Remove att with no table. 
Esta opción hay que repetirla hasta que no de errores. Si da algun error, hay que ver en el output cual es el atributo que esta queriendo borrar y resolver el problema en forma manual. Generalmente es que quiere remover una referencia, pero al salvar el objeto, da errores y por lo tanto no puede borrar el atributo. 
Tener atributos que no están en ninguna tabla, no es una buena practica, pues referenciarlos puede ocasionar errores. 
Hacer un build all exitoso y crear una versión congelada.

4 - Crear un objeto KBDoctor_ObjetosQueNoSeDebenBorrar.
Crear un procedure, main y marcarlo con la propiedad Generate Object = False.  En el mismo hacer un call a todos los objetos que no son referenciados, pero no quiero que se borren. En el mismo se pueden poner también todos los programas que sean llamados en forma dinámica. 

Por ejemplo: 

if 1=0
     Objeto1()
     Objeto2()
endif

Si tengo algun SDT que no se esta usando y no quiero borrarlo, agregar variables basadas en el mismo. 

Por ejemplo, si tengo un SDT que se llama GXChart, y no quiero que se borre, se puede poner una variable basada en el sdt y el código

&gxchart = &gxchart 

Puede ser que no sepa que objetos poner aqui, pero podemos volver mas tarde cuando sepamos que objetos se van a borrar. 

5 - Borrar todas las variables no usadas.

Tools / Variables Cleaner by DVelop / Clean Variables from entire KB 

También puede hacerse con
KBDoctor / Clean KB / Clean variables not used

Esto lo que hace es borrar todas las variables no referenciadas en todos los objetos de la KB. 
Hacer un build all exitoso y crear una versión congelada

6 - Objetos main no usados. 

Revisar todos los objetos main, y si hay alguno que no se usa mas, sacarle la propiedad de main. 

7 - Borrar objetos y limpiar transacciones objetos no referenciados. 

KBDoctor / Clean KB / Remove not referenced objects. 
Este paso va a ir borrando en forma sucesiva los objetos no referenciados en la KB. Hara varias pasadas hasta que no queden objetos sin referenciar. 
Ademas va a cambiar las transacciones no referenciadas, sacandoles todas las reglas, los eventos, la masterpage y las marca para que no sean generadas. 
Si se borro algun objeto de mas que no estaba referenciado, pero se quiere mantener, volver a la versión del paso "Borrar todos los atributos que no están en ninguna tabla" y repetir el paso 4, 5, 6 y 7 pero ya con los objetos que no quiero borrar. 


Hacer un build all exitoso y crear una versión congelada. 

Hasta aquí, son las tareas básicas de limpieza de una KB. 
Si se siguen estos pasos, debería tener una KB que haga un build all, con los objetos que son referenciados en la KB y la KB debería hacer un build all sin errores. 

Las que siguen, son tareas opcionales, que son buenas hacerlas pero pueden postergarse. 

8 - Build sin warnings. 

Eliminar todos los warning de la KB. Revisar todos los warnings de la KB y si es un warning que esta correcto, agregar dicho el código de mensaje a los warnings que deben ser ignorados en las propiedades del objeto. 

Algunos warnings, pueden ser deshabilitados a nivel de toda la KB, por ejemplo, todos los relacionados con indices y ordenes. 

Pasar a algunos warning a errores, por ejemplo todos los que da por tener parámetros de mas o de menos. 

Si se usa GX16, borrar todos los objetos que tengan el mensaje de Unreachable.
Son objetos referenciados por otros, pero que no son alcanzable por ningún main.  

9 - Borrar todo el código comentado. 

Revisar todos los objetos con el KBDoctor / Review Object para identificar todos los objetos que tienen código comentado y eliminarlo. 

10 - Las otras tareas de limpieza. 

Revisar parámetros de entradas, no usados. 
Revisar parámetros de salida, no asignados.
Habilitar en LSIExtension el chequeo automático de objetos al salvar. 
Eliminar los Themes no usados. 
Eliminar las clases no usadas de los temas usados. 
Eliminar el codigo javascript embebido o HTML modificado 

Una vez terminados todos estos pasos, puede manejarse mejor la KB y el build deberia funcionar mejor. 

En esta etapa, generalmente vuelvo a hacer un KBcompress (paso 1) y hago un REBUILD ALL, para asegurarme que todo se genere sin problema. 


11 -Otras mejoras a la KB

Estas son tareas que no son de limpieza, sino que mejoran la KB (las listo, pero cada uno de los puntos, amerita un post por separado). 
  • Sacar todos los defined by
  • Basar todos los atributos en dominios
  • Basar todas las variables en atributos o dominios (Object / Fix variable no based on Domain/Attribute)
  • Modularizar la KB
  • Definir todos los parametros con IN/OUT/INOUT

Resumen: 

Limpiar una KB, no es una tarea difícil, aunque es un poco delicada y que todos deberiamos realizar en forma periódica.

Todas estas tareas son MUY automatizables. Podria hacerse un script que haga la mayoria de estos pasos que deje la KB en mejor estado en que lo recibe. 

Comentarios

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.