10/13/2010

Prueba Comentarios

|


Estimado señor Gavilan:


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:

El manejo de Nulos en GeneXus (y en las bases relacionales en general) es un tema controversial. El mismo Date (quien hizo gran parte de la teoria de los DBMS relacionales) se queja frecuentemente de que el agregado de los nulos en las bases de datos fue una mal decision.

Con GeneXus, la cosa es aun mas complicada pues ademas del nulo de la base de datos, se tiene los valores que GeneXus considera nulos, que pueden ser los mismos que el de la base o simplemente blancos y ceros.

No es obligatorio en 9.0 utilizar integridad referencial y tambien se puede mantener el funcionamiento tal cual se tenia con 8.0.
Para migraciones de KB de 3500 objetos, te recomiendo fuertemente que mantengas las propiedades del modelo en el valor compatible y con eso logres el mismo comportamiento.
Si la KB se convierte desde 8.0 (abriendola con 9.0) te va a quedar de esa forma y van a seguir funcionando las reglas nockeck, allownulls, tal cual lo hacen en 8.0.

Una vez que la KB esta convertida y funcionado en 9.0, puedes empezar a utilizar el nuevo manejo de nulos de forma de poder dejar la KB mas prolija y con mejor funcionalidad.
Es importante diferenciar entre una

Migracion: Se pasan los objetos a la nueva version, sin cambios en las funcionalidades, obteniendose una aplicacion equivalente a la anterior, solo que en una version mas nueva.
Conversion: Se cambian funcionalidades de la aplicacion para mejorarla.

Si sigues mis recomendaciones, lo importante es que queden las propiedades de diseño de:
Empty as Null como 8.0 o prior
Nulls Behavior como 8.0 o prior.

Y que todos los valores de los atributos tengan Compatible en la propiedad NULLS.

Despues que ya tienes la aplicacion funcionando correctamente puedes hacer los ajustes necesarios para que funcione de forma mejorada con el manejo de los nulos ampliado que vienen con 9.0.


Hay varias propiedades de las KB 9.0 que influyen en el funcionamiento de los nulos.

A nivel de diseño:

Empty as Null.
Nulls Behavior.

A nivel de atributos en transacciones


A nivel de reglas de transacciones

  • AllowNulls
  • Nocheck

Y las funciones

  • Null()
  • Nullvalue()
  • IsNull()

Los Metodos
.IsNull()
.SetNull()
.IsEmpty()
.SetEmpty()

Otras Propiedades

  • Initialize not referenced atributes (en el Modelo y Objeto)
  • Generate Null for NullValue (a nivel del modelo y a nivel de objeto).

Lectura Adicional:


Es un tema escabroso y divertido.

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.


Idolatrado Dr. Gavilán:
Me ha tocado en suerte gerenciar un grupo de 10 personas, que tienen que compartir 2 oficinas, para la diseño/programación/testeo de aplicaciones. Algunos integrantes del grupo se quejan que tienen frio y otros que tienen calor.
Que puedo hacer?.

En mi experiencia profesional, he tenido oportunidad de interactuar y estudiar diferentes grupos de trabajo, la mayoría dedicados a desarrollar aplicaciones.

El entorno tipico de trabajo para desarrolladores es en oficinas iluminadas con buenos escritorios, sillas y aire acondicionado. Al tener la mayoría de las necesidades básicas satisfechas, dentro de los grupos se producen discusiones por otros temas.

Una de las discusiones mas comunes es por el control del aire acondicionado y a que temperatura fijarlo. Generalmente las mujeres son mas friolentas que los hombres.

Conviene organizar los escritorios agrupados de tal forma que los mas friolentos esten agrupados de forma en la zona que pueda calentarse mejor de la oficina y los demas en la mas fria.