Thursday 20 December 2012

Curso ADF 11g–Parte 8

 

Tema : Página de Búsqueda

Bien, luego de haber realizado los laboratorios anteriores ya estamos listos para empezar la creación de la interfaz de usuario. Empecemos por algo muy sencillo que es una página que permite realizar una búsqueda de registros.

Requerimiento:

· Oracle Jdeveloper 11g. 11.1.1.5

· Oracle Database Express 11g

· Haber culminado la parte 7 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

Parte 4: Personalización de View Objects.

Parte 5: Lógica en el Módulo de Aplicaciones

Parte 6: Manejo de Bindings

Parte 7: Creación de Templates

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.

Bien toca realizar una página de búsqueda la cual permita obtener de manera tabular a todos los clientes cuyo nombre coincida con un dato que el usuario ingrese por la pantalla. 

 

Los pasos a realizar son los siguientes:

1. Elija la carpeta pages y haciendo clic derecho seleccione la opción New

image 

2. Elija la opción JSF – JSF Page

image

3. Nombre la página como listaCliente, elija el templateVentas y asegurese de tener activo la opción Automaticaly Expose UI Components….. tal como se muestra en la siguiente figura.

Pulse OK,

image

 

3. Note que se ha creado una nueva página que hereda los datos del template y define una región denominada “contenido” donde podremos colocar nuestros componentes.

image

4. Tenemos primero que darle un título a la página creada. Para eso elija en la paleta de estructura la opción de pageTemplate y en la paleta de propiedades cambie el valor de titulo por “Listado de Clientes”

image

 

5. Ahora empezaremos a poblar la página de componentes gráficos. Sin embargo, una regla clave es colocar siempre un contenedor debajo de cualquier componente gráfico. En este caso y siguiendo la pauta del capitulo a anterior debemos colocar layouts que sean flexibles al cambio de tamaño que sufra la página por parte del usuario final. En este caso el layout que nos asegura este comportamiento es el PanelStrechLayout. Arrastremos este contenedor sobre la página :

image

 

6. Sólo trabajaremos con la región top y center. Elimine el resto de regiones.

image

 

7. La región de top la reservaremos para los controles de búsqueda, ahora sólo nos limitaremos a mostrar los datos de los clientes de manera tabular. En este caso antes de arrastrar la tabla de datos es conveniente usar un layout especializado en alojar tablas denominado PanelCollection. Arrástrelo hacia la región center.

 

image

 

8. Ahora si, arrastre desde la paleta de Data Control la referencia a ClienteVO1. Elija la opción Table | ADF Read only Table.

image

 

9. La siguiente ventana permitirá definir la manera en la que se mostrará la tabla. En este caso seleccione la opción Single Row y Enable Sorting las cuales permiten seleccionar una fila de la tabla y habilitan enlaces en la cabecera para permitir el ordenamiento de la tabla en base a un fila. Pulse OK.

image

10. Bien, se debe haber generado la tabla con datos. Un primer inconveniente que vemos es que las columnas tiene un ancho fijo, lo cual no aprovecha la totalidad del espacio. Para solucionar esto indiquemos a la tabla que columna tendrá un tamaño variable en base a las dimensiones del browser. Ubíquese en la tabla y en la paleta de propiedades cambie la propiedad ColumnStreaching por last.

image

 

11. Bien, hasta acá tenemos la pantalla con una tabla que tiene la propiedad de expandirse ó contraerse en función al tamaño del browser. Puede probarlo haciendo clic derecho sobre la pantalla y pulsando Run.

image

 

12. El resultado hasta este punto sería similar a lo mostrado a continuación.

 

image

 

Note que si expande o contrae la página el contenido también se acomoda al nuevo tamaño.

 

13. Ahora lo que toca por hacer es colocar criterios de búsqueda en la pantalla. En este caso sólo colocaremos un criterio de búsqueda por nombre. Para lograr esto, es necesario modificar el view object que hemos usado para crear la tabla e incluir una característica llamada ViewCriteria.  Aprovechemos este paso para brindar una rápida inducción a lo que son View Criterias.

 

VIEW CRITERIAS.

Los view criterias son como filtros que tiene un query que se definen en tiempo de diseño. 

Si hacemos una analogía con los conceptos de base de datos, un view object vendría a ser el query, por ejem:

SELECT *

FROM CLIENTE

El view criteria vendría a ser un criterio o filtra de esa consulta por ejemplo

NOMBRE LIKE ´JOSE´

La ventaja de el uso de view criterias es que podrías tener más de uno sobre la misma consulta, y dinámicamente podrías escoger cual de los criterios aplicar dependiendo de las circunstancias. Siguiendo con el ejemplo podría tener otro criterio que busque a los clientes por su email, entonces tendríamos otro criterio cómo

EMAIL LIKE ‘parbizu@hotmail.com’

 

14. Definamos el view criteria . Para ello haga doble clic sobre la vista ClienteVO y seleccionando la categoría Query pulse el botón  “Create new View criteria” tal como se muestra a continuación.

 

image

 

15. Sobre la pantalla mostrada defina el criterio. En este caso pulse el botón “Add Criteria” y seleccione el atributo nombre como el campo sobre el cual se hará la búsqueda-

image

16. Adicionalmente debemos definir el operador y el operando empleado en el criterio. El operador será Contain (que trabaja como un like de base de datos), y el operando será del tipo bind variable.

image

 

17. El campo parameter debe ser completado con el nombre de la variable que se usará para pasar valores a la consulta. Pulse el botón de (+) para agregar una nueva variable denominada p_nombre tal como se muestra en la figura. Pulse OK en las dos siguientes ventanas.

image

 

18. Perfecto, ya tenemos creado el viewCriteria denominado ClienteVOCriteria. Será ahora necesario disponer de un método que invoque a este query-

image

 

19. Vamos ahora a incluir un método que reciba como parámetro un string y filtre los datos de la vista de cliente usando el viewcriteria defindo previamente.  Ingrese al módulo de aplicación VentasAM y a su clase de implementación VentasAMImpl

 

image

 

20. Sobre esas clase agreguemos un nuevo método denominado filtrarCliente el cual recibirá como parámetro una cadena y filtrará la vista de ClienteVO con el viewcriteria.

 

public void filtrarCliente(String nombre)
{
    this.getClienteVO1().setApplyViewCriteriaName("ClienteVOCriteria");
    this.getClienteVO1().setNamedWhereClauseParam("p_nombre", nombre);
    this.getClienteVO1().executeQuery();
}

 

image

 

21. Finalmente no olvide publicar su método en el módulo de aplicaciones. Pulse OK.

image

 

22. Regresemos a la página listaCliente.jspx e incluyamos una caja de texto que lo usaremos para pasar los parámetros de la búsqueda. Entonces sobre la sección Top arrastre un Panel Group Layout.  Modifique la propiedad Layout de este componente por horizontal tal como se muestra en la siguiente figura.

 

image

 

23. Ahora incluiremos una caja de texto que usaremos para que el usuario escriba el nombre que quiere buscar. Entonces arrastre el control InputText sobre el layout y cambie su propiedad Label por Nombre.

 

image

 

24. Una vez que hemos incluido la caja de texto, será necesario definir sobre que variable se almacenará el contenido de la caja de texto. Para eso usted puede apoyarse en la capa de bindings. Por default cada vez que se crea una página se incluye un bindings llamado variable que puede ser usado para alojar variables locales. Bien entonces crearemos esta variable llamada b_nombre y la enlazaremos a la caja de texto creada en el paso anterior. Para eso aperture la seccion de bindings de la página .

image

 

25. Ubíquese en la paleta de estructura y haciendo clic derecho sobre el bindings variable elegir la opción Insert inside variables | variable tal como se muestra en la figura.

image

 

26. Defina como nombre variable b_nombre y del tipo String.Pulse OK.

image

 

27. Lo que ha hecho es simplemente crear una variable a nivel iterador. Sin embargo las variables a nivel iterador no pueden ser accedidas directamente por la página sino que deben pasar a travez de un value binding.  Puede leer nuestro capitulo anterior para comprender más sobre esta arquitectura. Bien entonces el siguiente paso será crear un value binding . Para eso en la seccion de bindigs pulse el botón “Create control bindings”

 

image

 

28. En esa pantalla elija la opción de atributes values.

image

29. Luego elija como dataSource las variables y como atributo b_nombre definido en el paso anterior. Pulse OK.

 

image

30. Notará que se ha creado un nuevo value bindigs denominado b_nombre1. Este último será el nombre que usaremos como variable temporal para almacenar los valores de la página.

image

31. Regrese a la página en modo de diseño y seleccionado el inputText asociado al nombre modifique su propiedad value pulsando la flecha para habilitar el menú contextual y luego la opción Expression Builder

 

image

 

32. Luego coloque la siguiente expresión sobre el campo y pulse OK.

 

#{bindings.b_nombre1.inputValue}

 

image

 

33. Bien en este punto tenemos una pantalla con una caja de texto que guarda todos sus valores ingresados en una variable llamada b_nombre1. Bien lo que nos faltaría sería invocar al método filtrarCliente (del punto 20) y pasarle como parámetro el valor de la variable b_nombre1. Estamos de acuerdo?.  Para eso simplemente vayamos a la paleta de datacontrols ,que como hemos explicado expone nuestra capa de modelo  automáticamente, y arrastremos la operación filtrarCliente hacia la página, al costado de la caja de texto eligiendo la opción Method | ADF Button, tal como se muestra en la siguiente figura.

 

image

 

34. Aparecerá una ventana que permitirá definir el valor que tendrá el parámetro del método. Lo que haremos será utilizar las expresiones para asociarlas a la variable b_nombre. Pulse Ok en las pantallas modificadas.

image

 

image

 

35. Finalmente modifiquemos el valor del texto del botón por : Buscar.

image

 

36. Probemos nuevamente nuestra pantalla. Repita el paso 11 y verá que ahora la pagina inicialmente recupera todos loa valores

image

 

37. Ahora si colocamos la palabra “la” y pulsamos Buscar, nos mostrará todas las coincidencias.

image

 

38. Si desea puede descargar el proyecto culminado en el siguiente enlace.

CODIGO COMPLETO

Thursday 1 November 2012

Obtener la Certificación ADF

 

Hace unos días recibí la pregunta de un desarrollador pidiéndome información acerca del examen de certificación en ADF. Este tema me pareció muy importante para los que utilizan esta tecnología de ORACLE así que decidí escribir este post para orientar a los que vayan a tomar este examen.

Datos Generales.

Bien primero empecemos por los datos generales. Este es un examen de 105 minutos de duración orientado a medir el conocimiento del framework ADF y el uso de la herramienta Jdeveloper.

El examen es en ingles (también hay una versión en japonés, pero dudo que prefiera este en vez del ingles )

El costo del examen puede variar de país en país, pero está entre 150 dólares y 200 dólares. Para conocer más detalles sobre donde tomar el examen puede ir al siguiente link.

http://www.oracle.com/partners/en/knowledge-zone/middleware/adf-exam-page-322499.html

Finalmente el grado que se obtiene es:

Oracle Application Development Framework 11g Certified Implementation Specialist

Cuál es la estructura del Examen?

Bien el examen es teórico y práctico. Cuando me refiero a que es práctico no me refiero a que estará el jdeveloper instalado para que usted haga una aplicación sino, a que el examen mide también el uso “práctico” que usted haya realizado con la herramienta. Le pongo un par de preguntas para que se entienda estas ideas.

Ejemplo de Pregunta Teórica.

An Iterator Binding:

Connects UI components to attributes in a data collection (text values entered on the page)

Binds to an iterator that tracks the current row in a data collection (results returned to the page)

Invokes custom or built-in operations on a data control or its data collections (the Create button)

Ojo acá se mide la teoría de bindings

Ejemplo de pregunta Práctica.

What are the three ADF component categories?

Common, Operations, and Bindings

Common, Operations, and Layout

Operations, Layout, and Bindings

Operations, Bindings, and Data

En este caso se pregunta a las categorías en las que se encuentra organizado los controles ADF en Jdeveloper. Si usted utiliza Jdeveloper y ADF fácilmente podrá responder esta duda puesto que esta organización se muestra en la paleta de controles de la herramienta.

Como puedo prepararme?

Existe mucho material de estudio. Basta con buscar en google para encontrar muchos tutoriales en ingles y algunos en español. Personalmente recomiendo seguir la colección ADF Insiders que ofrece contenido para niveles básicos, medios y avanzados.

http://www.oracle.com/technetwork/developer-tools/adf/learnmore/adfinsider-093342.html

Adicionalmente, es importante destacar que el examen es para gente que conoce y trabaja con el framework ADF. Mi recomendación por eso es que participen en un par de proyectos con esta tecnología antes de tentar el examen.

Recomendaciones durante el Examen.

· Se puede saltar las preguntas, es decir si no sabes la respuesta a alguna de las preguntas las puedes marcar para responderlo posteriormente.

· Practique su ingles técnico. Muchas preguntas no son tan breves y exigen leer un texto muy grande en ingles, así que mientras este mejor preparado en el idioma podrá tener mayor éxito en el examen.

· Existe muchas preguntas sobre la arquitectura de componentes, así que conocer como están relacionadas los componentes de ADF le dará la oportunidad de responder muchas preguntas. Ejemplos de este tipo de preguntas son:

o Cuales son los componentes claves de ADF BC?

o Cuales son los tipos de bindings?

o Cual es la diferencia entre un taskflow de tipo bounden y unbounded.

No puede tomar el examen sino tiene claro los distintos componentes de ADF.

Donde compro los vouchers para dar el examen.

Oracle trabaja con pearson así que en el enlace que coloco abajo le indica los pasos a seguir para pagar el examen.

http://pearsonvue.com/oracle/

Adicionalmente, existen otras maneras de obtener un voucher de manera gratuita.

1. Si usted participa en el Oracle Open World de SF existe días en los cuales usted puede dar el examen de manera gratuita.

2. ORACLE periódicamente organiza campañas de certificación entre sus partners. Así que si usted trabaja en un partner de ORACLE pídale que le avise cuando ORACLE lance esa campaña y aplique el examen.

Que preguntan vienen en el examen?

No existen simulacros de examen. Sin embargo comparto con ustedes preguntas que suelo tomar en los cursos que dictó y que le puede ayudar a identificar el nivel de complejidad del examen.

 

The Structure Pane displays the elements of a selected document in a tree format.

True Or False

..

The bc4j.xcfg file contains the definition for:

VO names and locations

AM names and their database sources, with any run-time parameters

Objects that bind iterators to VOs and iterator bindings to iterators

Location of .jpx and .cpx files

In which directory do you find the adfc-config.xml, faces-config.xml, trinidad-config.xml, and web.xml files?

\model\WEB-INF

\classes\WEB-INF

\public_html\WEB-INF

\source\WEB-INF

..

View Objects with no entity usage definition are always read-only. They do not pick up entity-derived default values, do not reflect pending changes, and do not reflect updated reference information.

True Or False

..

Identify the source of components in the Data Control Palette.

Entity Objects and Database Tables

Managed Beans and Java Classes

View Objects and Application Modules

Page Definitions and Web Services

..

All managed beans should be defined in the faces-config.xml file.

True Or False

Bien estoy seguro que siguiendo las recomendaciones que indico en este post usted pasará con éxito el examen de certificación en ADF.

Mucha suerte y coméntenos su experiencia con la prueba.

Wednesday 3 October 2012

Experiencia de usuarios usando oracle

Esta sesion es bastante novedosa porque muestra la estrategia de oracle relacionada a la experiencia con usuarios.
La charla inicia indicando que antes no se priorizaba esta tema y se concentraba en las funcionalidades de las apps.
Sin embargo ahora brindar eso al usuario para lograr productividad es un diferencial que deben tener las aplicaciones y el objetivo es hacer simple e intuitiva las aplicaciones siguiendo la regla de mostrar solo lo que se necesita en el momento correcto simllificando actividades y evitar sobrecargar las interfaces.

La demo muestra un producto desarrollando con estos principios denominado Fuse y cuya primera pantalla se parece mucho a la pantalla inicial de un iphone

Se menciona q el producto al igual que todos los productos de fusion se basa en ADF.

Muestro algunas imagenes del producto que se presento en este OOW




Tuesday 2 October 2012

ADF Mobile

Durante esta sesion se memciona que se usa adf como el framework para el desarrollo de soluciones mobiles
Se menciona 3 posibilidades :

1 Usar los componenetes de adf tal como los conocemo para que sea mostrado en tablets.

2. Usa adf mobile browser para ejecutr las paginas de adf en dispositivos mas pequenos como telefonos inteligentes

3. Oracle adf mobile para aplicaciones nativas . Es decir que corran en el dispositivo mobil sin necesidad  de estar en linea.

Durante la explicacion de la arquitectura se menciona que las aplicaciones usan un jvm para ejecutar el codigo java dentro de los dispositivos mobiles

Finalmente se muestra la demo del producto




Keynote cloud services thomas kurian

El keynote mostro los servicios de cloud que oracle ofrece. Se menciono servicios de java , database. Se lanzo el servicio de developer para administracion del codigo y despliegue en la nube.
Adicionalmente se indico los proximos servicios en la nube : colaboracion, colas y analiticos.
Se mostro una demo del servicio de developer el cual permite que se pueda integrar el codigo, build el ear y automatizar los despliegues.
Listo la oferta que tiene para las aplicaciones en la nube. Servicios financieros , crm , recursos humanos, etc


Monday 1 October 2012

Desarrollando sobre la red social de oracle

Hoy dia participe en un lab sobre el desarrollo en la red social de oracle. La red social de oracle es un producto desarrolado para brindar recursos de comunicacion y colaboracion basado en el concepto de red social. El labs consistio basicamente en interactuar de manera programatica con los datos que se registran en la red social. Por ejemplo mediante scripts de json se pudo recuperar las conversaciones registradas por un usuario. La idea es que las empresas puedan integrarse con los datos que se almacenan en u red social y usarlas para sus propositos comerciales.



Sunday 30 September 2012

Deploy automatico con jdev

Empezamos nuestra cobertura del oow con la charla deploy with joy por aino . Bien el objetivo de la charla es mostrar como crear una tarea automatica de creacion y despligue de una app cpn adf. Para todos los que trabajamos con adf es muy comun realizar operaciones de creacion y despligue desde jdev, sin embargo que pasa cuando queremos que esas aplicaciones sean realizadas por jobs y sin la necesidad de que una desarrollador tenga que entrar al jdev. Bien en ese caso es cuando algunas herramietas  open source nos pueden ayudar.

El expositor utiliza jdev 11,1,1,6 para su demo y empieza indicando que para las tareas de build and deploy usa un script de ant. Genera el script mediante una opcion de jdev y hace pequenas
Ahora para que ese script pueda se ejecutado mediante una tarea programada el expositor hace uso de hudson lo que le permite entre otras cosas automatizar la actulizacion de codigo desde un repositorio, la invocacion del script de ant y finalmente la operacion de deploy hacia el web logic. Esta ultima accion esta definida en el script de ant.

Bien, este ha sido una excelente experencia para ver como jdev se integra con otras tecnologias open source.


Thursday 27 September 2012

Versión Gratuita de ORACLE ADF.

ORACLE ha anunciada la salida de un nueva licencia relacionada a los desarrollos y despliegues de ADF denominada “ADF Essentials“ . Su principal característica es que es Gratuita. Si así como lo lee, completamente gratuita, cero costo de despliegue en productivo e incluye los más importantes componentes de la versión completa de ADF.

 

image

Para entender mejor la noticia, la cual es muy importante para los profesionales que trabajan o´ quieren trabajar con ADF,vamos a explicar esto por partes:

Motivación:

Oracle esta asumiendo una estrategia más agresiva para popularizar el uso del framework ADF. A pesar de muchas de los beneficios ofrecidos por el framework el tema del licenciamiento ha sido un problema que siempre nos encontramos al momento de adoptar esta tecnología.  Se espera que con este movimiento ADF se popularice y de esa manera aumente la cantidad de desarrolladores especializados en este tecnología.

Limitación:

Lo que es importante tener en cuenta es esta versión de ADF sólo incluye los más importantes elementos de ADF, pero no todos.  Citemos cuales son estos componentes importantes:

  • Oracle ADF Faces Rich Client Components
  • Oracle ADF Controller
  • Oracle ADF Binding
  • Oracle ADF Business Components.

Con esos componentes usted puede desarrollar cualquier tipo de aplicación WEB. Quizás el único componente importante que no tenemos es ADF Security, pero en el mercado existen muchas alternativas para remplazar esto.

Conclusiones:

Este es un movimiento importante por ORACLE porque abre la posibilidad que pequeñas empresas puedan empezar a aprovechar una plataforma gratuita. Me refiero a ORACLE XE (Database), Oracle GlassFish (App Server) , Oracle Jdeveloper y ADF.

Bueno, espero que con esto tengamos muchos más desarrolladores y empresas usando ADF en nuestra región.

 

Más Información

Oracle ADF Essentials Site

Oracle ADF Essentials FAQ

Demo de como Desplegar en GlassFish