Mostrando entradas con la etiqueta arquitectura ADF. Mostrar todas las entradas
Mostrando entradas con la etiqueta arquitectura ADF. Mostrar todas las entradas

martes, 18 de marzo de 2014

ADF Bindings 3/3

Resumen: En esta entrada se mostrará la estructura y el papel que tiene ADF Bindings dentro de la arquitectura ADF.

Para terminar con esta introducción a ADF Bindings, podemos ir a la documentación oficial de ADF, para ver lo que nos dice.

Nota: Se podría haber empezado por aquí, pero he preferido ver los ADF Bindings
en acción en vez de presentarlo como algo abstracto.

Como habíamos visto en otro post dedicado a la arquitectura de ADF, ésta se separa en distintas áreas: Vista Modelo y Controlador (view, model y controller, MVC).

arquitectura ADF
Arquitectura de ADF


Como hemos visto en el ejemplo de estos artículos dedicados a ADF Bindings (artículo 1, artículo), los Bindings gestionan la información que muestra la página, y por lo tanto, estaría colocado dentro de la capa : Model (si seguimos el modelo MVC).
En la imagen que tenemos, ADF Bindings se encontraría dentro de la capa ADF Model.

En el artículo del manual de referencia de 10g (en el de 11g también hay un texto similar encontramos lo siguiente) declarative Data Binding with Oracle ADF Model Layer donde se habla de dos mecanismos data controls y declarative bindings:

Data controls abstract the implementation technology of a business service by using standard metadata interfaces to describe the service’s operations and data collections, including information about the properties, methods, and types involved. At design time, visual tools like JDeveloper can leverage the standard service metadata to simplify binding UI components to any datacontrol operation or data collection.

Si miramos a nuestro DataControl Palette, y vemos lo que nos ofrece, podemos ver con claridad, que nos está proporcionando una forma de acceder a los datos, propiedades, métodos, de elementos que fueron creados ( ADF Business Components, en el esquema anterior de la arquitectura ADF).


Al arrastrar un elemento del Data Control Palette, se nos mostraba un menú contextual en el que se nos solicitaba la forma en que se iba a mostrar los datos.
Esta “forma de mostrar” los datos, es lo que se refiere con UI Components (User Interface Components), y por lo tanto, a la parte visual de la página.

incluir componente desde datacontrol palette
añadiendo un componente desde DataControlPalette

En este mismo artículo se habla de sus ventajas:

- Escribir menos código
- Trabajar de la misma manera que cualquier otro elemento de UI o de Business service (homongeneidad)
- Disponer de características que sería difíciles de obtener si las tuviéramos que codificar.

Estas características las hemos visto en los ejemplos que hemos utilizado en este blog, por lo que nos suena todo ello.

La otra parte que se refiere dicho artículo es a lo que estábamos hablando comúnmente como Bindings,

Declarative bindings abstract the details of accessing data from data collections in a
data control and of invoking its operations.

Es decir, que nos permite manejar colecciones de datos de un data control, e invocar sus operaciones.

vista pagina definicion
página de Definición

Existen tres tipos de objetos que manejan esta parte:
Iterator bindings to bind to an iterator that tracks the current row in a data
collection
Value bindings to connect UI components to attributes in a data collection
Action bindings to invoke custom or built-it operations on a data control or its
data collections
De estos tres tipos de objetos, en el ejemplo podemos ver dos de ellos, el iterator (iterador), y el Action (acción, método, función).

Veremos más adelante cada uno de estos tres elementos, su papel y cómo funcionan con ejemplos prácticos.

La idea de este post es:
- Tener una imagen clara de dónde está el ADF Bindings en la arquitectura ADF
- Saber lo que nos permite hacer y no hacer
- Familiarizarse con algunos términos para que cuando vayamos a leer otros blogs o bibliografía podamos entenderlo con cierta claridad.

Otros artículos relacionados:
- ADF Bindings 2/3
- ADF Bindings (1/3)
- Arquitectura ADF

viernes, 14 de marzo de 2014

ADF Bindings 2/3

Descripción: Este post es continuación del anterior en el que hacíamos una introducción a los ADF Bindings.
En esta ocasión vamos a responder a la pregunta: ¿De dónde salen los objetos del bindings?

Si miramos en nuestro ejemplo, hemos visto que al arrastrar una tabla desde el DataControl Palette a la página, se creaba tanto la tabla, como su contraparte en la página de definición.

View en el DataControl Palette
View en el DataControl Palette



tabla en la pagina definicion
tabla en la página de definición.




Lo mismo ocurre con el commit que arrastramos desde el apartado Operations dentro de PlantillaAppModuleDataControl.

Como podemos observar, tanto las operaciones (action), como la tabla (table), como otros elementos que se encuentran en la página de definición, provienen del Appmodule,y por lo tanto de la capa de datos.
Por eso se dice que los Bindings está relacionado con la parte del Modelo (model).

Ahora bien, como vimos en el post anterior, no todo está definido de forma explícita, es decir, que se ha tenido que hacer arrastrando elementos o escribiéndolos a mano, sino que existen acciones o propiedades de estos objetos que existen implícitamente, y por lo tanto, puede ser útil conocerlos por encima para ver lo que nos ofrece.

Vamos ver un poquito lo que nos ofrece el ADF, y así vamos conociendo ciertas interioridades.

Seleccionemos el botón que dice “Commit”, y vayamos al inspector de propiedades (property inspector).
Pulsamos dos veces para que se nos abra la pestaña a pantalla completa y observemos.

propiedades boton commit
propiedades del bottón Commit


Miremos en la propiedad “Disabled”, y vayamos a la parte derecha, haciendo click sobre la expresión que se encuentra ahí.
Nota: Este tipo de expresión se llama Expresión del lenguaje (Expression Language), y ya lo veremos más adelante. Lo adelanto sólo para abrir boca :-)

Si nos fijamos nos aparece un boton con unos puntos suspensivos, pulsemos ese botón.
expression builder
expression builder



Este cuadro es una especie de asistente (Expression builder) que nos muestra datos o propiedades que se encuentran en objetos de la aplicación, y que nos puede ayudar a buscarla y escribirla de forma correcta.
En este proyecto de pocas páginas, no es difícil saber dónde está cada cosa, o cómo se llama una variable, pero cuando el proyecto empieza a crecer, puede ser útil contar con una herramienta así.

Despleguemos el apartado que dice “ADF Bindings”
expresión resultante
expresión resultante


Bueno ahí esta nuestra propiedad “enabled” que nos puso el Jdeveloper cuando arrastramos la operación “Commit”.
También podemos ver otras propiedades, tanto para el Commit, como para EmpleadosView o del EmpleadosViewIterator.
Son propiedades que están disponibles para ser utilizadas si es necesario.
Ya iremos viendo algunas de éstas a medida que vayamos avanzando.
También me gustaría que se quedara con la idea de que en Bindings están los objetos que hemos utilizado en la página, y no otros que pueden existir en la aplicación pero que no hemos utilizado.

Seguiremos ahondando sobre el ADF Bindings en el siguiente post.

Puedes estar al tanto de las novedades en twitter @ADFSalvaje.

Otros artículos relacionados:
-
- ADF Bindings 3/3
-

 

miércoles, 5 de marzo de 2014

Guardar datos de una tabla (af:table) 1/2

Resumen: En este ejemplo vamos a crear una página en la cual podamos tener una tabla con datos, y que éstos puedan ser editados sobre ésta.
Hasta ahora, los ejemplos vistos estaban relacionados con consultas, que presentaban los datos. Ahora vamos a ver cómo se comporta el ADF para gestionar modificaciones y guardar los cambios.

Nota sobre este artículo: este post va a tener varias partes, en la primera lo haremos cometiendo algunos errores comunes a la hora de crear una página de este tipo. Así podremos entender mejor los mecanismos que tiene el ADF para guardar los cambios.

Para ello vamos a crear una nueva página.

crear pagina jspx. Applications Navigator
vista de Applications Navigator


Seleccionamos JSF Page, y continuamos el asistente hasta el final, sin cambiar nada de las opciones que nos ofrece, ni crear beans.

galeria componentes
vista Galería Componentes


El nombre que pondremos a nuestra página sera tabla_editable.jspx.

asistente creacion jspx
asistente creacion jspx




asistente creacion jspx




Ya disponemos de nuestra nueva página en blanco.
Nos vamos al DataControl Palette y arrastramos el objeto ViewObject al bloque central donde se encuentra el jspx, y lo soltamos.
De las opciones que nos ofrece en el menú contextual escogeremos ADF Table.

crear la tabla desde dataControlPalette
en el momento de incluir la tabla desde DataControl Palette



En el conjunto de opciones, le damos a guardar sin seleccionar ninguna opción de las que nos ofrece (enable selection o sortable).

Este es el aspecto que presentara nuestra nueva tabla en la página.


vista jspx con aftable




Podemos pensar que nos hace falta un botón para Guardar los cambios. Para ello, arrastramos del dataControl Palette la operación (Operations) commit (o confirmar, según el idioma en que lo tengamos configurado).


datacontrol Palette eligiendo operacion submit


Lo arrastramos desde el DataControl Palette y elegimos que esa operación se muestre como " ADF Command Button".


incluir boton submit




Podemos ver cómo ha quedado nuestro botón en la página.


aspecto de la pagina jspx


Guardamos todos los cambios y podemos ejecutar la aplicación.

Este es el aspecto de nuestra tabla, para que podamos editarla.



aspecto de la pagina en ejecucion

Vamos a coger en en este ejemplo el nombre que aparece en la primera línea y vamos a cambiar “Steven K”, por “Steven”.
Nota: Si en tu base de datos no tienes esto, puedes probar a cambiar otro nombre.

aspecto de la pagina cambiando los datos


Como vemos hemos cambiado el nombre, y aparentemente no sucede nada.
De hecho vamos a avanzar en nuestra tabla, para ver el siguiente bloque de resultados, y luego volver, a ver si nuestro “Steven” contiene los mismos cambios.

aspecto de la pagina cambiando los datos




captura datos sin cambiar


Aparentemente sí contiene los cambios.
También debemos observar que el botón que habíamos puesto para hacer Commit, ha permanecido desactivado en todo momento.
Parece que no hacía falta incluirlo y que nuestra estupenda tabla, ya hace el trabajo de guardar los datos por nosotros.
Podemos pensar que al realizar los cambios en la tabla, éstos cambios se han guardado ya en nuestra base de datos.

Bien llegados a este punto vamos a hacer dos cosas. Una es refrescar la página con el F5 (sí, eso que siempre digo que no se debe hacer para evitar resultados inesperados).

aspecto de la pagina boton submit activo
página tras el refresco (F5)

Curiosamente tras hacer este refresco de la página, observamos que el botón "Submit" se ha activado: Curioso, ¿no?.

Los datos siguen aparentemente correctos, y nuestro “Steven” sigue tal cual lo dejamos.

Bien ahora hagamos lo siguiente.
Vamos a copiar la url que está en el navegador, y la copias completamente al portapapeles.
Cierra el navegador, y vuelve a abrirlo para poner la dirección que acabas de guardar.
(Nota: esto sirve por el tipo de ejemplo que estamos utilizando en otros puede ocasionar problemas).
Lo escribes, y aparece nuestra tabla, pero también vuelve a aparecer “Steven K”.
Qué extraño, ¿no habíamos dicho que estaba guardado?

Podemos pensar que es un efecto (de esos extraños que puede hacer el ADF), por copiar y poner la url.
Vamos a hacer otra prueba: Parar la aplicación y volverla a arrancar con la página que estamos viendo.
(que Sí, tu hazme caso y ya verás).

El resultado es otra vez el mismo:
El cambio que creíamos haber realizado, realmente no ha sido hecho.

La razón la desvelaremos en el próximo artículo.

Puedes descargarte en este enlace el ejemplo Descargar ejemplo


El por qué de este artículo, es para que puedas entender cómo funciona internamente el ADF y también aprender a detectar ciertos errores al desarrollar aplicaciones que no son visibles.

También otra de las razones es que la documentación oficial se explica todo esto, pero al mostrarse muy teórico, no se sabe muy bien de lo que está hablando.
Así que he preferido un caso práctico, para poder hacer "tangible" aquello que nos puede sonar algo nebuloso.

Artículos relacionados:
- Guardar datos de una tabla (af:table) 2/2
Añadir una tabla (listado)
 

domingo, 16 de febrero de 2014

Arquitectura ADF

La arquitectura de una aplicación en ADF se aproxima al modelo MVC, Modelo-Vista-Controlador (Model View Controller), con la idea de separar el modelo de datos, del diseño de pantalla, así como la gestión de los datos y la lógica de negocio.

La siguiente imagen es un esquema visual sobre este modelo.


imagen modelo MVC (modelo vista controlador)
Modelo MVC




Ahora bien, a la hora de implementar este modelo, ADF permite utilizar una serie de tecnologías en cada nivel.


arquitectura ADF
Imagen Arquitectura ADF


Las últimas dos capas Model y Business Services, están relacionadas con el manejo de datos, y por lo tanto con la capa más cercana a la Base de Datos.

Un detalle también a tener en cuenta, es que con el paso de las versiones, ADF ha ido añadiendo nuevas tecnologías al diagrama, por lo que habrá que mirar en el manual de referencia, qué posibilidades hay disponibles.
Ya iremos viendo más adelante cómo se refleja cada capa en el proyecto.

Artículos relacionados en este blog:
- ADF Business Componentes

Puedes estar al tanto de las novedades en twitter @ADFSalvaje. siguiendo este blog o teniéndolo entre tus Favoritos.