miércoles, 10 de junio de 2009

Data Providers y Business Components para inicializar datos

El ejemplo de Easy Invoicing mencionado en http://samples.genexus.com ahora usa Data Providers, Business Components y la nueva funcionalidad de Initial Value para cargar los datos.

Antes usaba news. Por qué? porque uno por inercia no cambia. Uno se acostumbró a hacer las cosas de determinada forma. Es relativamente rápido, funciona y listo, ya está, por qué cambiar?

Si se conoce la potencia de los Data Providers, el por qué queda claro.
Vean la imágen que pone en evidencia las ventajas.

En la imágen se ve que
- queda mucho más legible la solución nueva porque queda claro cuál registro del segundo nivel corresponde a cuál del primero
- no preciso usar variables auxiliares para obtener el resultado de autonumber
- no preciso serializar yo ni autonumerar
- preciso hacer menos asignaciones porque las cosas se resuelven en el Business Component. Un ejemplo es InvoiceDate: A nivel de atributo especifiqué la propiedad InitialValue en Today(). Otro ejemplo es el "último del serial" también.
- no vuelvo a programar reglas de negocios en el procedimiento evitando errores de programación o inconsistencias y bajando costos de mantenimiento.

Más Notas: La propiedad Initialvalue, a especificar en un Dominio o Atributo,en GeneXus X Evolution 1 es como un default de defaults.
En el ejemplo, &Invoice es de tipo Invoice siendo Invoice la transacción del mismo nombre.
&InvoiceCollection es una Collection de Invoices. Las variables no las precisé ni definir ... GeneXus lo hace solo porque usé la nomenclatura adecuada.


La aplicación está para probar online en ejecución en http://samples.genexus.com/easy .
La Knowledge base está online en el GeneXus Server público y gratuito disponible para toda la comunidad GX http://gxserver.genexusx.com/ (lo cual permite visualizarla via browser o bajarla y y probarla con su GeneXus X Evolution 1 en forma local).
Recomendación de la casa: bajarse el último nightbuild de evolution 1.

Esto es para generar inercia de cambio, para que por inercia ... cambiemos y no nos quedemos.

5 comentarios:

Ricardo Oliveira dijo...

Parabéns, Armin

Era isto mesmo que procurávamos no GX. Mas para isto teremos que definir nossa TRN como BC.

Uma dúvida, no exemplo final(dp) , Apenas o &bc.Save() irá fazer o new nos registros ?? não entendi esta parte. ele não faz apenas o Update ??

Armin Bachmann dijo...
Este comentario ha sido eliminado por el autor.
Armin Bachmann dijo...
Este comentario ha sido eliminado por el autor.
Armin Bachmann dijo...

(corrección a respuestas anteriores)
Hola Ricardo,
Sí, hay que definir esas transacciones como Business Components.
Se precisa además para que funcione el Full text search, así que ya las tenía definidas así.
Y ahí me mostraste otra ventaja de usarlo así: No tengo que llamar a un TextSearch.ReindexAll() luego de los news, porque al salvarlo como BC y el BC tener la propiedad Searchable en True ... ya queda indexado !!!
Voy a eliminar entonces el botón Reindex en el web panel init y subir la nueva versión al gxserver público ... podrás verlo ahí en unos minutos ...

Sobre si hace insert o update el &BC.Save(): Hace insert cuando el registro no existe y hace update cuando existe.

Muchas Gracias Ricardo!

Gabriel Medina "gab" dijo...

Armin,

Buen Post: me vine desde el link de Carriquirry: http://x.vu/Karina20.


Ya se los envié a varios.

Saludos,
gab