ADempiere: Diccionario de Aplicación

El diccionario de Aplicación es uno de los aspectos más poderosos de ADempiere. Virtualmente toda la aplicación puede ser manejada mediante cambios en el diccionario. De manera que el desarrollo mediante la "escritura de código" es drásticamente reducida porque la mayoría de las configuraciones se pueden hacer directamente desde la herramienta sin que se requiera compilar o reconstruir el sistema.
Como se puede ver en la imagen, el diccionario de diccionario de aplicación permite crear tablas, columnas, ventanas, pestañas, campos, procesos, reportes, flujos de trabajo, formas, y mucho más.

Uso del Diccionario

ADempiere esta configurado por defecto con la compañia System. Esta compañia tiene el usuario "SuperUser" con el cual se podra realizar la administracion general del sistema (hacer uso del diccionario de datos).
Con este usuario podremos:
  • Crear compañias (configuracion inicial)
  • Crear pantallas
  • Administrar de entidades
  • Crear de validaciones y reglas
  • Configurar reportes y procesos
  • Definir la estructura de la base de datos
En una publicacion anterior hable sobre todo el proceso de creacion y configuracion de la compañia. En este post me concentro en el proceso de administracion de menu, ventana, pestaña y campo.

Menu Principal

Ingresando con el usuario "SuperUser" y seleccionando el rol "System Administrator" podremos acceder al arbol de menu principal del sistema, ubicado en Menu » Administracion del Sistema » Reglas Generales » Reglas del Sistema » Menu. Desde aqui se pueden visualizar y administrar todas las ventanas, flujos de trabajo, tareas, reportes, procesos y formas que se han creado esten o no activos.
Cualquier elemento que creemos en esta seccion podremos usarlo para la configuracion de los menu personalizados asociados a los roles que luego se iran creando dependiendo la necesidad de la compañia.

Menu Personalizado

Estos menu personalizados se crean usando el usario "SuperUser" y seleccionando el rol administrador de la compañia (Ej. CompañiaAdmin). Los podemos crear ya sea haciendo zoom en el campo arbol de menu cuando estamos creando el rol o desde la ventana "Arbol e Imagen de Nodo" ubicado en Menu » Administracion del Sistema » Reglas Generales » Administracion del Sistema » Arbol e Imagen de Nodo. Una vez creado el menu o arbol, se procede a realizar la personalizacion desde la ventana (forma) "Mantenimiento del Arbol" ubicada en Menu » Administracion del Sistema » Reglas Generales » Administracion del Sistema » Mantenimiento del Arbol. Desde aqui, de una manera interactiva, se va indicando que elementos del menu principal podra acceder el usuario que tenga asociada el rol al que se le asigne este arbol o menu personalizado.

Rol & Usuario

Los usuarios se crean usando el rol administrador de la compañia (Ej. CompañiaAdmin). Cada usuario creado debe ser asociado a un rol en el sistema para que pueda completar su acceso a las funcionalidades del mismo, las cuales estaran delimitadas por el rol al que este asociado.
Entonces, todo usuario tiene asociado un rol y todo rol tiene asociado un menu personalizado.
Recomiendo ver los siguientes videos para una mejor comprension de lo que he estado escribiendo ;)

Videos

Parte 1:

Muestra:

  • Arquitectura del diccionario de datos
  • Estructura del menu de acción ventana
  • Usuario y Rol con que se deben realizar las configuraciones en diccionario de aplicación
  • Creación de un menu My New Menu {Mi Nuevo Menu} del tipo entidad acumulada (Summary)
  • Creación de un menu de acción ventana llamado My Employees {Mis Empleados} usando una ventana registrada en el diccionario de aplicación » Employee Registration {Registro de Empleados}. 
  • Asignación del menu creado a un Rol {Creación de un Rol}.
  • Traducción de los elementos creados.

Los siguientes dos videos muestran:

  • Creación de un menu del tipo ventana llamado My New Window {Mi Nueva Ventana} registrando una ventana, nombrada igual que el menu, usando tablas existentes en el diccionario de aplicación.
  • Especificación del funcionamiento de los campos en la Ventana, Pestaña & Campos.

Parte 2(a):

Parte 2(b):

Parte 3:

Este video muestra la funcionalidad de Centrally Maintained {"Mantenido Centralmente"}.

Parte 4:

Contiene:

  • Revisión de las ventanas creadas (menu).
  • Creación de una pestaña incluída.

Parte 5(a):

Contiene:

  • Creación de un menu de acción ventana mediante el registro de una ventana y una tabla & columna para relacionarla con una de las pestañas de la ventana.

Ventana, Pestaña & Campo

En los videos, aparte de mostrar la creacion de menu y roles, se mostro la creacion de ventanas y tablas pues todos esos elementos estan muy relacionados.
Las ventanas estan asociadas a los menu de accion ventana, cada pestaña de una ventana esta asociada a una tabla o vista de la base de datos y cada campo de las pestaña esta asociado a una columna de la tabla o la vista.
Las ventanas se pueden crear de distinto tipo: Las de tipo mantenimiento indican que permitiran incluir y editar registros. Las de tipo transaccion, aparte de la edicion y creacion de registros, se usan con aquellas tablas que usan el campo "processed", son usadas generalmente para manejo de documentos y validaciones con flujos de trabajo. Las de solo consulta permite acceder a los datos pero sin poder modificarlos y tampoco sin poder realizar ningun registro.
Ademas de establecer el tipo de ventana se pueden realizar configuraciones propias por pestaña. Es decir, podemos crear una ventana del tipo mantenimiento y sin embargo establecer la pestaña como solo lectura, o quitarle la opcion de incluir registros, de manera que me permita modificar los registros existentes pero sin crear nuevas lineas en la base de datos (Se detalla en los videos anteriores)

Tabla y Columna

Esto está directamente relacionado a la base de datos. Esto es como una metadata de las tablas de la base de datos traducida a la notación de ADempiere.

Tabla

  • El nombre de la tabla es sensible a mayúsculas y minúsculas. Al registrar una tabla en el diccionario debe tenerse en cuenta la siguiente estructura para el registro: PREFIJO_Nombre_De_Tabla
  • El ID de la tabla debe tener el nombre exacto de la tabla + el sufijo ID, osea: PREFIJO_Nombre_De_Tabla_ID
  • View (Vista): Esta opción permite definir la tabla como una vista, no se necesita sincronizar con la base de datos. Se puede usar la opción "vista" para hacer la tabla de solo-lectura.
  • Data Access Level (Nivel de Acceso de Datos): Usado para definir el acceso por defecto para los roles. Generalmente se coloca como Client + Organization ("Industria + Planta")
  • Maintain Change Log (Mantiene Bitácora de Cambios): Cuando se selecciona esta opción todos los cambios hechos a esta tabla son guardados en la tabla AD_ChangeLog.
  • Window (Ventana): Define la ventana a la que se accederá cuando se haga un acercamiento en el campo identificador de esta tabla. Activa la funcionalidad "zoom" (acercar). Se puede definir una ventana diferente para los procesos de compras (PO Window (Ventana OC))
  • Records deleteable (Registros Eliminables) - para habilitar o deshabilitar el borrado de registros en la base de datos.
  • High Volume (Volumen Alto) - Indica si se mostrará la ventana de búsqueda para seleccionar registros de esta tabla.
  • Entity Type (Tipo de Entidad): Se indica la entidad a la cual pertenece el registro (la tabla). En el caso de los desarrollos en INVEPAL el tipo de entidad es ZRESMA.
  • Create Columns from DB (Crear Columnas desde Base de Datos): Si se crea una tabla en la base de datos (con pgadmin) o realizar cualquier cambio en alguna tabla (ALTER TABLE ADD/MODIFY) se pueden traer los cambios al diccionario mediante esta opción.
  • Copy Columns From Table (Copiar columnas desde la tabla): Este es el proceso más rápido para crear una tabla. Permite seleccionar una tabla similar a la que se debe crear y este proceso traerá las columnas exactas como la tiene la otra tabla renombrando el ID para que se corresponda con el nombre de la tabla nueva. Luego se puede editar las columnas (agregar / borrar / cambiar)y al finalizar solo se debe presionar el botón "Synchronize Column" (Sincronizar Columnas) para crear la tabla o añadir las columnas en la base de datos.
  • Centrally Maintained (Mantenido Centralmente): Indica que tomará las traducciones que tenga definido en el Elemento.

Columna


  • System Element (Elemento del Sistema)– Seleccionando el ELEMENTO se heredará por defecto el nombre de la columna en la base de datos, nombre, descripción y traducción del elemento. Si se está creando una columna nueva y no hay registro de un elemento similar al que se requiere crear entonces debe hacerse el registro del nuevo elemento haciendo ZOOM (Acercar) sobre este campo.
  • DB Column Name (Nombre de la Columna en BD) – El nombre exacto de la columna en la base de datos.
  • Column SQL (Columna SQL) – Usado para crear columnas virtuales. Estas muestran información general, o información de otras tablas sin la necesidad de ser agregadas como columnas reales en la base de datos. Se construyen con una sentencia SQL de la tabla principal.
  • Reference (Referencia): Tipo de dato de la columna. Cada referencia corresponde a un comportamiento diferente en la interfaz. Note cuidadosamente la diferencia en Table (Tabla) y Table Direct (Tabla Directa). Table Direct necesita tener una correspondencia exacta con la tabla a la que se está refiriendo. También debe notar la diferencia entre Table y Search (Búsqueda). Para los campos con tipo de referencia Button se puede definir un proceso asociado. Para las referencias tipo monto, fecha, entero, número, cantidad, se pueden definir rangos de mínimos y máximos.
  • Validation (Validación Dinámica): Permite configurar cambios dinámicos en el campo.
  • Reference Key (Llave de Referencia): Listas estáticas definidas para la columna específica.
  • Value Format (Formato del Valor): Para columnas con el tipo de referencia String se puede definir un formato específico. El formateo de ADempiere puede forzar el uso de espacio, cualquier letra, mayúscula, minúscula, letras & dígitos, sólo dígitos, etc. Por ejemplo: Definir el formato para números de teléfono.
  • Default Logic (Lógica Predeterminada): Variables de Contexto - Sentencias SQL. Se pueden definir muchas lógicas separadas por “;”
  • Key Column (Columna Clave): Sólo se puede definir una columna calve por tabla (Llave primaria) Normalmente es el ID, no mostrado a los usuarios.
  • Parent Link Column (Columna de Enlace a Tabla Padre) – Define la relación hijo con una o más tablas (llave foránea). Pueden haber tablas sin ID principal pero con uno o más enlaces a tablas padre (como Tablas de Acceso).
  • Mandatory (Obligatorio): Indica si el campo será obligatorio.
  • Updateable (Actualizable): Indica si el campo será actualizable.
  • Always updateable (Siempre Actualizable): Hace que el campo sea siempre actualizable aún después de haber sido procesado.
  • Encryption (No Encriptado): Solo para campos de referencia tipo String. No tiene proceso de reversión. Se puede perder datos, se necesita asegurar el ancho de la columna para que pueda guardar todos los valores actuales.
  • Read only logic (Lógica de Solo Lectura): Condición para que el campo sea de solo lectura. Por defecto los campo IsActive y Processed marcan el registro como de solo lectura sin necesidad de definir la lógica aquí.
  • Mandatory logic (Lógica Obligatorio): Condición necesaria para que este campo sea obligatorio.
  • Identifier (Identificador): Una o más columnas (normalmente value y/o name) que serán mostradas en listas y para referencias de reportes. Los identificadores son mostrados en el orden definido con la secuencia de los campos.
  • Callout: Pedazo de código (customization) para llenar otros campos o para validaciones simples. No se recomienda usarlo para validaciones.
  • Selection column (Columna de Selección): Define las columnas que serán mostradas en la ventana de búsqueda.
  • Translated (Traducida): Para definir traducción para una columna. En este caso se necesitará crear una tabla y una pestaña con el mismo nombre que la original pero añadiendole el sufijo _Trl y crear la tabla con la misma llama de la tabla padre, columna para el lenguaje y columna para la traducción.
Las tablas pueden crearse:
  • Desde la base de datos hacia el diccionario de aplicación

  • Desde el diccionario de aplicación hacia la base de datos

Conceptos Importantes

Tipo de Entidad

El tipo de entidad determina quien es el dueño de las entradas que se están haciendo en el diccionario de aplicación.
El tipo de entidad USER MAINTAINED cuidará las tablas que crees para que no sean sobreescritas en futuras migraciones. Las tablas creadas con el tipo de entidad DICTIONARY son sujeto de migraciones.

Elemento

Es el repositorio central para el nombre de los campos, descripciones y comentarios/ayudas, así como también sus traducciones.
Definen los nombres, etiquetas, descripciones y ayudas dependiendo el contexto
Son mantenidos centralmente (al "Sincronizar la Terminología" del sistema todos los campos toman la traducción que tenga su elemento). Si necesita una excepción se debe deshabilitar la opción "Centrally Maintained" (mantenido centralmente) en el campo (Ventana, Pestaña & Campos).

Comentarios

  1. Excelente blog, dilucida mas que manuales sobre creacion de ventanas, cambio d e nombres, gracias por el aporte.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

ADempiere: Configuración Inicial de la Compañía

Instalar Oracle Java 6 en Ubuntu

ADempiere: Codigo Comun