Entradas

GXFlow con Oracle

Para poder usar GXflow con Oracle, es necesario poder usar el driver de Oracle, en 32bits o en 64bits, dependiendo de como este compilada tu solucion. 
Los programas que vienen con Workflow que hacen las reorganizacion desde versiones anteriores de GXFlow y tambien los programas que procesan los diagramas y cargan la metadata en las tablas de workflow, vienen pre-compilados. 
Esto siempre nos trae problemas con las diversas versiones de la dll de Oracle.DataAccess.dll, pues algunas veces no puede cargarla correctamente. 
Lo que hay que hacer es forzar el uso de (en nuestro caso) 32bits para los programas de GXflow: 
corflags "C:\Program Files (x86)\GeneXus\GeneXus15\Packages\Gxpm\Platforms\NetOracle12c\apwfwinloaddataxml.exe" /32BIT+ corflags "C:\Program Files (x86)\GeneXus\GeneXus15\Packages\Gxpm\Platforms\NetOracle12c\apwfexportgamroles.exe" /32BIT+ corflags "C:\Program Files (x86)\GeneXus\GeneXus15\Packages\Gxpm\Platforms\NetOracle12c\apwfgenuserdataxml.exe&qu…

Poner comentarios en ReorganizationScript.txt en reorg GeneXus

Imagen
Esta es una sugerencia que hice en el Slack de la TERO (próxima version de GeneXus, que sera la 16).

Nadie respondió nada y hace tiempo que tiene poquisimo movimiento, por lo que me quedan dudas, si alguien lo esta leyendo en forma activa.

Voy a reportarlo por aca, para darle un poco mas de visibilidad, pues es una sugerencia que puede servirle a todos aquellos que necesitan hacer reoganizaciones de la base de datos únicamente por script.



REORGANIZACION:  En algunas instalaciones, la unica forma autorizada de hacer reorganizaciones es a traves de scripts SQL.

Con la generación de ReorganizationScript.txt se simplificó muchísimo la tarea, de generar un script que haga la reorganización de la base de datos.

Lo que quería pedir era si se podía agregar algún comentario adicional, en el caso que se necesita crear una tabla temporaria y correr el programa de conversión.

Los DBA's generalmente evitan la creación de tablas temporarias y deben traducir esa secuencia de sentencias por otras…

Cambiar de version de GeneXus en KB conectada a GXServer

Imagen
Cuando tenemos una KB conectada a GXServer, surge la dificultad, que hay que migrar "simultaneamente" la KB local y la KB remota a la nueva version de GeneXus.

El proceso de pasar de una version a otra en KB grandes, puede ser mas o menos trabajoso, dependiendo de muchos factores, pero puede demorar varios meses entre migracion, pruebas, ajustes, arreglos e instalacion de la nueva version. 
Algunos factores que influyen en esta migracion son: 
* External Objects utilizados * User Controls Utilizados * Versiones de sistema operativo, base de datos, servidor de aplicaciones web, etc. 
Durante el periodo que se realiza la migracion, si bien tratamos de minimizar los cambios que se realicen al sistema, siempre hay cambios obligatorios que hay que realizar. 
El escenario planteado es el siguiente: 
KBEvo3 - hace ajustes a la aplicación.  KBGX15 - hace cambios debidos a la migración  Hay que mantener la historia de todos los cambios y la historia de los Commits en el server. 
La m…

Run sobre un objeto, compila muchos objetos no relacionados en mi KB GeneXus

Imagen
Me plateaban este problema:

"Sobre un objeto main, hago click derecho y RUN. Demora muchisimo, porque compila casi todos los objetos del sistema".



Es una KB mediana (1000 objetos) y no había motivos para ese comportamiento.

En la documentacion del Build/Rebuild/Run dice:
Specify only objects that have changed (Build) or force the specification of all objects (Rebuild) belonging to the "Selected" main call tree (*).   Consider also objects references in the properties of KB Version (except Startup Object), Environment and Generator, with their call tree.
(*)The call tree of a main is "cut" on every other main found unless the Call tree for build option is set to full Entonces lo que hicimos fue revisar cuales son los objetos referenciados en las propiedades, de la Version, Environment y Generador. 
Habia  Objetos del GAM, Login y NoAutorizado Objeto de AfterConnect  MasterPage
Lo único sospechoso, era la masterpage, pues tenia un menu, que llamaba a muchos…

Nos va a ayudar la inteligencia artificial en el desarrollo de software?

Imagen
La inteligencia artificial está permitiendo resolver con computadoras en problemas que antes solo eran resolubles por seres humanos.

Como pueden afectar al ciclo de desarrollo de software?
Quienes desarrollamos con GeneXus, ya estamos usando algunos de estos algoritmos por ejemplo para la normalización de la base de conocimiento, el uso de reglas y la generación de código.  Todos estas cosas son aplicadas a la etapa de programación, pero puede aplicarse a alguna otra etapa del desarrollo?.

Análisis estático de código.  Supongamos que podemos alimentar a un sistema de inteligencia artificial con caso de código que dio problemas en otros sistemas y código que no dio problemas. Con suficientes ejemplos, podria detectar el patron que siguen determinados patrones de codificación y permitir solucionarlos.

Sin ser bugs, podrían detectar cuando un codigo no cumple con determinada regla. Si bien esto puede hacerse hoy en dia con algoritmos tradicionales el poder aprender de los nuevos casos, l…

De cuantas formas se puede modularizar un sistema?

Imagen
Este es un problema interesante, con unas cuantas consecuencias practicas.

Tengo una KB con n objetos y la quiero modularizar. Para simplificar, defino que quiero dividirla en K modulos, con  1<= k <= n.

De cuantas formas diferentes puedo modularizarla?

Sea S(n,k) la función que cuenta la cantidad de formas de modularizar, con n objetos y k modulos.

 Dividimos el problema en 2 casos excluyentes:

Caso 1: Hago un modulo solo con el elemento n. Me quedan n-1 elementos, para agrupar en k-1 módulos, que puedo escribir de la forma S(n-1,k.-1). 

Caso 2: n esta en un modulo con otros objetos. Esto es lo mismo que poner el objeto n en los k modulos que tienen los n-1 elementos restantes.



y puede escribirse como k * S(n-1,k) 

La cantidad de forma de modularziar entonces, seria la suma de ambos casos y puede escribirse de la forma:


      S(n,k) =  S(n-1,k-1) + k* S(n-1,k)

a estos numeros se los conoce como  números de Stirling de segunda especie.

La cantidad de formas de modularizar con n=7 y…

Manejo de Errores y claridad de codigo

Imagen
Supongamos que tenemos un procedure que recibe dos parámetros y devuelve otro.

Para hacerlo facil, recibe una moneda y una fecha y devuelve la cotización.

Procedure Cotizacion
(IN:&Moneda, IN:&Fecha, OUT:&Cotizacion)

Puede usarse de la forma:

&CotizacionHoy = Cotizacion('USD',&Today)

Hasta ahi, el codigo es bien entendible. 
Supongamos ahora, que se quiere hacer algun manejo de errores y para lograrlo, se le agrega un parámetro adicional de salida
Procedure Cotizacion (IN:&Moneda, IN:&Fecha, OUT:&Cotizacion, OUT:&CodigoError)
El procedure ahora ya tiene mas de parámetro de salida, lo cual  hace mas dificil su uso
Cotizacion.call('USD',&Today,&CotizacionHoy,&CodigoError) If &CodigoError='404'     Msg('No existe la cotizacion para la moneda en ese dia') Endif.  Si comparo
&CotizacionHoy = Cotizacion('USD',&Today)
con
Cotizacion.call('USD',&Today,&CotizacionHoy,&CodigoError)