KBDoctor - Buscando navegaciones similares y nuevas funcionalidades

Cuando se realizan tareas de mantenimiento en KB que tienen varios años de desarrolladas, es conveniente empezar a usar nuevas funcionalidades de GeneXus. En particular, una cosa que es buena, es cambiar los objetos viejos para que empiecen a usar Data Providers y Data Selectors.

Para esto es fundamental encontrar cuales son las navegaciones "similares" para lograr encapsular ese conocimiento en dichos objetos.

La tarea de encontrar objetos con navegaciones parecidas es bastante compleja, para hacerla con GeneXus, por lo que decidí agregar una opción al KBDoctor, que facilite en algo la tarea.

La opción se llama "Find similar navigations", pero en realidad lo que hace es listar todos for each de las navegaciones GeneXus (los explícitos y los implícitos por el uso de atributos en los formularios).

Con este listado y ordenando por diferentes criterios (tablas, atributos usados, etc) se pueden luego encontrar aquellos objetos que me pueden interesar modificar para que empiecen a usar data selectors.

Por ejemplo, aplicado a la KB del WIKI de servidor publico de la Evolution 3, se listan varios objetos que navegan sobre las tablas PageLinks y WikiPage y hacen un join entre ambas.

En el listado se ponen cuales objetos son y en que evento y/o linea de código aparece esto:



Viendo el ejemplo marcado arriba del objeto HRelatedLinksPreview, se puede ver que efectivamente son dos for each "parecidos" y que podría encapsularse ese conocimiento en un procedure o hacer un data selector para mejorarlo.




 Esto lo hago procesando las navegaciones, y el formato en que se publican las navegaciones en GeneXus es interno y hay que deducirlo por ingeniería inversa, por lo que es muy proclive a errores de varios tipos. Lo que funciona para una KB, puede no funcionar para otra o también puede funcionar diferente con otros navegadores.  Es una funcionalidad que aun le falta trabajo pero así como esta puede ayudar a encontrar objetos candidatos a refactoring de una forma un poco mas fácil que sin esta opción.

También le agregue a todos los reportes del KBDoctor la posibilidad de ordenarlos por una columna, dándole un click al cabezal de la misma.

Ahora estoy trabajando en agregar algunas opciones nuevas:
* Listar todos los mains, que son llamados desde otros mains.
* Listar todos los objetos alcanzables desde un objeto elegido
* Listar todos los objetos (procedures o transacciones) que actualizan un determinado atributo/tabla.

Cuando la tenga listas, subo la version compatible con la Evolution 3.  Espero que sea esta semana.

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.