Autonumber y Caching

Este es un lindo problema, que encontró Marcos hace unos días. 

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
 

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.

UPDATE: En Artech nos comentaron que arreglaron este error y va a entrar en el U7. 

Comentarios

  1. Otra solución seria no usar el autonumber

    ResponderBorrar
  2. Anonimo:
    Tenes 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.

    ResponderBorrar

Publicar un comentario

1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.