English|Português|Español
UsuarioContraseñaLogin

INICIO
CONFERENCIAS
INFO
blog 1 12

Karina me lo dijo hace 20 años y tenía razón

Un artículo de Gustavo Carriquiry, gerente de operaciones de Artech, que empieza con una anécdota personal sobre inicializar datos con transacciones (Business Components) y Data Providers; y que concluye con ejemplos prácticos de uso para GeneXus X Evolution 1, como lo es el video de Business Component y Data Providers.
Hace unas semanas descubrí que Karina tenía razón hace 20 años, sólo hizo falta que esos 20 años pasaran, que yo abriera mi mente y me animara a más. A modo de reconocimiento y por si ayuda a algún otro a abrir su mente, va este post.

Mi problema en ese momento

Hace muchos años que trabajo con GeneXus, empecé en un cliente hace como 20 años y recuerdo una llamada a soporte, en ese momento Karina era “soporte-documentación-test-capacitación-consultoría-y-aindamais”.

En ese momento yo estaba desarrollando un sistema para el control de flotas (stock de repuestos, manejo de combustible, manejo del taller, etc). Precisaba hacer un proceso de actualización de stock “batch” pero GX en ese momento sólo tenía Transacciones y Reportes. No existían los procedures (mucho menos workpanels ni nada de lo que existe hoy).

Llamé a soporte para ver como podía resolver el tema y Karina me intentó convencer de que lo que estaba haciendo estaba “conceptualmente mal”, que la actualización a la base de datos debia ser vía la transacción que era donde estaban las reglas del negocio y aseguraba la consistencia de los datos, etc, etc. Argumentación atendible.

Yo tenía 20 años, era un pollito de Facultad y Karina era muy convincente. A pesar de ello no me convenció y yo pecador (y vasco) hice un programita en DBase III Plus (¡que producto!) muy sencillo e integrable que resolvió el tema, por suerte no hubo que migrar eso a RPG porque ahí hubiera patinado un poco más :)

Mi problema hoy

Hace unos días tuve que hacer una aplicación y quería que tuviera Geografías (la típica de Pais/Estado/Ciudad) y tomé por el camino “conocido”.

Lo primero que hice fue definir la estructura geográfica que quería, bastante sencilla:

CountryID* CountryName (StateId* StateName (CityId* CityName))

Luego me puse a desarrollar por el “viejo_conocido_seguro_confiable” camino de un procedure con “news” que poblara los datos. Algo como:

new  
     CountryId=1  
     CountryName=”Uruguay”
Endnew
new  
     CountryId=1
     StateId=1
     StateName=”Montevideo”
endnew
new
     CountryId=1
     StateId=1
     CityId=1
     CityName=”Montevideo”
endnew
etc, etc, etc.


Estuve un rato de “copy/paste” bastante largo y aburrido, proceso en el cual cometí N errores (me suele suceder cuando me aburro) porque en un bloque ponía el código del país mal y me quedaban mal los datos y así sucesivamente.

Tiene que haber un modo mejor

Esto de “inicializar” datos es algo que suelo precisar porque hago muchas KBs “from scratch” y siempre el tener un juego de datos “razonable” es un problema. Creo también que es algo bastante común en procesos de implantación donde luego del “create” hay que poblar con datos iniciales la base de datos.

Anduve buscando algunas KBs a ver como lo tenían resuelto (¡aguante GXserver!) y me encontré en varios lugares la misma solución del procedure y los news. Incluso alguna parecida a lo que quería pero no lo suficiente para re-usarla a bajo costo.

Me acordé de un DataProvider que publiqué hace tiempo en el wiki, uno que hice con un programita que leía los ISO codes de un excel y generaba un TXT con el formato DP, luego “copié/pegué” del TXT en el DataProvider. A veces practico esos deportes.

Ese Data Providers está bueno, pero no tiene los estados ni ciudades… en fin… no aplicaba mucho a mí caso, sin embargo por el lado de los DP parecía venir la solución.

Al final de la historia (así la hago corta) me quedé con una solución con DataProviders que retorna los datos y un procedure que en lugar de un “new” usa un business component, también usé autonumber y un par de serial para sacarme de encima el lío de la primary key.

A continuación un video de cómo lo hice:

Ejemplo/Escenario de uso de BC y DP from guscarr on Vimeo.

Ventajas que encontré

1. Más simple. Quiero poblar la estructura de Countries, entonces Drag&Drop de la misma a un DP y alguna cosita más y listo.

2. Más barato. Me llevó mucho menos tiempo la versión inicial. Si bien tuve un trabajo de “copy/paste” fue más sencillo, al menos no me preocupé para nada de los CountryCode, StateCode, etc.

3. Más claro. Separé el “alta” de la “fuente de datos”, con esto si quiero agregar datos no tengo que meterme con los news ni nada, simplemente los agrego en el  DP.

4. Más potente. En mi caso era una estructura bastante sencilla con reglas sencillas, pero igual me resolvió el alta, la numeración y las reglas que tuviera o vaya a tener asociadas al Country, etcétera (si le tengo que agregar alguna regla a la TRN de Countries sé que no tendré que modificar el procedure, esto es importante para la consistencia/calidad de los datos).

5.  Más re-usable. Mi desafío ahora es evitarme el copy/paste e intuyo que via el Data Provider Generator y servicios como los de freesbase.com no tendré mayores inconvenientes en hacerlo (quedará para cuando pueda bucear en freebase.com un poco más).

En cualquier caso si esto lo fuera a implantar en un cliente tal vez la fuente de datos sea otra y habiendo separado los datos del alta en si creo que será más fácil adaptarel “input” del DP.

En fin, unas cuantas ventajas del uso de DP y BC en un escenario como el descrito. Luego de “abrir mi mente” respecto a los DP y BC creo que hay muchos más escenarios de uso posibles para los mismos así que mi mensaje es solamente ese: mantenga su mente alerta, hay nuevas y mejores soluciones para nuevos y viejos problemas.

Ahh… me olvidaba: Karina, tenías razón, sólo se trata de abrir la mente y para la actualización alcanza la transacción (o casi).


* Publicado en Blog de Gustavo Carriquiry

Relacionado
Data Providers y Business Components para inicializar datos
Uruguay centraliza toda la información sobre comercio exterior e inversiones en Siicex, un portal desarrollado en GXportal y GeneXus
Curso de Seguridad en aplicaciones GeneXus
GeneXus X Evolution 3 Upgrade 2 Preview 3
GXquery 4.0 Upgrade 3 ¡Liberado!
LightCRM App para Windows Phone, Android e iOS desarrollada con GeneXus X Evolution 3 ¿La probaste?
¡919 certificados GeneXus! #GeneXusLoMejorDe2014
¡64 novedades en GeneXus MarketPlace!#GeneXusLoMejorDe2014
¡33 nuevas apps en el GeneXus ShowCase!#GeneXusLoMejorDe2014
¡23 Casos de éxito! #GeneXusLoMejorDe2014
Certificación SAP con GeneXus ERP Connector and Explorer #GeneXusLoMejorDe2014
GeneXus Cloud Computing #GeneXusLoMejorDe2014
Internet de las cosas #IoT #GeneXusLoMejorDe2014
2014 el año de GeneXus X Evolution 3 #GeneXusLoMejorDe2014
Carnaval Trivia 2015: la app para fanáticos de la fiesta de Momo desarrollada con GeneXus X Evolution 3