ADF tips: Etiquetas dinámicas desde base de datos para los atributos de una entidad
24/07/2015 -
En este post de los foros de Oracle preguntaban cómo se podía asignar valores dinámicos a las etiquetas de los atributos de una entidad. Utilizando parte de este otro post de Amis voy a contaros como conseguirlo.
Por defecto las etiquetas en los atributos de las entidades se asignan unos valores, por ejemplo, en la tabla Departments del schema HR de Oracle:
Para empezar, tenemos que crear en la base de datos la estructura necesaria para almacenar y obtener las diferentes etiquetas.
Primero creamos la tabla donde almacenaremos las etiquetas:
También añadimos los valores de las etiquetas para los diferentes idiomas.
Para obtener las etiquetas asociadas al locale actual de la aplicación vamos a crear un paquete PL/SQL.
Ya tenemos terminadas las piezas de la base de datos, ahora tenemos que crear un método en el Application Module que efectúe la llamada al paquete que hemos creado.
El siguiente paso es crear los Resource Bundle necesarios para la aplicación. Utilizaremos la clase DBResourceBundle como base, que es la que utilizará el método del Application Module para obtener las etiquetas de la base de datos.
En el método getResourceBundle hay que configurar las variables amDef y config con los valores correspondientes a nuestro Application Module.
Después tenemos que crear las clases que van a extender la clase DBResourceBundle para cada uno de los idiomas de nuestra aplicación. En este caso vamos a tener Inglés, Francés y Español.
En cada una de las clases vamos a sobrescribir el método getLocaleCode(), donde devolveremos el código del idioma correspondiente.
Ahora que ya tenemos creadas todas las clases, vamos a registrar el Resource Bundle en el modelo. Para ello vamos a las propiedades del proyecto y seleccionamos la opción ‘Resource Bundle’ en el menú de la izquierda.
Tenemos que escribir la ruta completa de la clase ModelBundle sin la extensión y seleccionar el tipo de Resource Bundle, en este caso ‘List Resource Bundle’.
Si tenemos más de un Resource Bundle también podremos añadirlo pulsando en la pestaña ‘Bundle Search’.
Para terminar hay que modificar las etiquetas de cada uno de los atributos.
Crearemos una etiqueta de un campo para que genere en el fichero xml de la entidad las propiedades que vamos a utilizar.
Si observamos el código fuente de la entidad podemos observar que nos ha añadido dos cosas nuevas.
La primera es el ResourceBundle que vamos a utilizar.
Y la segunda es el identificador de la etiqueta en el ResourceBundle.
Para cada atributo que queramos modificar su etiqueta deberemos añadir el tag properties y modificar la propiedad ResId con la clave registrada en base de datos.
Por último para probar lo que hemos hecho vamos a utilizar el ADF Model Tester, donde nos es posible cambiar el idioma si previamente lo activamos en las propiedades del JDeveloper.
Al ejecutar el Application Module podemos observar que por defecto nos aparecen las etiquetas que hemos insertado en la base de datos en Inglés.
Para cambiar de idioma en el menú tenemos la opción locale.
Si cambiamos de idioma a Español y cerramos la vista, al volverla a abrir podemos observar que las etiquetas nos aparecen en Español.