Estoy inmerso en la migración de una kb de cierto porte (3500 objetos) de GX 8.0 a 9.0 y entre los diferentes puntos de diferenciación entre ambas versiones está el manejo de los nulos. He leído bastante documentación sobre esto en el wiki de GX e incluso algún comentario de algún proceso parecido en otros blogs.
La consulta viene dado por lo siguientes:
Se tiene la factura resuelta en dos trn, una para los datos del cabezal y otra para las líneas. La trn de las líneas tiene FK a otras tablas del sistema.
Ahora con el pasaje a la 9.0, se agregan automáticamente controles de integridad referenciales sobre las FK del cabezal (lo cual implícitamente es un cambio con respecto a cómo funcionaba en la 8.0, e implica sin más, que si ejecutamos dicha trn sin hacer ningún cambio, nos saltarán controles de integridad referencial sobre dichos atributos que puede ser no queridos).
Una resolución a esta situación particular y para “imitar” el comportamiento que antes se tenía sería agregar en dichos atributos la rule allownulls y pronto, todo quedará como antes.
Sin embargo, ¿es esta la solución más adecuada? ¿O lo mejor sería analizar todos los atributos de la kb y ver cuales deben de pasar a tener como valor NO el si permiten ser nulos? Y un poco más allá aún, ¿algún atributo debería poder llegar a ser nulo en una kb?
La pregunta viene dada ya que sin dudas, cuando una kb es pequeña, la resolución a tomar puede ser poco costosa, pero siendo una kb con más de 3500 objetos y buscando hacer una conversión lo mas prolija posible y aprovechando todas las virtudes de la 9.0 (y pensando una posterior migración a la Ev 1) sería bueno elegir el camino más indicado (aunque no fuera este el más sencillo o que implicara menos esfuerzo) pero hacerlo una sola vez y no hacer muchos cambios que a la larga, impliquen otra serie de cambios más
Espero haberme explicado correctamente. El generador es VFP C/S y el DMBS SQL Server. Cualquier aporte que puedas hacer desde tu experiencia sería de mucha ayuda
Desde ya muchas gracias
Estimado Lector:
- AllowNulls
- Nocheck
- Null()
- Nullvalue()
- IsNull()
- Initialize not referenced atributes (en el Modelo y Objeto)
- Generate Null for NullValue (a nivel del modelo y a nivel de objeto).
Dr. Gavilán:
En una KB, tengo un procedimieto que invoca un web service que fue importado usando del wsdl inspector y este ws da un error. Existe alguna forma de manejar este error?
El error del web services podría ser el clásico 500 internal server error, provocado por alguna division por cero que no se controla en el web service.
Estimado bloglector:
La forma de lograr que los programas GeneXus, no cancele al llamar a un web service con problemas, es utilizando la palabra clave CancelOnError.
Un ejemplo de como se codifica puede ser:
&Location = GetLocation( "MyLocation" ) //Location del web service se puede ver en el programa soapparm
&Location.CancelOnError= 2
&Carga.Execute( &Parametros)
if GetSOAPErr() <> 0
&Msg=GetSOAPErr().ToString() + GetSoapErrMsg()
Msg(&Msg)
endif
Le voy a solicitar que la próxima vez, ponga nombre en su solicitud, sino la misma puede no ser respondida.