Libertya Components API

Libertya Components API


La arquitectura de Libertya Components se constituye en uno de los ejes fundamentales de la capacidad de actualización, integración y escalabilidad de Libertya ERP.

En todo framework con grandes capacidades de personalización, existe siempre un problema de fondo cuya solución no es sencilla: La forma de realizar actualizaciones generales de versiones sin afectar los desarrollos y personalizaciones generados por sus usuarios. El alto grado de cohesión entre datos, metadatos y código fuente que presentan estas aplicaciones, requiere que el procedimiento de actualizar versiones - SIN afectar personalizaciones preexistentes - sea un objetivo técnico y comercial que demanda un gran esfuerzo de trabajo.

Desde otro punto de vista, comunmente se presenta la necesidad de crear soluciones a un problema específico ( ajustes a legislaciones nacionales, operatorias concretas de ciertas industrias, etc. ) que puedan ser utilizadas en más de una instalación. Debido a ésto, la posibilidad de desarrollar módulos genéricos (Plugins) que satisfagan estos objetivos se torna una necesidad imperiosa, que no se puede satisfacer si previamente no se diseña una arquitectura adecuada para normalizar y automatizar las actividades necesarias.

La Arquitectura Libertya Components responde a estas problemáticas, presentado beneficios tanto para el desarrollador como para el usuario final. El desarrollador simplifica su trabajo gracias a la versatilidad que provee la API de Components y a la capacidad de replicación de los metadatos para lograr resultados de manera ágil. Por otro lado el usuario final sabrá que cuenta con una aplicación cuyo núcleo funcional puede ser constantemente actualizado, más allá de los componentes extras que tenga instalados, y que éstos a su vez, también podrán ser actualizados cuando sea necesario para dar versatilidad y capacidad de integración a su entorno de trabajo.

Objetivos

La Arquitectura Libertya Components esta llamada a cumplir los siguientes objetivos:


Desarrollar componentes independientes del núcleo funcional de la aplicación, los cuales a su vez pueden ser:


  • Componentes específicos para una puesta en producción, definiendo reglas de negocio acordes a cada requerimiento, invocaciones a procesos, emisión de reportes, etc.

  • Componentes genéricos (plugins) que brinden soluciones encapsuladas a requerimientos generales comunes en la tecnología de la información.

Desarrollar módulos para brindar soluciones orientadas a cumplimentar con las normas y legislación vigentes de un país (localizaciones).


  • Implementar interfaces especiales con otras aplicaciones, a fin de lograr una integración vertical con las mismas.

  • Actualizar el núcleo funcional de la aplicación de manera independiente y transparente respecto de los componentes que ya se encuentren instalados.

  • Realizar replicaciones del diccionario de datos de manera sencilla, garantizando unicidad en todos los casos para todas las tablas y registros, a lo largo de todos los componentes instalados.

  • Exportar e instalar componentes de manera sencilla, tanto para los desarrolladores como para los usuarios de la aplicación.

El ciclo virtuoso: construir en base a lo ya construido


La arquitectura Libertya Components contempla la posibilidad de desarrollar un componente basado en otro componente, para aprovechar de esa forma funcionalidad genérica ya desarrollada: Por ejemplo, es posible crear un stack de componentes en el cual se tiene una customización específica para un cliente, que se apoya en otro componente de interfaz con otros sistemas, y que a su vez este último depende de una localización ( adecuación a la legislación de un País ) ya instalada.


Cada una de estas capas utilizan la funcionalidad que brinda la Artquitectura Libertya Components para su correcta implementación e interacción:


Libertya components

Mecanismo técnico de desarrollo de Componentes


Para lograr lo previamente expuesto, se definió una API específica para su uso, en conjunto con una serie de convenciones y reglas a respetar, a fin de garantizar el correcto desarrollo de los componentes.


El proceso de desarrollo de un componente (plugin, localización, etc.) puede resumirse en los siguientes pasos:


  • Tomar el release mas actualizado de Libertya desde www.libertya.org (fuentes y base de datos).

  • Definir un nuevo componente y version, para luego dar inicio al desarrollo. A partir de este momento, toda modificación al diccionario de datos sera registrada en la bitácora.

  • Desarrollar el plugin (clases java, datos y metadatos) respetando las especificaciones correspondientes de la API.

  • Una vez finalizado el desarrollo del plugin, detener el mismo para finalizar el registro de la bitácora.

  • Exportar el plugin, especificando la version a exportar.

  • Crear el archivo JAR con las clases Java compiladas y los archivos de metadatos correspondientes.

Replicación de metadatos

La metología de desarrollo de componentes ayuda al desarrollador a fin de evitar tareas de replicación manual de metadatos, configuración de perfiles, creación de entradas de menú, etc.
Simplemente registrando un nuevo componente y versión, se generará una bitácora cada vez que se modifiquen o incorporen registros del diccionario de datos de la aplicación. Esta bitácora luego sera convertida a formato XML al momento de exportar la versión de componente correspondiente. Por su parte este archivo XML, en conjunto con otros archivos más y los compilados correspondientes al componente, se almacenan en un JAR que luego será el archivo a utilizar a fin de realizar una instalación.
De esta manera, toda modificación al diccionario de datos que comprendió el desarrollo del componente será automáticamente replicada en la instancia donde se realice la instalación.
El exportador de componentes también ayuda al desarrollador con las modificaciones a nivel SQL. Además del XML de metadatos, generará un archivo con sentencias SQL de creación o modificacion de tablas, vistas, columnas, etc. basado en las modificaciones realizadas sobre dicha versión de componente. Este archivo SQL es un componente más del JAR, que se ejecuta previo al XML.

Modificaciones funcionales

El API de la Arquitectura Libertya Components brinda la funcionalidad necesaria para que un componente pueda implementar o redefinir los típicos puntos de entrada tales como eventos al guardar o eliminar registros, procesamiento de documentos, modificaciones en los campos, ejecución de procesos e informes, etc.
Para cada uno de estos puntos de entrada, el framework buscará, en tiempo de ejecución, los componentes activos que deban ser invocados a fin de ejecutar la lógica específica inherente a cada uno de estos componentes.
Es posible interpretar a las partes funcionales de un componente como asistentes que permiten redefinir o ampliar las siguientes características del framework de Libertya:

  • Métodos de persistencia: beforeSave()afterSave()beforeDelete()afterDelete().


    • Previamente y posteriormente al momento de guardar o eliminar un registro, se disparan en Libertya ciertos métodos a fin de realizar validaciones o configuraciones específicas para cada una de las tablas del framework. Mediante la Arquitectura Libertya Components, un componente podrá ampliar o modificar completamente esta lógica implementando nuevos métodos pre y post, tales como preBeforeSave()postAfterSave()preBeforeDelete() y postAfterDelete().


  • Métodos de lógica de documento: prepareIt()completeIt()voidIt()closeIt(), etc.

    • Ciertas tablas en Libertya tienen un mayor peso debido a que la información almacenada en éstas representa documentos tales como pedidos, facturas, pagos, imputaciones, etc. Estos documentos respetan un flujo de ejecución de estados que inicia en borrador y finaliza en completado, y donde cada transición implica la ejecución de lógica específica en sendos métodos para cada caso. La Arquitectura Libertya Components brinda las herramientas necesarias para poder redefinir esta lógica mediante la implementación de métodos tales como prePrepareIt(),postPrepareIt()preCompleteIt()postCompleteIt()preCloseIt()postCloseIt(), etc.

  • Eventos en campos: Callouts

    • Durante el tiempo en que un usuario se encuentra editando un campo de un registro, en Libertya se disparan eventos denominados Callouts que permiten realizar acciones en función de lo que el usuario esté ingresando en ese momento. Esto permite por ejemplo setear otros campos y realizar validaciones incluso antes de que dicho registro sea guardado. Respetando una convención específica definida por la Arquitectura Libertya Components, es posible ampliar o redefinir estos Callouts para cualquier campo de las tablas que comprenden la base de datos de Libertya.

  • Procesamiento masivo: Informes y Procesos

    • Mediante la Arquitectura Libertya Components, también es posible redefinir por completo la lógica comprendida en la ejecución de procesos e informes. Gracias a ésto, es factible lograr ajustes especiales en los reportes y listados según sea necesario, en cuanto a datos y visualización se refiere.

  • Otras funcionalidades: Ventanas Info, funcionalidad Crear Desde, etc.

    • La posibilidad de redefinición de ventanas Info (visualización en pantalla de Artículos, Entidades Comerciales, etc.) y de los procesos Crear Desde (generación de documentos a partir de otros documentos) son dos ejemplos de la potencialidad que la Arquitectura Libertya Components brinda a fin de lograr versatilidad a lo largo de toda la aplicación.

  • Además de esto, se realizó una importante ampliación del generador de clases (GenerateModel), a fin de lograr la creación automática de clases de modelo específicas para componentes.

Instalación de componentes
LA INSTALACIÓN DE UN PLUGIN ES UNA TAREA SENCILLA QUE REQUIERE CONOCIMIENTOS BÁSICOS PARA PODER LLEVARLA A CABO:

  • Detener el servidor de aplicaciones.

  • Copiar el nuevo JAR dentro del directorio lib del Servidor de Aplicaciones.

  • Modificar el archivo build.xml a fin de agregar una linea referenciando al JAR.

  • Reconfigurar el servidor a fin de propagar el nuevo JAR.

  • Ejecutar Instalador de Componentes y Plugins, seleccionando el JAR correspondiente.

  • Salir de la aplicacion e iniciar el servidor.

Conclusiones

El presente documento expuso en términos generales los beneficios que traerá la utilización de la Arquitectura Libertya Components, no solo como una herramienta que permite normalizar las frecuentes actividades que comprenden el desarrollo de software, sino también como una manera de lograr una metodología de trabajo adecuada que permite el encapsulamiento funcional de los componentes a desarrollar.


Las herramientas y API provistas ayudarán a los desarrolladores en la constante tarea de mejorar la calidad de los productos generados, así como a minimizar los tiempos de desarrollo y la posibilidad de errores durante el proceso de replicación de metadatos.


La posibilidad de “apilar” múltiples componentes en donde uno se apoya sobre otro, y la independencia en la actualización de cada uno de éstos brinda la versatilidad necesaria para adpatar cada instancia de Libertya a los requerimientos específicos de cada cliente.


Por otra parte, la independencia en la actualización del núcleo funcional, garantiza a los desarrolladores de componentes que periódicamente contarán con nuevas versiones de dicho núcleo, logrando de esta manera que todo usuario de Libertya se encuentre al día con las nuevas necesidades que vayan surgiendo con el tiempo, más allá de los componentes que se encuentren instalados.