sábado, 23 de mayo de 2015

Recover Object - Recuperar objetos borrados en GeneXus



Luciano Silveira hizo la extensión Recover Objet, para poder recuperar objetos borrados.
Su uso es bastante sencillo, pues basta con ir a la ventana de la extensión, poner una fecha anterior a cuando se borro el objeto y muestra todos los objetos borrados desde dicha fecha.

Luego, se selecciona los objetos que se quieren recuperar y al seleccionarlo el objeto deja de estar borrado.

Es una extensión muy útil (yo diría que indispensable, debería venir nativa con GeneXus) pues minimiza el riesgo de borrar algo por error, haciendo la limpieza de KB una tarea mucho menos riesgosa.

La recomiendo.

martes, 19 de mayo de 2015

Variables Cleaner by DVelop


Tengo pensado hacer una serie de post sobre extensiones que uso para el desarrollo con GeneXus.

Para iniciar la serie, inicio con Variables Cleaner de los amigos de DVelop.

Es una extensión que hace una sola cosa y la hace muy bien, BORRAR LAS VARIABLES QUE NO SE USAN en los objetos GeneXus.

Permite seleccionar un conjunto de objetos y borrar de ellos todas las variables no usadas. Las ventajas de borrar las variables no usadas, es que el código generado sera mas chico, permite eliminar referencias innecesarias a atributos, dominios, SDT, etc y mimiza errores.

También habilita un menú contextual en cada objeto, para borrar las variables de un objeto en particular. Resulta muy útil para borrar las variables no usadas antes de subir los objetos a GXServer.

Esta disponible para casi todas las versiones de GeneXus (falta solo para Evo3 U3, pues cambio su numero de compatibilidad) y la recomiendo mucho.



viernes, 15 de mayo de 2015

Modularizando KB con Evo3

Estoy haciendo el cuarto intento de modularizar una KB con GeneXus Evolution 3, con el Upgrade 3.
Para esto, uso el objeto Module , tratando de dividir una KB en grupos de objetos que estén lógicamente relacionados para hacer mas fácil su mantenimiento. 

Los módulos, me parecen una muy buena idea y que puede ser muy util, pero que en su implementación actual (U3/Evo3) hay errores que dificultan mucho su uso. Mis intentos han sido con el generador .NET y apenas empiezo a usar módulos, aparecen errores de compilación. 

Por ejemplo, reporté un error con los módulos en Evo3 Upgrade 1, hace mas de 6 meses y el mismo sigue dando en la Upgrade 3.  SAC #36763
También da problemas cuando un SDT de mas de un nivel, están en módulos. 

Otro problema es cuando se tiene objetos que se usan en ambiente WIN y WEB, se quieren mover a un modulo. Seria bueno que un objeto WIN pudiera estar en un modulo, aunque se generara siempre igual que en el pasado.  Las KB que se van a beneficiar mas de la modularización, son las grandes y que tienen muchos años de desarrollo. Estas suelen contener componentes WIN que aun no han terminado de migrarse a WEB o a Mobile, por lo que seria bueno poder hacer convivir estas dos tecnologías por un tiempo mas. 

Todos estos problemas, tienen forma de ser esquivados, pasando los objetos al modulo Root, pero se pierden muchas de ventaja de la modularización, pues objetos que deberían ser privados quedan públicos y en módulos que no le corresponde. 

Lamentablemente, estos pequeños problemas, hacen que no podamos usar la potencia de los módulos. Conozco algunas empresas que han optado por no migrar a la Evo3 (hicieron la migración pero a la Evo2), hasta tener estos errores solucionados. 

Creo que es un buen momento para redondear la funcionalidades faltantes a los modulos para que puedan ser usados en forma masiva. 

Alguna de las funcionalides/errores a arreglar que me gustaría tener serian:

* Ver los objetos privados de un Modulo.  (SAC # 37397)
Se pueden ver fácilmente los objetos públicos de un modulo determinado, abriendo dicho modulo.
También se pueden graficar las relaciones entre módulos/submodulos o los llamados entre objetos del modulo.
No encontré como ver todos los objetos privados de un modulo, lo cual he necesitado algunas veces.
Me gustaría tener un tab en los módulos que muestre todos los objetos privados de uno de ellos. 

* Cambiar un objeto de modulo,
Al cambiar un objeto de modulo, deberia regenerar todos los objetos que lo llaman. 
Hoy no toma todos los cambios y muchas veces la forma mas "rapida" de solucionarlo es con un Rebuild All, que puede demorar muchisimo. 

* Cut/Paste de Objetos no funciona en modulos. 
Si se hace Cut/Paste de Objetos, los mismos no se mueven de modulos. Esto funcionaba con los folder, pero dejo de funcionar con modulos.
Cuando se tienen KB grandes, es realmente incomodo mover algunos objetos entre folders/modulos, con drag & drop o cambiandole la propiedad. Yo preferiria hacerlo con Cut/Paste, como antes. Cuando estamos modularizando KB, es una accion muy comun y seria bueno que lo arreglaran.

* No se ve el nombre del objeto en la lista Working Set.  (SAC 37257)

Este error, hace que el uso del working set (que uso mucho) quede bastante inútil, pues no se sabe cuales son los objetos que están en la lista. Cuando se agrego el nombre del modulo a la lista, quedo muy chico el nombre del objeto y no se puede cambiar el tamaño del mismo. Lo reporte hace un buen tiempo y también sigue sin arreglarse.


* Poder Manipular objetos desde la ventana de Modulos. (SAC 37369)
Me gustaría poder tener el menú contextual del objeto en la ventana de módulos, para poder abrirlo, moverlo, etc.

No son grandes arreglos, pero creo que seria un buen aporte para toda la comunidad, poder empezar a usar los Modulos en forma masiva. Las potenciales ventajas son muy grandes, como para retrasar mas comenzar a usarlos en forma generalizada.

* Errores con Business Component. 
Al tener BC en modulos, me ha pasado mas de una vez, que empieza a fallar la compilacion del fuente: GXFullTextSearchReindexer.cs, porque no encuentra las fuentes de los SDT internos que se usan para el manejo de los BC.
No conozco ninguna forma trivial de arreglar esto, mas que regenerar todos los BC y rezar para que todo vuelva a compilar.
Este error nunca lo reporte, porque es difícil de reproducir.




miércoles, 6 de mayo de 2015

Ver los objetos no referenciados en la KB.

Entre las evaluaciones de KBDoctor, me llegó una de Marco Tigselema  (gracias por las cinco estrellas!!!) que pedía poder ver los objetos no referenciados antes de borrarlos.

Como el marketplace no permite responder a las evaluaciones, lo hago por el blog.

Saqué hace un tiempo la posibilidad de ver cuales son los objetos no referenciados, porque esa funcionalidad ya fue agregada por Artech en GeneXus hace un tiempo.

Si se hace View / Knowledge Base Information / Not Referenced Objects


También se pueden ver los objetos menos referenciados y los mas referenciados.


viernes, 24 de abril de 2015

Como eliminar el warning: spc0208: No triggered actions

Me han preguntado un par de veces como hacer para eliminar el warning spc0028: Not Triggered Action, que puede aparecer en objetos GeneXus.

Este mensaje no hace mas que hacer visible un problema que se tenia en programas GeneXus desde hace muchas versiones, pero en las ultimas versión, se hizo mucho mas facil de detectar pues sale un mensaje al especificar el objeto. Dicho mensaje, presenta algunas dificultades para su eliminación.

La primera dificultad, es que algunos no entienden el significado del aviso, que significa que alguna regla o formula no puede ser evaluada por GeneXus. El motivo de esto, es porque no tiene los elementos necesarios para evaluarla y por lo tanto no la considera en la generación del código de ese objeto.

Esto trae como consecuencia que alguna de las reglas que pusimos en nuestros programas no sera tenida en cuenta y el motivo puede ser un error de programación o un cambio que afecto la forma en que se disparan las reglas.

Desde mi punto de vista, seria mejor que el mensaje fuera

"Some rules/formulas can't be evaluated o generated"

La segunda dificultad es poder identificar cual es la formula o regla que no se está disparando.
Si tenemos una navegación no detallada, no se ven cuales son las reglas que no se disparan y no se puede ver el detalle.
La forma de ver una navegación detallada era sencilla en GeneXus 9.0, pero pasó a ser un poco mas compleja en GeneXus X.

Hay que elegir Tool / Options / Build / Detailed Navigation y ponerlo en TRUE.

En la navegación detallada, es fácil encontrar cual es la regla o formula que no se puede evaluar, pero no siempre es tan fácil encontrar el motivo por el cual no puede dispararse. Conviene empezar a ver si no hay variables que no estén inicializadas o atributos que no pueden ser inferidos.