Entradas

Migrando a GeneXus X.

Imagen
En los últimos meses he estado ocupado, migrando sistemas que estaban en GeneXus 9.0 a GeneXus X Evolution I. La migración mas grande es de una KB que necesita tener muchas aprobaciones, pruebas, auditorias y demás y hemos pasado casi todos las pruebas con éxito. Ya estamos muy próximo a la liberación definitiva y es todo un alivio. Es una aplicación WIN y WEB, con muchos procesos batch e interconexion con webservices con muchos puntos, por lo que la migración no fue trivial, pero por suerte se comporto mucho mejor de lo esperado. Tenía bastante miedo a la parte WIN de la aplicación, pero fue la que tuvo menos problemas. Los problemas que arreglamos fueron varios 1) ComboBox que antes permitían valores no validos y ahora se cambian a un valor default. Si teníamos un combobox, con valores 1 y 2, pero a la variable se le asignaba un 3, antes mantenía ese valor, y ahora le deja el valor de...

Nueva version del KBDoctor.

Imagen
El miercoles dediqué parte del dia a mejorar el KBDoctor. Es increible, pero pasaron 5 años desde el primer GXChallenge donde competimos para hacer extensiones. Durante este tiempo lo use varias veces, pero ahora tenia que emplearlo mas a fondo y entonces decidi arreglar las cosas que me molestaban y dificultaban el trabajo. Los principales cambios son: Mas objetos se marcan como no alcanzables (tablas, dominios, imagenes, SDT, External Programs, etc). Antes eran solo programas y atributos. Los objetos no alcanzables, se marcan con la propiedade GenerateObject=False. Ordenar Menu y ajusto menu para que aparezca abajo de Tools.  En los reportes de atributos, se excluyen los que son subtipos. Esto es para que no me sugiera que tengo que modificar un subtipo, cuando en realidad, lo que tengo que arreglar es el supertipo.  En los reportes de errores de atributos, permite abrir los mismos para poder cambiarlos. En los reportes de atributos, si el mismo tiene un domin...

IBM DB2: SQL con soporte a consultas temporales.

Imagen
La nueva version de la base de datos de IBM DB2 , viene con soporte para consultas temporales , lo que permite modelar mucho mejor aplicaciones que tengan que mantener vigencias en las tablas. Por ejemplo, la tabla de PAISES, es bastante estatica, pero cambia cada tanto en los nombres de los mismos. Tambien se crean nuevos paises y algunos paises se dividen en dos y dejan de existir. Para modelar esto, generalmente se agrega un rango de fechas (FechaInicial-FechaFinal, o VIGENCIA) donde sus atriibutos secundarios son validos. En DB2, ahora se pueden escribir sentencias de la forma UPDATE paises  FOR PORTION OF BUSINESS_TIME FROM '2007-03-01' TO '2009-04-01' SET paisnombre = 'Checoslovaquia' WHERE PaisID = 123; que solo va a valer en ese rango de fechas establecidas. De esta forma las aplicaciones podrían ejecutar en el momento actual (como hacemos ahora) y también en el futuro o en el pasado, o sea cambiando la FECHA_VALOR o FECHA_EJECUCION,...

Tip para evitar caidas de Genexus X Ev1.

Imagen
En los últimos días he estado trabajando bastante en una migración de una KB grande a la version GeneXus X, Evolution 1, Upgrade 7 (en otro post, contaré la experiencia y lo aprendido). En general la migración funciona va muy bien, con algunos problemas que hemos ido solucionado, pero hay un error que todos los que han participado en la migración (unas 10 personas) se han quejado es que GeneXus da errores de falta de memoria. Esto se da por leaks y el error da en diferentes lugares y luego de varios minutos que se esta trabajando.  Después que da el error, la unica solución que conozco es cerrar GeneXus y volver a ejecutarlo. El problema es que esto demora bastante. Una solución bastante berreta, para evitar tener que salir y volver a entrar es ir al Extension Manager, habilitar o deshabilitar alguna extensión que no use y aplicar los cambios.  Con eso, se hace un restart mas rápido y se puede evita...

Deshabilitar todos los triggers de una base de datos - SQL Server.

El comando para deshabilitar todos los triggers de una base de datos es.. Print 'Disabling all Trigger' exec sp_MSforeachtable 'ALTER TABLE ? DISABLE TRIGGER ALL' o tambien CREATE Procedure [dbo].[DisableAllTriggers] AS Declare @string varchar(8000) Declare @tableName nvarchar(500) Declare cur cursor for select name as tbname from sysobjects where id in(select parent_obj from sysobjects where xtype='tr') open cur fetch next from cur into @tableName while @@fetch_status = 0 begin set @string ='Alter table '+ @tableName + ' Disable trigger all' exec (@string) Fetch next from cur into @tableName end close cur deallocate cur Exec [dbo].[DisableAllTriggers] Este es un POST para no perder tiempo buscando la próxima vez que tenga que hacerlo.

Para GeneXus X Evolution 3

Imagen
Algunas cosillas que me gustarían tener en la Evo 3 de GeneXus. Módulos .  Poder modularizar la KB, de forma de poder achicar las dependencias que existen entre objetos, para achicar los tiempos de generacion y especificacion. Tambien va a servir para ayudar al deploy KB Grandes.Tambien facilitara la integracion entre diferentes modulos, lo cual va a redundar en mayor productividad. Pruebas de regresion integradas en la KB. Tener dentro de la KB pruebas que permitan asegurar que los objetos no cambiaron su comportamiento. Esto puede incluir navegacion, sentencias SQL, performance, etc. Generador de datos de prueba.   Dada una transaccion, generar automaticamente datos de pruebas de la misma. Se puede elegir la cantidad de datos a generar y respeta la integridad referencial. Registro de Ejecución.  Las aplicaciones generadas, pueden ejecutarse en modo "Grabacion", lo cual permite almacenar un script, para luego volver a correrlo y ver las dife...

Haciendo limpieza en la KB.

Imagen
A medida que pasa el tiempo, sobre todo si varias personas desarrollan con GeneXus sobre una misma base de conocimiento (KB), se generan algunos objetos que se dejan de usar. Para esto, es bueno tener pronto una metodología de limpieza de la KB y hacerlo en forma periódica. Los pasos que yo realizo para hacer una limpieza rápida. 1) Hacer un buen backup de la KB y tambien un Export de todos los objetos de la KB, para tener a mano, en caso que se nos vaya la mano en el borrado. 2) Correr el VariablesCleaner de Dvelop. Esto borra todas las variables no usadas en los objetos. 3) En la ventana View / Work With Attributes , elegirlos todos y intentar borrarlos. Solo va a borrar los no referenciados. 4) En la ventana Work With Objects , elegir todos los Dominios e intentar borrarlos todos. 5) Luego se puede ir a View / Knowledge Base Information / Not Referenced Objects y borrar los objetos que sobran. A las transacciones, no se las puede borrar...