Mantenimiento de una tabla n:m en ADF con SelectManyShuttle
01/07/2011 -
Un ejemplo de cómo hacer un mantenimiento de una tabla de forma usable para el usuario seria utilizar el componente SelectManyShuttle. Uno de los casos que podemos utilizarlo es cuando tenemos una tabla que sale de una relación n:m, por ejemplo:
Tenemos la tabla de usuarios, roles y ahora queremos guardar en la tabla usuarioRoles los roles asignados aún usuario. Para realizar esto crearemos una pantalla donde tendremos la tabla de usuarios y seleccionaremos uno de los usuarios y con el componente SelectManyShuttle le asignaremos los roles. En la pantalla también pondremos la tabla UsuariosRoles para ver los cambios.
Pasos a seguir:
Creamos una aplicación Fusion Web Application (ADF) y creamos los business components desde nuestra base de datos: nos pedirá la conexión a la base de datos y elegiremos las entidades que queremos utilizar. En este ejemplo: Usuario, Roles y UsuarioRoles. Obtendremos los siguientes business components:
Imagen 2: Resultado de crear las entidades
Crearemos una página y también crearemos un Bean ligado a la página para darle las propiedades al selectManyShuttle:
Para poner el componente en nuestra página, sólo hay que arrastrarlo desde la paleta de componentes y lo insertamos sin informar nada. Ahora necesitamos crear los iteradores con los que trabajaremos. En la parte izquierda la de selección la rellenaremos en este ejemplo con los roles, mediante la instancia del viewObject RolesVO Roles1. Los valores seleccionados en nuestro caso serán los valores de la tabla usuarioRoles. En este ejemplo nos interesa elegir una instancia del viewObject usuarioRolesVO que esté relacionada mediante viewlink con el viewObject UsuarioVO, si miramos el AppModule de nuestro ejemplo este sería UsuarioRoles2.
Los Bindings de la página nos tienen que quedar como se ve en la Imagen 5.
Imagen 6 : Componente selectManyShutle
Ahora crearemos los métodos que necesitamos para el componente en el Bean de la página para la parte izquierda la de selección crearemos el método getAll() y para la parte derecha de nuestro componente los métodos getSelected() y setSelectted(List selectedValues) para los valores seleccionados, el componente quedará como se ve en la Imagen 6. Una breve explicación del código sería la siguiente :
Imagen 7 : Código metodo getAll()
Imagen 8 : Código metodo setSelected() y getSelected()
La pantalla podría quedar así:
Resumen:
Como podéis ver con ADF se puede llegar a hacer el mantenimiento de una tabla de una forma diferente, más visual y atractiva para el usuario. Para este ejemplo he utilizado JDeveloper 11.1.1.4.0.