Mostrando entradas con la etiqueta listas de valores. Mostrar todas las entradas

Los Tipos de Listas de Valores y Algunos Tips

1

En estos días estuve trabajando con un requerimiento de un proyecto en el cual detectamos algunas características especificas de las listas de valores en JDev11g, a partir de lo cual decidí crear esta entrada. Dado que en post anteriores ya he presentado las bases en como crear las listas de valores, en este articulo voy a explicar brevemente los distintos tipos que se tienen en JDev11g, así como también algunos tips para trabajarlas.

Vamos a presentar los distintos Departamentos de una organización como una lista de valores; internamente el atributo que nos interesa es el ID del departamento (departmentId), sin embargo para el UI la idea es presentar el nombre del mismo (departmentName).

Types

Los tipos que tenemos desde el Modelo en el cual definimos la lista son:

Choice List y Combo Box: Es la opción a elegir para obtener un af:selectOneChoice o la lista de valores tradicional. La unica diferencia es que con combo boxes se puede tener un historial de los elegidos previamente.

ComboBox with List of Values: Esta opción se renderiza como un af:inputComboboxListOfValues esta lista de valores se puede presentar directamente como un look and feel más AJAX, o también tiene la funcionalidad automática de presentar un componente de busqueda. comboInput

Muy util para cuando se requiere hacer un query sobre otra tabla para obtner este valor. Una característica de esta lista es que si en un backing bean hacemos ejecutamos getValue(), esta lista nos va a devolver por defecto el número correspondiente a la posición, más no el ID. Si queremos obtener el valor, en el binding de la lista ajustamos la propiedad includeSelectionAttr

binding

Input Text with List of Values: Parecido al anterior pero en este caso el UI se presenta como una lupa de busqueda, renderiza como un af:inputListOfValues, la cual puede activar una busqueda o puede hacer un query directo a la fuente de datos, si se quiere hacer la busqueda sobre otra tabla, es ideal.

inputTextWListList Box: Presenta la lista dentro de una caja de opciones, ideal cuando se quiere seleccionar más de un valor. Se renderiza como un af:selectOneListBox.

listBox

 

Estas presentaciones de listas pueden también ser intercambiadas en la interfaz gráfica así como también los tipos de bindigs, de las mismas.  Para cambiar una lista desde la interfaz, solo basta con ir a la estructura, seleccionar la lista de valores, click derecho y hacer click en Convert. Esto también se puede hacer directamente sobre el diseñador gráfico.

Otro de los elementos que se puede configurar desde la definición a través del VO es la opción de búsqueda. Esta opción permite crear un pop-up para realizar una búsqueda la fuente de datos de la lista (lo cual puede ser otro VO y en este caso lo que se hace es ejecutar el query con base en ciertos parámetros.

El o los valores que se retornan, una vez se escoge un elemento de la lista es también configurable, lo cual es una opción es muy útil si requerimos asignar más de un valor sobre atributos del VO base.

returnValues 

El binding de las listas de valores puede ser de 2 tipos List binding o ListOfValue binding. El segundo nos da una serie de opciones avanzadas para configurar el comportamiento de la lista, normalmente de acuerdo como se defina la lista desde el VO este binding se hace de manera automática, sin embargo a través del PageDef podríamos cambiar entre uno y otro.


Trabajando con Listas de Valores en JDev11g - Parte 2

5

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.


Post navigation