Cómo añadir columnas a una tabla
Visión general
En esta sección, el usuario puede encontrar información sobre cómo ampliar la tabla creada en la sección Cómo crear una tabla para incluir campos adicionales.
Se añadirán tres campos diferentes para mostrar cómo configurar algunas de las referencias posibles:
- ValidTo , un campo de fecha simple que coincide con la fecha ValidFrom ya presente en esta tabla
- Payment Schedule , mostrado al usuario como un cuadro combinado para poder elegir entre tres valores definidos en una lista valores.
- Primer día del mes
- Mitad del mes
- Último día del mes
- Payment Category , un enlace a otra tabla existente que permite seleccionar entre los valores presentes en esa tabla.
Estos cambios se pueden realizar en dos ubicaciones diferentes:
- Añadir columnas al módulo original (dbprefix
HT) - Crear un segundo módulo (dbprefix
HT2) que añade las columnas al primer módulo
La primera opción puede elegirse si el autor del módulo original quiere añadir más columnas a su módulo. La segunda opción es posible para cualquiera, ya que las columnas se añaden mediante un nuevo módulo al existente, que no se modifica directamente.
La principal diferencia entre estos dos métodos son los nombres que deben elegirse para las columnas para cumplir las reglas de nomenclatura de modularidad.
- Añadir una columna al mismo módulo: se puede elegir cualquier nombre de columna válido
- Mediante un segundo módulo: el nuevo nombre de columna debe cumplir el patrón
EM_<DBPREFIX>donde<DBPREFIX>debe ser el dbprefix del nuevo módulo que contiene la columna a añadir. En este ejemplo:EM_HT2
A partir de ahora, seguiremos este segundo enfoque y colocaremos todos los elementos nuevos en un nuevo módulo con dbprefix HT2 .
Para mostrar cómo se configuran diferentes tipos de columna, añadiremos 3 columnas nuevas:
- Valid To una columna simple de tipo fecha
- Payment Schedule una lista valores que contiene una lista de valores: Start of Month , Mid of Month , End of Month
- Salary Category una referencia que apunta a la tabla existente Salary Category.
Creación del nuevo módulo
Esta sección solo enumera los principales elementos importantes necesarios para el nuevo módulo. Puede encontrar más detalles en Cómo crear un módulo
- dbprefix:
HT2 - Dependencias:
- Core como es habitual
Creación de las columnas en la base de datos
| Nombre de columna | Tipo | Longitud | Nota |
|---|---|---|---|
em_ht2_validto |
DATE | Fecha hasta la que este salario es válido. | |
em_ht2_payment_schedule |
VARCHAR | 60 | Cuándo se paga el salario |
em_ht2_c_salary_category_id |
VARCHAR | 32 | Enlace a la Categoría Salarial |
Para crear la tabla anterior dentro de la base de datos, utilice una de las siguientes sentencias ALTER TABLE dependiendo de la BD que esté utilizando:
ALTER TABLE ht_salary ADD COLUMN em_ht2_validto timestamp without time zone;
ALTER TABLE ht_salary ADD COLUMN em_ht2_payment_schedule VARCHAR(60);
ALTER TABLE ht_salary ADD COLUMN em_ht2_c_salary_category_id VARCHAR(32);
ALTER TABLE ht_salary ADD CONSTRAINT "em_ht2_c_salary_category" FOREIGN KEY (em_ht2_c_salary_category_id) REFERENCES c_salary_category(c_salary_category_id);
Como puede verse en el SQL, se añade una clave foránea junto con el nuevo campo que enlaza con la tabla c_salary_category. Esto garantiza que solo se puedan seleccionar categorías existentes y también que no se pueda eliminar ninguna categoría salarial mientras se utilice en la tabla ht_salary.
Añadir y configurar las columnas en el Diccionario de aplicación
En esta parte, añadiremos la columna recién añadida a la lista de columnas ya definidas para la tabla ht_salary y luego configuraremos esas definiciones de columna para que coincidan con la descripción indicada en la sección de objetivos anterior.
Añadir la nueva columna al Diccionario de aplicación
Los pasos a seguir son:
- En la ventana
Tablas y columnasbusque la entrada de la tablaht_salary. - Con este registro seleccionado, ejecute el proceso Crear columnas de la base de datos. Como la tabla ya contiene varias columnas, solo se añadirán las columnas que aún no estén presentes en la definición del Diccionario de aplicación de esa tabla. En esta sección, este proceso añadirá nuestras 3 columnas recién creadas a la lista. Observe que esas nuevas entradas se asocian automáticamente con el nuevo módulo con prefijo
HT2, ya que el proceso lo detectó a través del nombre de las columnas de la base de datos.
Al revisar la estructura de carpetas del módulo después de ejecutar ./gradlew export.database, se muestra que las nuevas columnas se han exportado a un archivo en una carpeta 'modifiedTables' en lugar de la habitual 'tables', para indicar que este módulo no crea la tabla ht_salary, sino que está añadiendo nuevos elementos a la misma.
org.openbravo.howtos2
└── src-db
└── database
└── model
├── functions
└── modifiedTables
│ └── HT_SALARY.xml
├── sequences
├── tables
├── triggers
└── views
└── sourcedata
├── AD_MODULE_DBPREFIX.xml
├── AD_MODULE_DEPENDENCY.xml
├── AD_MODULE.xml
└── AD_PACKAGE.xml
Configuración de las nuevas columnas
Antes de empezar a configurar las nuevas columnas, deben realizarse dos pasos preparatorios.
- Crear una Lista valores para la columna Payment Schedule para definir los 3 valores que deberían permitirse para esta lista.
- Crear una referencia Tabla para la columna
em_ht2_c_salary_category_id, ya que la referencia estándar TableDir no puede utilizarse con columnas de tipo em.
Al añadir estos nuevos elementos, recuerde colocarlos en el nuevo módulo con prefijo HT2.
El primer paso es crear una nueva Referencia para contener la lista de valores de la columna Payment Schedule. Los valores importantes a configurar aquí son:
- Referencia padre = Lista en la propia definición de la Referencia, para definirla como una Lista valores.
- Para cada entrada en la pestaña Lista valores
- Identificador El valor almacenado en el campo de la base de datos cuando un usuario selecciona esta entrada en el cuadro combinado.
- Nombre El texto visible para el usuario (traducible) mostrado en la UI.
- Secuencia para definir el orden de las entradas que debe utilizarse en la UI.
La siguiente captura de pantalla muestra cómo se verá la referencia definida.
El segundo paso es crear una Tabla referenciada para definir cómo el nuevo campo Categoría Salarial se enlaza con la tabla c_salary_category.
Para ello, debe crearse una nueva Referencia. En este caso, los valores importantes son los siguientes:
- Referencia padre = Tabla para indicar que se trata de una Tabla referenciada.
- En la pestaña Tabla referenciada:
- Tabla =
c_salary_categoryya que esta es la tabla destino a la que apuntará nuestra nueva columna. - Columna clave =
c_salary_category_idya que esta es la clave primaria de la tabla destino - Display Column =
Namepara indicar el campo de esta tabla que debe mostrarse en la UI para esta columna.
- Tabla =
La siguiente captura de pantalla muestra cómo se verá la referencia definida.
Después de estos dos pasos previos, finalmente podemos configurar las nuevas columnas para que utilicen la referencia que acabamos de crear.
En la ventana Tablas y columnas, buscamos la entrada de la tabla ht_salary. En la pestaña Columna realizamos los siguientes cambios para nuestras nuevas columnas:
- Payment Schedule, cambie la Referencia de esta columna de String a Lista y cambie la Referencia clave a nuestra Lista valores recién creada con nombre
EM_Ht2_Payment_Schedule. - Salary Category , cambie la Referencia de esta columna de TableDir a Tabla y cambie la Referencia clave a la nueva
ht_salary_c_salary_category.
El paso final sería ejecutar el proceso Sincronizar términos y actualizar los elementos creados para que tengan nombres útiles para la UI.
Sin embargo, mientras el issue 10886 no esté corregido, este proceso no mapeará correctamente los elementos existentes para columnas que sigan las reglas de nomenclatura EM_.
Como solución alternativa y para reutilizar los elementos core existentes para las dos columnas para las que existe uno ( validto , Salary Category ), asigne manualmente los elementos existentes a esas dos columnas.
Para ello, se necesitan los siguientes cambios en la misma ventana abierta Tablas y columnas (aún abierta desde el último paso) y en la pestaña Columna de la tabla ht_salary.
- ValidTo cambie el Elemento del sistema a ValidTo - Valid To Date
- Salary Category cambie el Elemento del sistema a C_Salary_Category_ID - Salary Category
Ahora ejecute el proceso Sincronizar términos para establecer el elemento de la última columna, que aún no tiene un elemento coincidente.
Después de esto, las nuevas columnas deberían verse como se muestra en la siguiente captura de pantalla:
Como paso final, ahora actualizamos el elemento EM_Ht2_Payment_Schedule recién creado para que tenga una etiqueta útil para la UI.
Navegando a Application Dictionary > Element buscamos el nuevo elemento y realizamos las siguientes actualizaciones:
- Nombre cambiar de
EM_Ht2_Payment_Schedulea Payment Schedule - Print Name cambiar de
EM_Ht2_Payment_Schedulea Payment Schedule
Estas actualizaciones son necesarias para tener etiquetas útiles en la UI para cualquier ventana definida sobre esta tabla y para evitar que estas utilicen nombres internos con la terminología técnica EM.
Reconstrucción del sistema
Finalmente, para que las columnas recién añadidas estén disponibles en tiempo de ejecución, debe ejecutarse ./gradlew generate.entities y desplegarse los cambios en tomcat. Estos dos pasos pueden realizarse juntos ejecutando ./gradlew smartbuild. Después de eso, debe reiniciarse Tomcat para refrescar el modelo DAL en memoria, de modo que conozca las columnas recién añadidas.
Una vez que las columnas se añaden a la tabla, el usuario puede exportar el módulo.
Para añadir las nuevas columnas a la ventana definida sobre esta tabla, visite Cómo añadir un campo a una pestaña de ventana.
Este trabajo es una obra derivada de Cómo añadir columnas a una tabla de Openbravo Wiki, utilizada bajo CC BY-SA 2.5 ES. Este trabajo está licenciado bajo CC BY-SA 2.5 por Etendo.


