Entradas

Funcionalidades que me gustaría agregar al KBDoctor (continuación)

Imagen
Search&Replace Poder poner un texto a buscar y otro a sustituir y cambiarlo en todos los objetos. El cambio puede ser en el código, en las pantallas, en las propiedades. Seria opcional buscar con el Indice que GeneXus ya posee, o que recorra todos los objetos, los distribuya y si el texto esta en dicho objeto, lo modifique y vuelva a consolidarlo. Seria muy util, para muchas situaciones, por ejemplo para eliminar el &Planilla.UseAutomation, que no se porque motivo el Search de Genexus no lo encuentra.

Funcionalidades que me gustaría agregarle al KBDoctor.

Imagen
Hay un conjunto de funcionalidades que me gustaría agregarle al KBdoctor y dado el ritmo de trabajo que preveo para este año no voy a poder encarar. TRNCleaner. Toma una transacción que no esta siendo usada (solo se usa para crear la tabla) y le saca todas las reglas, pantalla, documentación. Opcionalmente puede eliminar también formulas no redundantes o atributos que no pertenezcan a las tablas básicas de la transacción. También debería marcarla como no generable, para que no jorobe mas por un tiempo. ThemeCleaner. Dado un tema, borrar todas las clases no referenciadas por ningún objeto de la KB, tomando en cuenta la jerarquía lógica. ThemeFixer. Recorrer todos los objetos WEB y corregir todos aquellos controles que tengan clases que no existan en el tema asignado, poniéndole la clase por defecto para dicho control. SDTFixer. Dado un SDT, generar un proc que define una variable basado en dicho SDT, y lo genera forzado para todos los ambientes del modelo. Luego borra ...

PiensoPienso: Cómo implementar semáforos en GeneXus?

Imagen
Se tiene una aplicación que se ejecuta en muchas computadoras diferentes sobre la misma base de datos y comparten el file system. Hay un determinado proceso que por su consumo no puedo permitir mas que tres ejecuciones simultaneas del mismo pues la performance de  toda la aplicación se degrada hasta niveles no aceptables.  Dicho proceso, puede tener cortes o caídas que hagan que no termine en forma correcta.  Cuales son las posibles implementaciones con GeneXus para lograr un máximo de tres ejecuciones simultaneas? Se valorarán las que maximicen la concurrencia y no provoquen bloqueos. Para los que quieran les dejo el link de wikipedia sobre el tema y otro sobre mutex .

PiensoPienso: Como mejorar la permformance de este programa?

Tengo una tabla con millones de registros que son de la forma *Clave Descripcion Fecha y un webpanel  con una grilla que muestra los registros que cumplen la condicion: Clave = &Clave when not &Clave.isEmpty(); Descripcion like &Descripcion when not &Clave.IsEmpty(); &FechaInicial <= Fecha and Fecha <= &FechaFinal ; En la pantalla se muestran la cantidad de registros que tiene le grilla y en los eventos tengo: &TotPag = Grid.PageCount if Grid.Rows > 0 if Grid.PageCount <= 1 Paginado.Visible = 0 //Muestro botones de  paginado else if &nroPag = 1 anterior.Enabled = 0 primero.Enabled = 0 endif if &nroPag = Grid.PageCount siguiente.Enabled = 0 endif endif else Paginado.Visible = 0 endif Como mejorarían la performance de este programa? 

Ventajas de programación basada en modelos : Cambios al migrar a GeneXus X ev2.

Estaba revisando un tema de performance en la base de datos, de una aplicación generada con GeneXus 9.0. La misma no tenia problemas de performance grande, pero los administradores de la base de datos pedían que se utilizara BINDING para mejorar el ratio del cache de sentencias en la base de datos. Para hacer pruebas cree una KB en 9.0 con dos tablas (Clientes y Facturas) y un webpanel con una grilla de 10 renglones, que traia algunos datos de las tablas con un join, con condiciones con un when y ordenados   La misma generaba la sentencia: SELECT T1.[FactImporte], T1.[FactId], T1.[FacFecha], T2.[CliNom], T1.[CliId] FROM ([FACTURA] T1 WITH (FASTFIRSTROW NOLOCK) INNER JOIN [CLIENTE] T2 WITH (NOLOCK) ON T2.[CliId] = T1.[CliId]) WHERE (T1.[FactImporte] > 100) ORDER BY T1.[FactImporte] DESC   Para hacer pruebas, también la migre a la GeneXus X Evolution 2 y generó la sentencia.   SELECT * FROM ( SELECT T1.[FactImporte], T1.[FactId], T1.[FacFecha], T2.[...

KBModule 1.3 (beta) - Modularizando KB Grandes

Imagen
Cuando una KB GeneXus crece, algunos problemas que son manejables cuando son chicas, se vuelven bien dificiles de manejar. Es comun, que en las KB grandes se tenga cierta especializacion en el area en que desarrolla cada uno de los programadores que trabajan en la misma KB, dividiendo los objetos en modulos. Una vez que uno adquiere cierta experiencia en dicho modulo, es bueno poder controlar como se comunica dicho modulo con el resto de los objetos de la KB. Como “administrador del modulo”, me interesa asegurarme: Que ningún objeto externo llame a algunos objetos internos de mi aplicacion.  Que no actualicen o borren las tablas con for eachs o new, sino que lo hagan con objetos pre-establecidos (son las API de mi modulo).  Si mi modulo necesita llamar a objetos externos (que no son de mi modulo), tener claro que dichos objetos no van a cambiar o que si cambian me van a avisar.  Conocer que modulos utilizan mi modulo y que modulos estoy utilizando.  ...

Reunion por KB Grandes.

Imagen
Luego de varias idas y vueltas, logramos organizar la reunión para conversar sobre KB Grandes. Fue mas gente de la que pensaba. Había gente con KB de 2000 objetos hasta algunos con 25.000 objetos. Los temas que conversamos 1) Metodología de desarrollo Algunos contaron sobre como pasar de desarrollar en GX 9.0 varios desarrolladores en una misma KB a hacer lo mismo en la GX X. Se contaron algunas estrategias para lograr una productividad aceptable. Se converso sobre el uso de GX Server. 2) Lentitud en algunas operaciones. La gente de Artech pidió que reportaran casos de lentitud para poder atacarlos y no tomarlos como forma normal de desarrollo. 3) Patterns en KBGrandes. La aplicación de patterns en KB de muchos objetos, puede multiplicar la cantidad de los mismos y hacer mas evidentes algunos problemas. Si un patrón desarrollado por la empresa demora mucho, conviene estudiar la forma en que el mismo esta programado....