Autonumber y Caching
Este es un lindo problema, que encontró Marcos hace unos días.
Cual es el problema?. En la variable &Autonumber2 está recuperando el valor del primer autonumber. Haciendo un trace detallado de la corrida, Marcos encontró que se esta cacheando la sentencia
SELECT @@identity
Revisando el codigo generado y haciendo algunas suposiciones (sería un SUPOSITORIO?), infiero que como esta sentencia no tiene tabla, no está recuperando correctamente el TTL (Time to live=El tiempo que la sentencia vive en el cache) en el momento de generar el programa.
Por ahora, "solucionamos" el problema deshabilitando el cache, aunque no es una solución definitiva.
PD: Sigo con mi campaña de la apertura de la GXClasses. Si tuvieramos la GXClasses podriamos haber agregado un if, de forma que no agregue en el cache si la sentencia es "SELECT @@IDENTITY". No seria una solucion definitiva, que creo que va por el lado del especificador/generador, pero al menos nos permitiria mantener el cache habilitado.
Se tiene una aplicación GeneXus 9.0, que genera Java y tiene el Cache de sentencias habilitado.
Entre las tablas, hay dos que tienen una clave que genera automaticamente numeros (Propiedad Autonumber en los atributos claves) y no se cachean.
New // Tabla Autonumber1
Att1Sec='AlgunValor'
EndNew
&Autonumber1=Att1Clave //Recupero el ultimo numero dado en la primer tabla
//Mas codigo sobre otras tablas algunas con Cache.
New //Tabla Autonumber2
Att2Sec='OtroValor'
EndNew
&Autonumber2=Att2Clave //Recupero el ultimo numero dado en la segunda tabla
SELECT @@identity
Revisando el codigo generado y haciendo algunas suposiciones (sería un SUPOSITORIO?), infiero que como esta sentencia no tiene tabla, no está recuperando correctamente el TTL (Time to live=El tiempo que la sentencia vive en el cache) en el momento de generar el programa.
Por ahora, "solucionamos" el problema deshabilitando el cache, aunque no es una solución definitiva.
PD: Sigo con mi campaña de la apertura de la GXClasses. Si tuvieramos la GXClasses podriamos haber agregado un if, de forma que no agregue en el cache si la sentencia es "SELECT @@IDENTITY". No seria una solucion definitiva, que creo que va por el lado del especificador/generador, pero al menos nos permitiria mantener el cache habilitado.
UPDATE: En Artech nos comentaron que arreglaron este error y va a entrar en el U7.
Otra solución seria no usar el autonumber
ResponderBorrarAnonimo:
ResponderBorrarTenes razon, pero esta opcion implica cambiar bastantes cosas en el codigo.
Y seria cambiar codigo para evitar un error, sin arreglarlo, cosa que trato de evitar lo mas posible.
Deshabilitar el cache, alcanza con cambiar una linea en el archivo de configuracion, lo cual es mucho mas apropiado hasta encontrar una solucion definitiva.