Tenia desde hace bastante tiempo este articulo planeado, pero una combinación de carga laboral, más otras actividades tienen mi horario bastante ajustado, sin embargo el blog es algo que por ahora no voy a dejar de un lado y espero continuar de manera activa la publicación de artículos.
Dejando un poco la introducción y entrando al tema, vimos en el post pasado como crear listas de valores. Esta vez vamos a ver como podemos asociar listas de valores a partir del modelo, lo cual se llama Listas de Valores en Cascada. Esta es una funcionalidad asociada con requerimientos tipo País/Estado/Ciudad, Ordenes/Detalle/Producto, etc.
Para este ejemplo vamos a tomar el esquema HR utilizando las tablas Locations, Regions y Countries. Y el objetivo final es el de crear/editar las distintas ubicaciones de los departamentos en este caso basándonos en la región, luego al país y finalmente al estado.
Nuestra estructura objetivo a nivel del modelo tiene los EOs y VOs que se crean con base en el modelo de datos a través del asistente. Adicionalmente se necesitan crear 2 VOs de lectura basados en un Query, estos son, FilterRegions y FilterState, los cuales cumplen la misión de filtrar las listas de valores con base en el elemento seleccionado.
Una características importante de los VOs que creamos para filtrar es que estos van a tener una clausula Where asociada que se implementa como una ViewCriteria, lo cual lo vimos en la primera parte de esta serie. Nuestros 2 VOs de filtrado quedan así
Ahora dentro del VO de Locations, lo que hice fue crear un atributo nuevo para efectos del demo llamado Region, este atributo va a filtrar las regiones con base en el regionID, la cual tiene varios países y luego miramos los estados del país. La parte importante aqui es que cuando creamos la Lista de valores para el país (CountryId) y estado(StateProvince) tenemos que primero asociar el VO de filtrado respectivo así
luego se edita la relación del View Accessor en donde vamos a seleccionar la viewCriteria que tiene el VO que filtra para así mapear la variable de la clausula where con uno de los atributos del VO Locations así:
Hacemos los mismo para el estado y con esto tendríamos el modelo listo. Para la parte del UI lo unico adicional que se tiene que hacer es especificar en las listas de valores las propiedades autosubmit para que así la acción de seleccionar sea enviada al servidor y este re-ejecute el query, la segunda propiedad es PartialTriggers en la cual vamos a especificar sobre que componente la lista de valores va a invocar un recarga (refresh) parcial para que se actualicen los valores con base en los datos del nuevo query que fue ejecutado.