Sunday 12 February 2012

Curso ADF 11g - Parte 4

Tema : Personalización de View Objects.

Nuestro último capítulo permitió la personalización de componentes del tipo entidad. Recuerde que ese tipo de componentes esta ligado a la “representación de datos” que tenemos en nuestra capa de modelo. Una vez que tenemos representado los datos, es momento de desarrollar “la presentación de datos”.

Cuando hablamos de presentación de datos, no nos referimos de ninguna manera a la parte de interfaz de usuario (página web) sino a la presentación de datos que se realiza en la capa de modelo. Es como si usted estuviera construyendo un reporte y antes de diseñar gráficamente el reporte, lo primero que usted elabora es la SQL que permitiría “presentar los datos”. Bien justamente estamos en esta etapa y en vez de crear la sentencia SQL, lo que se hace es elaborar componentes del tipo View Object.

Requerimiento:

  • Oracle Jdeveloper 11g. 11.1.1.3
  • Oracle Database Express 11g
  • Haber culminado la parte 3 del tutorial.

Capítulos Anteriores

Parte 1: Creación del Modelo de Datos.

Parte 2: Creación de Componentes de Negocio

Parte 3: Personalización de Entidades

Opcional :

Si no culmino los capítulos anteriores y quiere empezar desde este capítulo, puede descargar el siguiente código para continuar el curso.

Código previo.

Nuestro objetivo en esta parte será lo siguiente:

  • Personalizaremos los atributos que muestran las vistas por default.
  • Modificar las etiquetas (Label) y Formatos.
  • Asociar una lista de valores a lo campos.

PERSONALIZAR ATRIBUTOS DE VISTAS.

1. Ejecute el módulo de aplicaciones, y consulta la vista de Movimiento-Detalle.

image

2. Note que la vista de detalle, muestra entre sus atributos el Id del Producto (ProductoId). Sin embargo si vamos luego a mostrar esta información al usuario final no sería adecuado mostrar la descripción del producto en vez del Id??. Por supuesto que sí, entonces veamos que paso realizaremos para lograr este cambio.

3. Regrese al Jdeveloper y hagamos doble clic sobre la vista detalle.

image

4. Elija la categoría “Entity Objects” en el editor y note que la vista DetalleVO esta compuesto exclusivamente de la entidad Detalle. Esto tiene mucho sentido porque hemos usado el asistente para su creación.

image

5. Si hacemos clic sobre la categoría Query descubriremos que a vista recupera su información en base a una consulta SQL que usa exclusivamente la tabla DETALLE para obtener su información.

image

6. En este punto, usted seguro esta tentado a ir directamente al SQL y hacer un join con la tabla PRODUCTO y finalizar este requerimiento. Esto no es necesario, porque podemos apoyarnos en las herramientas del framework para lograr lo mismo. Regrese a la categoría “Entity Object” y ahora agreguemos la entidad Producto como parte de la vista

image

Con este paso estamos ligando una vista “DetalleVO” con 2 entidades Detalle y Producto. Esto es posible y lo hacemos porque justamente necesitamos información de otra entidad para obtener los datos que necesitamos. Esto sería la manera de hacer un join con el framework. Comprobemos estos regresando nuevamente a la categoría Query y notando que el join se realizó.

image

Ojo, esto se realizo porque existe una relación entre Detalle y Producto generó en base a la foreing key que existe entre ambas tablas en la BD>

7. Bueno, ahora será necesario indicar que atributos de la entidad Producto queremos agregar en la vista. Entonces vayamos a la categoría Attributes y elijamos la opción “Add Attribute from Entity” tal como se muestra en la figura.

image

8. Elija el atributo Descripción de la entidad Producto, agréguelo a la sección de Selected y Pulse Ok.

image

9.Ahora pulse el botón, Set Source Order para ordenar los campos.

image

10. Ordénelo tal como se muestra en la imagen.Pulse OK y grabe los cambios.

image

11. Ejecutemos el módulo de aplicación y vemos los resultados.

image

12. Veamos la vista Movimiento-Detalle y notemos que ya apareció el atributo Descripción del Producto.

image

PERSONALIZAR FORMATOS Y ETIQUETAS.

13. El siguiente cambio es muy sencillo, note que en la imagen anterior la fecha no tiene formato común en nuestra región. En vez de decir 2008-01-12 preferiríamos el valor 12/01/2012. Adicionalmente cambiaremos la etiqueta “ClienteId” por “Id Cliente” para que sea más fácil de interpretar al usuario. Veamos como hacemos esto

14. Haga doble clic en la vista MovimientoVO.Luego elija la categoría Attributes y finalmente haga doble clic sobre al atributo “Fecha”

image

15. La pantalla que se muestra se puede configurar las propiedades del atributo “Fecha”. En nuestro caso vamos a la categoría “Control Hints” donde podemos personalizar cosas como los formatos o las etiquetas.En nuestro caso modificaremos las siguientes propiedades.

Format Type: Simple Date

Format: dd/MM/yyyy

image

Pulse OK.

16. Hagamos doble clic ahora sobre el atributo “ClienteId”.

image

17. Seleccionemos nuevamente la categoría Control Hint y modifiquemos la propiedad Label por “Id Cliente”. Pulse OK y Grabe los cambios.

image

18. Ejecutemos el módulo de aplicación para verificar los cambios.

image

19. Al consultar la vista de movimiento notará que se realizaron correctamente.

image

ASOCIAR LOS ATRIBUTOS CON LISTAS DE VALORES

20. En la anterior imagen note que el atributo “Id Cliente” es un atributo del tipo Texto. Sin embargo para el usuario del sistema, que registrará esta información, sería mas intuitivo “ingresar” al cliente por medio de una búsqueda por medio de una lista, en vez de recordar el Id de dicho cliente. Bien veamos como realizar este cambio con el framework. Seleccione la vista MovimientoVO. Luego, seleccione el atribute el atributo ClienteId y haga clic sobre el botón “Add List of Values” de manera similar a la siguiente imagen.

image

21. En este paso debemos definir la fuente de datos que usaremos para poblar la lista de valores del atributo ClienteId. Por ello, hagamos clic sobre el botón “Create New View Accesors”

image

22. Seleccionemos la vista ClienteVO, pues será de esta de la que tomaremos el nombre del cliente. Pulse OK.

image

23. En el campo “List Attribute” defina el atributo que pertenece al atributo CLIENTE que estará asociado al atributo ClienteId de la vista Movimiento. En este caso el nombre es el mismo ClienteId.

image

24. Haga clic en el tab “UI Hints” para definir la forma en que se presentará los datos. Sobre esta pestana, es importante notar que el campo “Default Type List” determina la manera como mostraremos este dato. En esta caso mantenemos le valor por “Choice List” que determina un lista del tipo Combo.

Adicionalmente seleccionamos Nombre como el atributo a mostrar en la lista. Pulse OK y Grabe los cambios.

image

25. Probemos los cambios desde el módulo de aplicación y vemos que los cambios se han aplicado correctamente.

image

26. Perfecto. Ya estamos viendo que este framework es poderoso para facilitar muchas labores que implicarían horas de programación y que lo podemos resolver con unos cuantos pasos de configuración. En siguientes capítulos conoceremos aún más de este framework. Si tiene dudas, por favor comente el post para poderle ayudar a solucionarlas.

CODIGO FUENTE FINAL

5 comments:

  1. Lo primero de todo muchas gracias por este curso . Estoy empezando con jdeveloper y ADF y me esta ayudando mucho. Estoy intentando poner en practica algunas cosas vistas en esta entrega y me he encontrado con un muro. Estoy intentando aplicar las listas de valores que usas en la vista movimiento con el atributo clienteid, en la vista de detalle para el productoid , de manera que al insertar un detalle pueda usar un combo con todos los productos en lugar de tener que introducir el id del producto directamente, pero soy incapaz de conseguirlo. Se te ocurre algun motivo aparte de mi desconocimiento por el cual esto no se pueda realizar?. Muchas gracias

    ReplyDelete
    Replies
    1. Hola yo también lo intente y nada, si visualizo solo el detalle si lo muestra pero en el movimiento - detalle No. Pudiste encontrar como hacerlo? o no se puede

      Delete
  2. Hola como estas, primero que nada, agradecerte por el tutorial, me ayuda mucho a entender como se maneja el framework de oracle, ahora me podrias dar una mano, estoy haciendo el ejemplo pero me da un error al probar la actualizacion del precio al agregar un nuevo detalle, me sale esto.

    (oracle.jbo.DMLException) JBO-26041: Fallo al enviar datos a la base de datos durante "Insertar": Sentencia SQL "INSERT INTO DETALLE(MOVIMIENTO_ID,PRODUCTO_ID,CANTIDAD,SUBTOTAL) VALUES (:1,:2,:3,:4)".

    Espero me puedes dar una mano? muchas gracias.

    ReplyDelete
    Replies
    1. Hola Huaymas,
      Por favor confirma que cuando agreges un detalle coloques un productoId distinto. Ten en cuenta que la primary key es el movimiento id y el codigo del producto, asi que eso puede estar produciendo error.

      Suerte!

      Delete
  3. Hola , estoy siguiendo tu tutorial muy valioso,pero como no logre conseguir la capa de persistencia, estoy trabajando con otra. El caso es que en esta clase que hablas de Lista de valores, Yo necesito de una lista que depende del dato ingresado en otro atributo. Exactamente tengo la marca y modelo de vehiculos y necesito que dado el ingreso de la MARCA la lista de valores me filtre los modelos de vehiculo de esa MARCA. Me pueden ayudar?

    ReplyDelete