Entradas

Renovado interés en GXUnit

Imagen
En el año 2003 (hace ya 14 años!!) empecé este blog con un artículo sobre una herramienta que llamé GXUnit.  Durante varios años hice un esfuerzo junto con otros compañeros de la comunidad de sacar el producto adelante, para que sirviera para lograr usar el testeo unitario dentro del ciclo de desarrollo con GeneXus.  Este año en el #GX27 , nace un interés renovado en GXUnit, pues poco a poco la comunidad GeneXus descubre que la metodología TDD o de Integración Continua (CI) o de Instalación Continua (CD) . Es muy bueno que podamos contar de una vez por todas con lo necesario para poder hacer testeo unitario de calidad y sin demasiado esfuerzo.  Hay varias charlas relativas a DevOps, integración continua y aledaños que recomiendo fervientemente.  Fundamentalmente Lali Aguiar , y Abstracta están haciendo un excelente trabajo para mantener y mejorar la herramienta.  Una de las cosas que le esta faltan al GXUnit para lograr ser realmente un te...

KBDoctor - Nuevas consultas para modulos e integridad transaccional

Imagen
Agregué algunas opciones al KBDoctor para poder manejar la modularización de KB. List Modules Errors.  Cuando hacemos cambios en la visibility de los objetos y/o cambiamos los objetos de modulos, no detecta automáticamente los cambios.  Al menos en Evo3, hay que hacer un rebuild para poder detectar los errores y eso demora muchisimo. Este reporte lo que lista son los objetos (tablas y programas) privados que estan siendo accedido desde afuera del modulo. Tambien las tablas publicas que son actualizadas fuera del modulo. Esto no es un error para Genexus, pero es algo que es bueno evitar. Por ultimo, tiene una lista de los objetos que seria bueno mover para el modulo, pues solo usa tablas y objetos de este modulo. List Tables in modules.  Permite lista un conjunto de tablas, y muestra si son privadas o publicas, en modulo esta y cuales son las transacciones que la generan. Tambien muestra la transaccion que GeneXus eligio para definir el modulo de la tabla. Toda ...

Módulo de Análisis de Riesgo en Aduana de Colombia

Imagen
Desde hace unos meses, bajo el convenio de cooperación entre las aduanas uruguaya y colombiana,  esta funcionando en la Aduana de Colombia el modulo de análisis de riesgo en las operaciones aduaneras del aeropuerto El Dorado en Colombia. Como parte de la  segunda etapa de implantación, ayer paso a  funcionar para todas las operaciones de la Aduana de Bogotá. El sistema  permite a los funcionarios de la sección de análisis de riesgo, definir reglas complejas en un lenguaje sencillo, para elegir cuales son las operaciones a verificar (física o documentalmetne). Esta desarrollado en GeneXus , con interfaz web generando java y ejecuta sobre JBoss / Oracle.

COMMIT ON EXIT considered harmful

Imagen
Hace unos 7 años, publiqué un artículo donde proponía algunas mejoras para la propiedad Commit on Exit, pues es una de las cosas que resulta mas difícil de explicar a quienes recién comienzan a programar con GeneXus. Estamos en proceso de BetaTesting de la GeneXus Tero y seria bueno revisar el uso que le damos esta propiedad. Que cosas resultan confusas? Es difícil de explicar a un novato, que si un procedure que tiene Commit on exit = YES, no hace commit. Solo lo hace, cuando se hace un UPDATE/DELETE/INSERT en la base de datos y tiene la propiedad en YES. En cualquier otro caso, no hace commit. La documentacion del wiki si bien lo dice, es confusa. Es difícil de encontrar, cuales son los objetos que hace commit en un árbol de llamadas. La búsqueda por propiedades nunca funciono del todo bien, y de esta forma, es bien difícil encontrar donde se esta  rompiendo la integridad transaccional. En los BC, no se toma en cuenta la propiedad, lo cual hace mas confuso aun la c...

Métricas sobre modularización de KB

Imagen
Cuando tengo un sistema desarrollado, tengo muchísimas formas de dividirlo en módulos. Segun la bibliografia, el problema mas general de particionar un grafo en diferentes agrupamientos de nodos (clusters) es considerado NP-Completo, por lo que no se ha encontrado aun una forma eficiente de resolverlo. Al tener tantas opciones, es bueno contar con alguna herramienta que me permita medir que tan buena o mal es dicha division, en el caso de una KB, seria medir que tan buena o mala es la modularizacion que he realizado. Algunas de las características perseguidas por la modularizacion, son la de tener un gran cohesion entre los nodos que están dentro de un modulo y tener poco acoplamiento con otros módulos. Esto se traduce, a que queremos maximizar las  aristas dentro de los módulos y minimizar las aristas entre los módulos. Resulta mas facil, verlo en imagenes. Supongamos que tenemos un grafo que representa la relaciones entre objetos. Los objetos pueden ser cualquier objeto e...

Chrome v62 y BackColor = Transparent

Imagen
Una aplicación WEB C# en GeneXus 15 que usa el Abstract Editor (que viene migrada de versiones bastante anteriores de GeneXus), empezó a mostrar en algunos filtros, un fondo celeste. El motivo de esto, es porque la variable tenia la propiedad BackColor=Transparent, que en versiones anteriores de Chrome se tomaban como transparentes, pero en la version 62 que aun esta en Beta, la toma con ese color. Viendo el HTML, vimos que estaba generando donde el color (#00FFFF) tiene un FF al final que indica que es transparente. Por motivos que desconozco, esta version de Chrome no le da bolilla al alpha y pinta de celeste algunas variables. Esta propiedad, no esta alcanzable desde la interfaz de GeneXus con el editor abstracto (o al menos no lo encontramos), se ve que se guarda en forma interna, y debe venir de versiones anteriores de GeneXus. Para solucionarlo, lo que hicimos fue hacer un distribute de todas las transacciones y webpanels de la aplicacion y en el XML del export, b...

PiensoPienso: Como hacer una reorganización de cambio de tipo de datos, sin interrumpir la operativa.

Imagen
Problema:  Tengo una KB GeneXus, con una tabla con 2 millones de registros que tiene un campo AttSec N(3) y debe cambiarse a C(3) (si se quiere, puede tener otro nombre). Tabla ====== *Clave       N(10) AttSec       N(3) otros atributos El sistema esta funcionando 24x7, se instala en varios nodos (en un NLB). La aplicación deberá estar operativa siempre, no se puede bajar ni bloquear. Se pide: ¿Cuales son los pasos de desarrollo e instalación que debo seguir para lograr instalar en todos los nodos la aplicación operativa con el atributo C(3)? Solución: Si alguien se anima, la escribe en los comentarios. Yo publico la mia en unos dias. UPDATE = 04/07/2017=============================== MI SOLUCIÓN:  Lo primero que haría seria ver si la tabla es usada solo por mi aplicación o también es accedida por alguna aplicación externa. Para simplificar, supongamos que solo es accedida por la aplicación GeneXus. Estado Inicia...