tag:blogger.com,1999:blog-3902322777101843822024-03-05T04:58:12.718-08:00Plinio ArbizuSobre experiencias con las tecnologías Oracle ADF, WebCenter.Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.comBlogger37125tag:blogger.com,1999:blog-390232277710184382.post-76768800965889845462014-04-21T17:06:00.001-07:002014-04-21T17:06:20.780-07:00Oracle Developer Day 2014<p> <p>ORACLE Developer Day es un evento gratuito organizado por ORACLE que mostrará a los desarrolladores las últimas tendencias y buenas prácticas en el uso de las herramientas de desarrollo de ORACLE. Conozca las y beneficios que los profesionales de TI pueden alcanzar al utilizar las robustas y altamente productivas plataformas que ORACLE ofrece para la creación de aplicaciones de negocio. <p>El evento es completamente gratuito. <p><strong>Información General del Evento.</strong><strong>Fecha :</strong> 29 de Abril 2014<strong> </strong><br><strong>Inicio</strong>: 09:00 am<strong></strong><br><strong>Duración </strong>: 8 Horas<strong> </strong><br><strong>Lugar :</strong> Marriot Reforma.<br>Reforma Norte 276 Mexico DF <p><strong>Tópicos</strong> <ul> <li>Oracle Database Development <li>Fusion Middleware <li>Developers Tools & frameworks <li>Applications</li></ul> <p>Info: <a href="http://www.oramex.org/eventos.php">http://www.oramex.org/eventos.php</a><br>Registro: <a href="http://bit.ly/1kwBeoe">http://bit.ly/1kwBeoe</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-76770984546411893672013-09-15T13:35:00.001-07:002013-09-15T13:35:54.623-07:00Experiencia de Usuarios con ADF<p> </p> <p>Durante mi última participación en el OTN TOur, el equipo de OTN Lat elaboró un video donde participó explicando algunos conceptos de los patrones de experiencia de usuario con ADF.</p> <p>Lo comparto para que conozcan más al respecto.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:c80b70e7-1e43-46dc-a57b-094456dbc630" class="wlWriterEditableSmartContent"><div id="96080bbf-0b54-4821-8f8a-0e287e1dd18f" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=xm0izUuEfVE&list=PLNxfFjozT1w5p0iYhUeORifhcXUYUS5d-" target="_new"><img src="http://lh4.ggpht.com/-5pX2QZUymkQ/UjYaKXuEJOI/AAAAAAAABeY/8uopk4KK0iA/videof8e457f6c906%25255B6%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('96080bbf-0b54-4821-8f8a-0e287e1dd18f'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"252\"><param name=\"movie\" value=\"http://www.youtube.com/v/xm0izUuEfVE?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/xm0izUuEfVE?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"252\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-31064624901782269132013-06-03T23:59:00.001-07:002013-06-03T23:59:29.068-07:00Introducción a Java EE 7<p> </p> <p>Para los interesados ORACLE ha programado una web conference donde mostrará las novedades de la plataforma Java EE 7.</p> <p>1. WebSocket client/server endpoints<br>2. Batch Applications<br>3. JSON Processing<br>4. Concurrency Utilities<br>5. Simplified JMS API<br>6. @Transactional and @TransactionScoped!<br>7. JAX-RS Client API<br>8. Default Resources<br>9. More annotated POJOs<br>10. Faces Flow</p> <p>Los detalles de la conferencia en el siguiente <a href="https://event.on24.com/eventRegistration/EventLobbyServlet?target=registration.jsp&eventid=615713&sessionid=1&key=453EBA948F6408FE613E61903CBAEBFA&partnerref=Java_EE7_Launch_glassfishblogs_06122013&sourcepage=register">enlace</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-36347393847526889972013-05-18T22:39:00.001-07:002013-05-18T22:40:08.341-07:00OTN Tour 2013<p> </p> <p>Este año nuevamente participaré en el OTN Tour de Latinoamérica. </p> <p>En esta ocasión estaré en los siguientes países.</p> <p> </p> <p>1. <a href="https://www.facebook.com/orauggt#!/orauggt?sk=wall">Guatemala</a> : 17 de Julio.</p> <p>2. <a href="https://www.facebook.com/oug.panama">Panamá</a>: 22 de Julio</p> <p>3. <a href="http://www.oramex.org/">México</a>: 26 de Julio’</p> <p>Los temas que expondré serán :</p> <p><b>ADF Techniques to improve productivity and User eXperience. </b> <p>These days, users require not only essential applications, but developers also have to provide usable, fast and highly functional solutions. Achieving this is a very big challenge for organizations. However, Oracle developers have the support of UX Design Patters and the ADF framework features to cover those needs. <p>In this session, the speaker will show real user requirements such as avoiding the use of the mouse, proper organization of components, minimizing server invocations among others and how these issues were solved using ADF. <p>This session will include UX Design Patters , ADF Faces Client Framework, ADF Faces Components, ADF Task Flows. <p>Duration : 1 Hour. <p> <p><b>ADF Basic Training</b> <p>In this course, you will learn the main components of ADF and how to personalize it to build robust solutions. Step by step instructor will teach how to build a solution from model components to User Interface. In each topic, students will apply the theory concepts through labs in order to build a complete solution. <p>This course is ideal for people who are beginning to work with ADF or have some knowledge of the field. It clarifies what need to create ADF Solutions. <p>This training requires a computer for each participant. <p>Duration: 4 Hours. <p> </p> <p>Espero verlos en el OTN Tour</p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-41141104647724458822013-01-28T10:42:00.001-08:002013-01-28T10:43:22.772-08:00Curso ADF 11g –Parte 10<p>Tema : Pantalla de Invocación de Métodos <p>Para finalizar este curso vamos a crear una página para invocar un método que se encuentra en el modelo. <p> <p>Requerimiento: <p>· Oracle Jdeveloper 11g. 11.1.1.5 <p>· Oracle Database Express 11g <p>· Haber culminado la parte 8 del tutorial.</p> <p>Capítulos Anteriores <p>Parte 1: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-11g-parte-1.html">Creación del Modelo de Datos.</a> <p>Parte 2: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-parte-2.html">Creación de Componentes de Negocio</a> <p>Parte 3: <a href="http://plinioa.blogspot.com/2012/01/curso-adf-11g-parte-3.html">Personalización de Entidades</a> <p>Parte 4: <a href="http://plinioa.blogspot.com/2012/02/curso-adf-11g-parte-4.html">Personalización de View Objects.</a> <p>Parte 5: <a href="http://plinioa.blogspot.mx/2012/02/curso-adf-11gparte-5.html">Lógica en el Módulo de Aplicaciones</a> <p>Parte 6: <a href="http://plinioa.blogspot.mx/2012/03/curso-adf-11gparte-6.html">Manejo de Bindings</a> <p>Parte 7: <a href="http://plinioa.blogspot.mx/2012/05/curso-adf-11gparte-7.html">Creación de Templates</a> <p>Parte 8: <a href="http://plinioa.blogspot.mx/2012/12/curso-adf-11gparte-8.html">Página de Búsqueda</a> <p>Parte 9: <a href="http://plinioa.blogspot.mx/2013/01/curso-adfparte-9.html">Página de Creación de Registro</a> <p> <p> <p>Opcional : <p>Si no culminó los capítulos anteriores y quiere empezar desde este capítulo, puede descargar el siguiente código para continuar el curso. <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo9.zip">Código previo</a>. <p> <p>En los capítulos anteriores vimos como crear páginas con funcionalidades de búsqueda y de inserción de datos. Ahora lo que vamos hacer es crear una interfaz de usuario para invocar un método que creamos en la capa de Modelo. <p>En el capitulo 5, creamos un método que permite realizar un incremente sobre los precios de los productos en base a un porcentaje que nosotros indiquemos como parámetro. Bien el método funciona Ok, pero el usuario aún no puede utilizarlo. Bien, el laboratorio de ahora servirá justamente para crear una interfaz de usuarios que sirva para invocar dicho método. <p>Empecemos entonces la parte práctica. <p>1. En este caso crearemos una nueva página denominada incrementaPrecio.jspx. Para eso hagamos clic derecho sobre el paquete de pages y elija la opción : New</p> <p> </p> <p><a href="http://lh3.ggpht.com/-3jatS0dRVzw/UQbGaAOkIvI/AAAAAAAABa0/4m8JIXBGkOo/s1600-h/image%25255B2%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-gKW9WUUuDp0/UQbGa27DcrI/AAAAAAAABa8/d34npMziBLI/image_thumb.png?imgmax=800" width="244" height="223"></a></p> <p> </p> <p>2. De la galería de componentes, elija la opción JSF | JSF Page. Pulse OK.</p> <p> </p> <p><a href="http://lh5.ggpht.com/-uKPPRJoj0UI/UQbGbuSo3vI/AAAAAAAABbE/DoGWWqi2XyQ/s1600-h/image%25255B5%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-8wSR-yLyM3o/UQbGcRHM3QI/AAAAAAAABbM/ZflYdbfgUZE/image_thumb%25255B1%25255D.png?imgmax=800" width="244" height="175"></a></p> <p> </p> <p>3. Renombre la página por incrementaPrecio.jspx y asegúrese que este activado la opción de creación del backing bean. Pulse OK.</p> <p><a href="http://lh5.ggpht.com/-9Mmge60SMf4/UQbGcxLzItI/AAAAAAAABbU/q2JudQkEgTk/s1600-h/image%25255B15%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-P87vNuY2h60/UQbGdVYoVvI/AAAAAAAABbc/ecP_866Ki4k/image_thumb%25255B5%25255D.png?imgmax=800" width="243" height="312"></a></p> <p> </p> <p>4. La invocación de un método es relativamente sencillo, simplemente tenemos que arrastrar el método en la página. Para eso vaya al Data Control y elija la operación incremetarPrecio(int) y arrástrelo hasta la página. Elija la opción de ADF Parameter Form.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-ewNexUO6q9U/UQbGeR2OMsI/AAAAAAAABbk/_44c-ludJEk/s1600-h/image%25255B19%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-WHFET0YCdNg/UQbGe-tf4fI/AAAAAAAABbs/lyCcNLusLsM/image_thumb%25255B7%25255D.png?imgmax=800" width="408" height="235"></a></p> <p> </p> <p>5. El asistente sugerirá la creación de un campo para ingresar el porcentaje a incrementar. Pulse OK.</p> <p><a href="http://lh5.ggpht.com/-Lifszcbxu0c/UQbGfU01wtI/AAAAAAAABbw/PLNCWiMqAW8/s1600-h/image%25255B23%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-Q3DhZ8nQGMk/UQbGgDIQ4QI/AAAAAAAABb8/6Z4TqYqkvbo/image_thumb%25255B9%25255D.png?imgmax=800" width="325" height="272"></a></p> <p> </p> <p>6. En este punto, se ha creado un formulario para invocar el método. Sin embargo para poder ver el efecto del cambio, vamos a incluir un tabla con la información de los precios por producto. Para eso, use el data control y arrastre la vista de ProductoVO 1debajo del formulario de invocación. Elija ADF Read Only Table..</p> <p><a href="http://lh6.ggpht.com/-d1IsSY7I1EE/UQbGgwkQA6I/AAAAAAAABcE/6aiXCcjqLfg/s1600-h/image%25255B27%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-EI5r3huUpVo/UQbGh1A8lFI/AAAAAAAABcM/wq-iTt9No6g/image_thumb%25255B11%25255D.png?imgmax=800" width="412" height="215"></a></p> <p> </p> <p>7. Acepte los valores por Default. Pulse OK.</p> <p><a href="http://lh3.ggpht.com/-CueY_DMRmdI/UQbGi2slTkI/AAAAAAAABcU/g6est-4bKuk/s1600-h/image%25255B31%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-zVtAYX-MOqA/UQbGjTIqG_I/AAAAAAAABcc/8uvJ6WIyNiI/image_thumb%25255B13%25255D.png?imgmax=800" width="368" height="307"></a></p> <p> </p> <p>8. Modifique la etiqueta y el botón del formulario de invocación.</p> <p><a href="http://lh5.ggpht.com/-q_yNO4dMlnQ/UQbGkX-hekI/AAAAAAAABck/BsS5udwXa98/s1600-h/image%25255B35%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-YP_ku3QZ0Mc/UQbGk4KGX3I/AAAAAAAABcs/rl_f9sD9e9w/image_thumb%25255B15%25255D.png?imgmax=800" width="284" height="271"></a></p> <p>9. Probemos el resultado. Haga Run Sobre la página, coloque un valor entero y pulse procesar.</p> <p><a href="http://lh6.ggpht.com/-6twuP-rQMtw/UQbGlugh3RI/AAAAAAAABc0/ohxxsZBkBTc/s1600-h/image%25255B38%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-Ncl5U1FGDuw/UQbGmDr-Z8I/AAAAAAAABc8/3p87IkU6hpo/image_thumb%25255B16%25255D.png?imgmax=800" width="235" height="244"></a></p> <p> </p> <p>10. Notará que los precios se incrementaron correctamente.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-6KfoQVU6JE4/UQbGmmnp4VI/AAAAAAAABdE/LBpB27QWJkk/s1600-h/image%25255B41%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-a4AG1CGHLR8/UQbGnc4NOyI/AAAAAAAABdM/WBBIdOUNjS8/image_thumb%25255B17%25255D.png?imgmax=800" width="235" height="244"></a></p> <p> </p> <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo10.zip">Descargar Código Finalizado.</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com4tag:blogger.com,1999:blog-390232277710184382.post-48353202972810579412013-01-25T15:26:00.001-08:002013-01-27T12:20:39.462-08:00Curso ADF–Parte 9<p>Tema : Agregar Clientes <p>En el post anterior trabajamos en un pantalla de búsqueda. Ahora vamos a completar dicha pantalla con la operación de creación <p> <p>Requerimiento: <p>· Oracle Jdeveloper 11g. 11.1.1.5 <p>· Oracle Database Express 11g <p>· Haber culminado la parte 8 del tutorial.</p> <p>Capítulos Anteriores <p>Parte 1: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-11g-parte-1.html">Creación del Modelo de Datos.</a> <p>Parte 2: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-parte-2.html">Creación de Componentes de Negocio</a> <p>Parte 3: <a href="http://plinioa.blogspot.com/2012/01/curso-adf-11g-parte-3.html">Personalización de Entidades</a> <p>Parte 4: <a href="http://plinioa.blogspot.com/2012/02/curso-adf-11g-parte-4.html">Personalización de View Objects.</a> <p>Parte 5: <a href="http://plinioa.blogspot.mx/2012/02/curso-adf-11gparte-5.html">Lógica en el Módulo de Aplicaciones</a> <p>Parte 6: <a href="http://plinioa.blogspot.mx/2012/03/curso-adf-11gparte-6.html">Manejo de Bindings</a> <p>Parte 7: <a href="http://plinioa.blogspot.mx/2012/05/curso-adf-11gparte-7.html">Creación de Templates</a> <p>Parte 8: <a href="http://plinioa.blogspot.mx/2012/12/curso-adf-11gparte-8.html">Página de Búsqueda</a> <p> <p>Opcional : <p>Si no culminó los capítulos anteriores y quiere empezar desde este capítulo, puede descargar el siguiente código para continuar el curso. <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo8.zip">Código previo</a>. <p> <p>Vamos a continuar con la pantalla de listado, pues es desde ahí donde empezaremos a realizar el mantenimiento de datos. Primero vamos a agregar un toolbar desde donde se realizará las operaciones descritas previamente. <p> <p> <p>Los pasos a realizar son los siguientes: <p>1. Abra la página de listaCliente.jspx y haciendo clic derecho sobre la región toolbar elija la opción “Toolbar” tal como muestra la siguiente figura. Lo que va a pasar es que se creará un control toolbar el cual es un contenedor de botones. Entre sus ventajas esta que aplica un separador entre cada botón.</p> <p> </p> <p><a href="http://lh3.ggpht.com/-L5JHQffiIMM/UQMUNfxWYVI/AAAAAAAABP0/8OGofDsLQ5w/s1600-h/image3.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-NtHuGwmmzXY/UQMUOTujeOI/AAAAAAAABP8/OikUv8Nyy_w/image_thumb1.png?imgmax=800" width="475" height="216"></a></p> <p> </p> <p>2. Ahora será necesario insertar los botones para los operaciones. Lo que vamos a hacer a continuación es utilizar el framework para agilizar esta operaciones. Si bien el proceso es muy sencillo, sólo es un drag and drop, lo importante es entender que es lo que sucede detrás de escena. Por eso hagamos una breve explicación del proceso antes de empezar a programar esto.</p> <p>Si usted recuerda en la parte de creación del modelo creamos entidades y view objets(basadas en tablas de BD) que abstraen la capa de modelo. Bien esos componentes que hemos definido son usados para poder crear la pantalla que estamos mostrando en este momento. En este caso hemos usado el view object de Cliente para mostrar dicha información. El punto más importante a entender es que lo que se muestra no es el view object propiamente dicho, sino una instancia del view object en memoria. Es la misma analogía que la definición de clase y objeto. Ahora porque hacemos hincapié en esto?, pues básicamente para resaltar que las operaciones que vamos a realizar en este momento se aplicarán sobre los DATOS EN MEMORIA. </p> <p>Eso significa que acciones como agregar ó eliminación de un registro se realizarán sobre los datos cargados en memoria del servidor y NO en la base de datos. Para que esos datos cargados e memoria puedan impactar en la BD se usará una operación llamada “commit”, de la misma forma si queremos que esos cambios no se apliquen podremos usar la operación “rollback”</p> <p>Bien, que otra cosa importante debemos considerar: los datos cargados en memoria son preservados por el framework entre varios HTTP request (termino técnico: State management ) . Es decir los datos cargados no se pierden gracias a que el framework maneja el estado de los datos. DE manera más sencilla, es como si los datos que son cargados por estas instancias se guardarán en session. De esta forma si el usuario por ejemplo selecciona una fila de la tabla (en la pantalla), el framework guarda esa referencia en memoria y nosotros la podemos conocer con lógica en nuestro código. O mejor aún podemos recuperar los datos que el usuario ha filtrado para poder realizar algún tipo de procesamiento.</p> <p>Bien, una vez que entendemos esto vamos a realizar estas operaciones.</p> <p>3. La primera operación que realizaremos será el de Creación. Bien en este caso crearemos un botón en la sección de toolbar haciendo clic derecho sobre esa zona y eligiendo la opción “Insert inside Toolbar | Toolbar Button” </p> <p><a href="http://lh6.ggpht.com/-DqUhtl6_j5M/UQVYQNaEBNI/AAAAAAAABU0/hXaxJl2Uamo/s1600-h/image4.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-1cRlA8fZjPM/UQVYRWXgeMI/AAAAAAAABU8/8Nm_aXVoVcY/image_thumb1%25255B1%25255D.png?imgmax=800" width="589" height="301"></a></p> <p> </p> <p>4. Modifiquemos la propiedad Text por “Agregar”.</p> <p><a href="http://lh3.ggpht.com/-Hm_fAgKmPk8/UQMUSEmX2OI/AAAAAAAABQk/5b_PUuKfZUA/s1600-h/image16.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-UTdV6FIzfWA/UQMUS0HOwwI/AAAAAAAABQs/0rqVjI2QCqs/image_thumb8.png?imgmax=800" width="461" height="168"></a></p> <p>5. Nuestra próxima acción será crear un formulario “de escritura” que permita manipular los datos de la fila instanciada. Para esos haremos uso de un ventanas emergentes.</p> <p>6. Incluyamos la ventana emergente dentro de la página. Para ello, haciendo uso de la paleta de estructura, arrastre el control popup dentro de la sección af:form de manera similar a lo mostrado en la siguiente página.</p> <p><a href="http://lh4.ggpht.com/-EtOROqhf0BM/UQMUXX8js0I/AAAAAAAABVE/oLYvrYOiuEY/s1600-h/image51.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-JW_66DEiRsk/UQMUYSPcQLI/AAAAAAAABVI/hPKXNp8hIQE/image5_thumb.png?imgmax=800" width="530" height="234"></a></p> <p>7. El Popup define una región cuyo contenido es recuperados, por default, al momento que abrir el popup. En ese momento es guardado en cache. Sin embargo nosotros queremos que su contenido no se guarde en cache sino que se actualice cada vez que abra el botón. Entonces será necesario cambiar la propiedad Content Delivery por LazyUncached.</p> <p><a href="http://lh6.ggpht.com/--UGNBxSmEb8/UQMUZL3yN8I/AAAAAAAABRk/Meeimjo9h0w/s1600-h/image15.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-3PSWOKoUkqk/UQMUZwVOUOI/AAAAAAAABRs/ILWYmeFB-nQ/image_thumb6%25255B1%25255D.png?imgmax=800" width="434" height="214"></a></p> <p> </p> <p>Puede conocer más teoría sobre este componente en el siguiente enlace.</p> <p><a title="http://jdevadf.oracle.com/adf-richclient-demo/docs/tagdoc/af_popup.html" href="http://jdevadf.oracle.com/adf-richclient-demo/docs/tagdoc/af_popup.html">http://jdevadf.oracle.com/adf-richclient-demo/docs/tagdoc/af_popup.html</a></p> <p> </p> <p>8. Ahora debemos definir el contenido que tendrá el popup. En nuestro caso, será una ventana de dialogo que incluirá cajas de texto donde el usuario colocará la información del nombre y email del cliente. Entonces arrastremos ahora el contro Dialog dentro del popup.</p> <p><a href="http://lh5.ggpht.com/-2B_mlPaZl4s/UQMUbFQ1C5I/AAAAAAAABR0/tt9bueM1biw/s1600-h/image57.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-mEFfPwJNgJo/UQMUbwa2X7I/AAAAAAAABR8/fCAp1g55ZI0/image_thumb29.png?imgmax=800" width="475" height="169"></a></p> <p> </p> <p>9. En el title coloque : “Gestión de Clientes”</p> <p><a href="http://lh5.ggpht.com/-6gFw6A0X-IM/UQVYVKy_AeI/AAAAAAAABVM/jvkCxA4JUJ0/s1600-h/image8.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-n5Q4BNrsBJI/UQVYV6WFyPI/AAAAAAAABVU/o7DeCBQaAOE/image_thumb3.png?imgmax=800" width="391" height="210"></a></p> <p> </p> <p>10. Ahora será necesario colocar las cajas de texto para insertar los valores hacia la página. En este punto nos vamos a apoyar en el DataControl y utilizando las referencias a las instancias de las vistas, arrastrarlas y mostrarlas como un formulario. Vaya al data control y arrastre la referencia ClienteVO1 hacia la ventana de dialogo. Elija la opción ADF Form.</p> <p><a href="http://lh4.ggpht.com/-MrnBd5hO9o8/UQVYWW7ZLSI/AAAAAAAABVc/t9BcK8c6txw/s1600-h/image12.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-S7IAhP7XClk/UQVYXKvYyLI/AAAAAAAABVk/SpCxRuRueuo/image_thumb5.png?imgmax=800" width="496" height="230"></a></p> <p>11. El asistente sugerirá que se indique los campos (cajas de texto) que tendrá la pantalla. En nuestro casos eliminaremos el campo ClienteId debido a que el usuario no ingresa ese dato (se genera en base al sequencial) Pulse OK.</p> <p><a href="http://lh5.ggpht.com/-PX7x1XG5BCY/UQMUfRBkADI/AAAAAAAABSk/YZ5OGUnCLc0/s1600-h/image49.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-R1aVjcdvqlE/UQMUgNSFDFI/AAAAAAAABSs/cA7T2FzkvpM/image_thumb25.png?imgmax=800" width="373" height="312"></a></p> <p> </p> <p> </p> <p>12. El resultado será algo similar a lo mostrado a continuación.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-3qjoazybPC0/UQVYXpIWZwI/AAAAAAAABVs/ch5_ZLTGxyk/s1600-h/image16.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-tX21yr_V5OE/UQVYYUmX6nI/AAAAAAAABV0/AS-7eC51rAY/image_thumb7.png?imgmax=800" width="385" height="241"></a></p> <p> </p> <p>13. Bien, analicemos la situación hasta este momento. Hemos creado un botón que levanta un popup con los datos de la instancia de la misma vista que usamos para poblar la tabla de la página. En este punto es importante destacar lo siguiente. </p> <blockquote> <p>13.1 Como hemos explicado previamente, lo que vemos en la pantalla es una instancia de la vista ClienteVO. Es la misma vista que hemos usado para crear los datos de la tabla así como para crear los datos del formulario que esta en el popup. Cuando hablamos de una instancia de la vista ClienteVO usted lo puede ver como una colección de objetos (registros) en memoria.</p></blockquote> <blockquote> <p>13.2 Al abrirse la ventana, la operación que debería ejecutarse debe ser crear un nuevo registro en la instancia de la vista. Esto sería como crear un nuevo objeto sobre la colección de datos que representa la vista. Adicionalmente, el formulario que levantamos en el popup debería mostrar justamente ese nuevo registro y no otro registro de la colección.</p> <p>13.3 Al pulsarse el botón OK, lo que debe pasar es que los datos que el usuario ingreso sobre el nuevo registro debería aplicarse sobre la BD.</p></blockquote> <p>Ok, para solucionar esto aprovecharemos algunas capacidades que ofrece ADF.</p> <blockquote> <p>13.4 Para poder crear una nuevo registro sobre la vista ClienteVO, usaremos una operación llamada CreateInsert que es proporcionada por el framework (Todas las vistas tiene esa operación “out-of-the-box”)</p> <p>13.5 Para llamar a la operación de inserción indicada en el paso anterior usaremos un listener que tiene el popup llamado PopupFetchListener que justamente se invoca cuando se levanta la ventana del popup.</p> <p>13.6 Para poder volcar los datos que están en memoria debemos usar otra operación llamada “commit”.</p> <p>13.7 Para llamar a la operación de commit usaremos un listener que tiene el control de dialogo y que justamente es invocado cuando el usuario pulse el botón OK. El listener se llama Dialog Listener.</p> <p>13.8 Adicionalmente debemos capturar la acción de Cancelar, la cual debería eliminar los cambios que tiene actualmente el registro. La operación que invocaremos en este caso es “Rollback” que tambien lo ofrece el framework.</p></blockquote> <p>14. Bien, si ha notado se invocan tres operaciones del framework : CreateInsert, Commit, Rollback. Antes de poder usarlo, es necesario que estas operaciones estén disponibles en la página que estamos construyendo. Para registrar estas operaciones, haga clic sobre la pestaña de bindings.</p> <p><a href="http://lh5.ggpht.com/-0iVkp4svKDo/UQVYY684hoI/AAAAAAAABV8/9DGQmMi64q0/s1600-h/image20.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-B0XSAwqO5pA/UQVYZ4xkT_I/AAAAAAAABWE/pq_snj-IbN4/image_thumb9.png?imgmax=800" width="491" height="288"></a></p> <p> </p> <p> </p> <p>15. Ahora pulse el botón (+) de la sección de Bindings . En la ventana mostrada elija la opción action . Pulse OK.</p> <p><a href="http://lh3.ggpht.com/-LQAXrelM6FU/UQVYaQAg3BI/AAAAAAAABWM/iLwIf9wWu8g/s1600-h/image23.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-vfcb8F1XGlE/UQVYbfPABdI/AAAAAAAABWU/Y5u5BOkjaRA/image_thumb10.png?imgmax=800" width="244" height="224"></a></p> <p> </p> <p>16. En la siguiente ventana mostrada elegir la Vista ClieteVO1 y la operación CreateInsert tal como muestra la siguiente figura. Pulse OK.</p> <p><a href="http://lh5.ggpht.com/-aoa_FAsXXxk/UQVYb5j8OVI/AAAAAAAABWc/ZF7tYcaetDI/s1600-h/image26.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-QI7PnvROA3E/UQVYcpAhC0I/AAAAAAAABWk/jKv-w-IyIzE/image_thumb11.png?imgmax=800" width="244" height="236"></a></p> <p>17. Repita el mismo proceso para crear las operaciones de Commit y Rollback, sólo que en este caso se debe elegir la raíz VentasAMDataControl.</p> <p><a href="http://lh4.ggpht.com/-BgS-6_0wCGo/UQVYdbO5HvI/AAAAAAAABWs/Fl6mNZo8ALk/s1600-h/image29.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-ue8Cqhk8bYg/UQVYePqr7YI/AAAAAAAABW0/nSsx23YveWQ/image_thumb12.png?imgmax=800" width="244" height="236"></a></p> <p>18. En este momento usted debe tener algo similar a lo mostrado a continuación.</p> <p><a href="http://lh3.ggpht.com/-8O_owF3BIwg/UQVYehvvZ8I/AAAAAAAABW8/z6b_KBqhvxM/s1600-h/image33.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Yy-4kDb0hdE/UQVYfWcngyI/AAAAAAAABXE/sYl8UijVQqE/image_thumb14.png?imgmax=800" width="429" height="213"></a></p> <p> </p> <p>19. Ahora tenemos que programar los listener. Primero vamos a realizar el que indicamos en el punto 13.2. Elija el popup y en el propiedad PopupFetchListener defina el método cargarPopup()</p> <p><a href="http://lh4.ggpht.com/-2TG5cL9AkUw/UQVYgdM1qyI/AAAAAAAABXM/nxse_WT3Vl4/s1600-h/image37.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-EvaOwIjMKIw/UQVYhQSF4DI/AAAAAAAABXU/rfxXSBdHgIw/image_thumb16.png?imgmax=800" width="537" height="248"></a></p> <p> </p> <p>20. Ahora diríjase al backing bean de la página </p> <p><a href="http://lh3.ggpht.com/-H7Y1qCvcZtI/UQVYh9VuzAI/AAAAAAAABXc/ZQPGzj4wlqc/s1600-h/image41.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-3VfqKL0fdgk/UQVYi-fE0NI/AAAAAAAABXk/zIuejIqEmLY/image_thumb18.png?imgmax=800" width="347" height="327"></a></p> <p>21. Ubique le método definido y coloque las siguientes líneas de código.</p> <p> </p> <p>public void cargarPopup(PopupFetchEvent popupFetchEvent) {<br> // Add event code here...<br> DCBindingContainer bindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry(); <br> OperationBinding operationBinding =<br> bindings.getOperationBinding("CreateInsert");<br> operationBinding.execute();<br> <br>}</p> <p> </p> <p>Lo que estamos haciendo básicamente es llamar al método CreateInsert creado en el punto 16.</p> <p>21. Ahora toca programar los botones de OK y Cancel. En este caso, ambas acciones son ejecutadas por el listener DialogListener. Define el método ejecutar() sobre dicha propiedad.</p> <p> </p> <p><a href="http://lh3.ggpht.com/-AkCQP-PHXFc/UQVYjivTFZI/AAAAAAAABZA/VZCa5FFIg5M/s1600-h/image42%25255B1%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-4ZrKjQy5NaQ/UQVYkeC-N6I/AAAAAAAABZE/9ZQz81Q6Vfg/image42_thumb.png?imgmax=800" width="485" height="140"></a></p> <p> </p> <p>22. En el backing, sobreescribimos el método de la siguiente manera :</p> <p>public void ejecutar(DialogEvent dialogEvent) {<br> <br> if (dialogEvent.getOutcome().name().equals("ok"))<br> {<br> DCBindingContainer bindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry(); <br> OperationBinding operationBinding =<br> bindings.getOperationBinding("Commit");<br> operationBinding.execute();<br> <br> }<br> else if (dialogEvent.getOutcome().name().equals("cancel"))<br> {<br> DCBindingContainer bindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry(); <br> OperationBinding operationBinding =<br> bindings.getOperationBinding("Rollback");<br> operationBinding.execute();<br> }<br> <br> <br> // Add event code here...<br>}<br></p> <p> </p> <p>Es claro que estamos capturando la acción del dialogo y ejecutando el método respectivo.</p> <p> <br>23. Finalmente, para que este popup pueda mostrarse es necesario indicar que el botón agregar del punto 4, debe invocar al popup del punto 6. Para ello haremos uso de la operación ShowPopupBehavior . Arrastre esta operación desde la paleta de componentes hacia el Boton Agregar que creamos previamente.</p> <p> </p> <p><a href="http://lh4.ggpht.com/-9YvJFGfDYFI/UQMUlTzjPtI/AAAAAAAABZI/unMpsmocXMw/s1600-h/image73%25255B1%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-33H9rV8QgV4/UQMUmD_zGxI/AAAAAAAABZM/wRCeNvNN6J8/image73_thumb.png?imgmax=800" width="487" height="205"></a></p> <p> </p> <p>23. La página podría disponer de muchos popups, así que debemos indicar en la propiedad PopUpId del componente que popup vamos a usar. Entonces, ubíquese en dicha propiedad y haciendo clic sobre la opción Edit. </p> <p> </p> <p><a href="http://lh5.ggpht.com/-6JASFxFEoNA/UQMUm6jKpUI/AAAAAAAABT0/9YmlEDmaqpA/s1600-h/image80.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-OpauyQMOsSc/UQMUndSM8gI/AAAAAAAABT8/rEeqrp5PyBg/image_thumb40.png?imgmax=800" width="363" height="237"></a></p> <p> </p> <p>24. Elija el popup que creamos previamente. Pulse OK.</p> <p><a href="http://lh3.ggpht.com/-K2g5ppWjk8Q/UQMUoVNa0aI/AAAAAAAABUE/1fP4AbYBzjo/s1600-h/image84.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-gE8L3ceuljs/UQMUpSSaxzI/AAAAAAAABUM/6mT1rTgf5Do/image_thumb42.png?imgmax=800" width="372" height="268"></a></p> <p> </p> <p>25. Finalmente, hay que forzar a que la tabla se refresque cada vez que se produzca alguna acción en el popup o en la ventana de dialogo. Entonces elija la tabla en la paleta de estructura.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-uuAI6OZDNV8/UQWL_nISvdI/AAAAAAAABZQ/lGLhbYJaFFU/s1600-h/image%25255B3%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-6pVm4-imYpU/UQWMAfRlqjI/AAAAAAAABZY/0ZdBYcOJoXY/image_thumb.png?imgmax=800" width="244" height="176"></a></p> <p> </p> <p>26. Modifique sus propiedad PartialTriggers usando el menú contextual. Pulse la opción Edit.</p> <p><a href="http://lh3.ggpht.com/-yrqwOvK7E2Q/UQWMA1COX_I/AAAAAAAABZg/4DLHAs4mUH8/s1600-h/image%25255B7%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-qd4E7ry8KAE/UQWMB4_-0hI/AAAAAAAABZo/50-R7cRlsiI/image_thumb%25255B2%25255D.png?imgmax=800" width="461" height="272"></a></p> <p> </p> <p>27. Seleccione el popup y la ventana de dialogo y pulse OK.</p> <p><a href="http://lh5.ggpht.com/-xq5kObSfGvc/UQWMCuTd--I/AAAAAAAABZw/flPF3VbZ3u4/s1600-h/image%25255B11%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-hOD5U31JUf8/UQWMDj3WPZI/AAAAAAAABZ4/Loq3r20JLhw/image_thumb%25255B4%25255D.png?imgmax=800" width="343" height="247"></a></p> <p> 28. Probemos hasta acá el funcionamiento de la página. Haga Run.</p> <p><a href="http://lh5.ggpht.com/-t_yLeCRucJc/UQVYlHjXTpI/AAAAAAAABX8/l0h0O_wMuPE/s1600-h/image49.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-fhkTmLmjRfc/UQVYl_jrOQI/AAAAAAAABYE/R1ZNG3IcjKk/image_thumb22.png?imgmax=800" width="326" height="291"></a></p> <p>29. Pulse el botón Agregar y registre información de un nuevo cliente. Pulse Aceptar.</p> <p><a href="http://lh4.ggpht.com/-K21XbKZT2-U/UQVYmqZAMUI/AAAAAAAABYM/OLlV0_l7LDQ/s1600-h/image52.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-FJVIHjR6ChM/UQVYnVFHDPI/AAAAAAAABYU/4iTAPLi4rjs/image_thumb23.png?imgmax=800" width="244" height="182"></a></p> <p>30. La tabla debe mostrar el nuevo registro agregado.</p> <p> </p> <p><a href="http://lh5.ggpht.com/-dhpwh42xlog/UQWMEjk1sFI/AAAAAAAABaA/1Ww4VeAM-Ww/s1600-h/image%25255B15%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-_mfiyQupw2Q/UQWMFFfJNyI/AAAAAAAABaI/Zhv3bSPGO5E/image_thumb%25255B6%25255D.png?imgmax=800" width="257" height="158"></a></p> <p> </p> <p>Si desea puede comparar su código con el proyecto culminado hasta este punto.</p> <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo9.zip">Descargar Código Final.</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com6tag:blogger.com,1999:blog-390232277710184382.post-52782776593338077272012-12-20T10:44:00.001-08:002013-01-10T17:16:17.426-08:00Curso ADF 11g–Parte 8<p> <p>Tema : Página de Búsqueda <p>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. <p>Requerimiento: <p>· Oracle Jdeveloper 11g. 11.1.1.5 <p>· Oracle Database Express 11g <p>· Haber culminado la parte 7 del tutorial.</p> <p>Capítulos Anteriores <p>Parte 1: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-11g-parte-1.html">Creación del Modelo de Datos.</a> <p>Parte 2: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-parte-2.html">Creación de Componentes de Negocio</a> <p>Parte 3: <a href="http://plinioa.blogspot.com/2012/01/curso-adf-11g-parte-3.html">Personalización de Entidades</a> <p>Parte 4: <a href="http://plinioa.blogspot.com/2012/02/curso-adf-11g-parte-4.html">Personalización de View Objects.</a> <p>Parte 5: <a href="http://plinioa.blogspot.mx/2012/02/curso-adf-11gparte-5.html">Lógica en el Módulo de Aplicaciones</a> <p>Parte 6: <a href="http://plinioa.blogspot.mx/2012/03/curso-adf-11gparte-6.html">Manejo de Bindings</a> <p>Parte 7: <a href="http://plinioa.blogspot.mx/2012/05/curso-adf-11gparte-7.html">Creación de Templates</a> <p>Opcional : <p>Si no culmino los capítulos anteriores y quiere empezar desde este capítulo, puede descargar el siguiente código para continuar el curso. <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo7.zip">Código previo</a>. <p>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. <p> <p> <p>Los pasos a realizar son los siguientes: <p>1. Elija la carpeta pages y haciendo clic derecho seleccione la opción New</p> <p><a href="http://lh5.ggpht.com/-lo-7HzYk_Hg/UNNbszyivhI/AAAAAAAABEs/7DZpMVZpIvg/s1600-h/image2.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-usIniflr104/UNNbtf7QgzI/AAAAAAAABE0/kZ2hYYVKGEQ/image_thumb.png?imgmax=800" width="244" height="189"></a> </p> <p>2. Elija la opción JSF – JSF Page</p> <p><a href="http://lh5.ggpht.com/-4HizS3sjChg/UNNbuF2RFoI/AAAAAAAABE8/ko5vR7mmx5E/s1600-h/image6%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-CqYGwe9hGHE/UNNbuz7CxiI/AAAAAAAABFE/KfVhQExwDx4/image_thumb2.png?imgmax=800" width="329" height="236"></a></p> <p>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. </p> <p>Pulse OK,</p> <p><a href="http://lh4.ggpht.com/-v6_JIClMlAY/UNNbvSXLxWI/AAAAAAAABFM/lLvZiWC-qOQ/s1600-h/image11.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-c9_K46whtec/UNNbvxF5ARI/AAAAAAAABFU/QrH3dbljess/image_thumb51.png?imgmax=800" width="291" height="374"></a></p> <p> </p> <p>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.</p> <p><a href="http://lh5.ggpht.com/-DljpsHNAHDM/UNNbwgYHbYI/AAAAAAAABFc/gYD7ReMpRCA/s1600-h/image15.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-iSqQdgq2eIs/UNNbxJGJA7I/AAAAAAAABFk/B03gv4MESMA/image_thumb71.png?imgmax=800" width="401" height="260"></a></p> <p>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”</p> <p><a href="http://lh6.ggpht.com/-sHEE6IhM3QI/UNNbxlHwKHI/AAAAAAAABOQ/rRZ3lGNS5f8/s1600-h/image16%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-I1OXMAy2Gwc/UNNbyI4GIoI/AAAAAAAABOU/fr3hghTJFjo/image16_thumb.png?imgmax=800" width="500" height="186"></a></p> <p> </p> <p>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 :</p> <p><a href="http://lh4.ggpht.com/-n-bWsD2eCGE/UNNbytVukmI/AAAAAAAABF8/GmA0GpZazHk/s1600-h/image25%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-zzxUFFjoixg/UNNbzmWnKfI/AAAAAAAABGE/oDqTtyW7XYs/image_thumb13%25255B1%25255D.png?imgmax=800" width="475" height="287"></a></p> <p> </p> <p>6. Sólo trabajaremos con la región top y center. Elimine el resto de regiones.</p> <p><a href="http://lh3.ggpht.com/-0UExYjzaSwQ/UNNb0NIffgI/AAAAAAAABGM/f2iJ5M0uRP4/s1600-h/image29.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-GCTLIWCHl2w/UNNb0t8OaLI/AAAAAAAABGU/xXb8AU1nPxQ/image_thumb15%25255B1%25255D.png?imgmax=800" width="458" height="261"></a></p> <p> </p> <p>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.</p> <p> </p> <p><a href="http://lh3.ggpht.com/-zOz7OtSfJLA/UNNb16_QeYI/AAAAAAAABGc/4FCbnVNT9ko/s1600-h/image37.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-34MD6x9Y230/UNNb2mcpUeI/AAAAAAAABGk/Qn0u3cnC2CQ/image_thumb19.png?imgmax=800" width="532" height="286"></a></p> <p> </p> <p>8. Ahora si, arrastre desde la paleta de Data Control la referencia a ClienteVO1. Elija la opción Table | ADF Read only Table.</p> <p><a href="http://lh5.ggpht.com/-mwojxtvo0-A/UNNb3ZUcKQI/AAAAAAAABGs/MGTGkwgWBWQ/s1600-h/image41.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-0g_MYcUff5w/UNNb31cIFoI/AAAAAAAABG0/VM0bHyvazPI/image_thumb21.png?imgmax=800" width="527" height="209"></a></p> <p> </p> <p>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.</p> <p><a href="http://lh4.ggpht.com/-sYKlJ8n-DIM/UNNb4kaeC-I/AAAAAAAABG8/jcylsef6zIw/s1600-h/image48.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-iQxTjTtMvUk/UNNb5KsoBhI/AAAAAAAABHE/ZJ_5Q2Zzio4/image_thumb24.png?imgmax=800" width="378" height="316"></a></p> <p>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.</p> <p><a href="http://lh5.ggpht.com/-vVdzDr57W8k/UNNb563q0RI/AAAAAAAABPo/LDEVkbShl6Y/s1600-h/image1%25255B3%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-FQpO8imITj8/UNNb6inxSoI/AAAAAAAABPs/8PFkIECVSsA/image1_thumb%25255B1%25255D.png?imgmax=800" width="550" height="161"></a></p> <p> </p> <p>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.</p> <p><a href="http://lh4.ggpht.com/-oWuvEdUrPI4/UNNb67DNjfI/AAAAAAAABHc/NTmH4St-VnQ/s1600-h/image9.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-3ATcQizY9nM/UNNb7hmMgSI/AAAAAAAABHk/ikucw84pW_s/image_thumb5.png?imgmax=800" width="342" height="293"></a></p> <p> </p> <p>12. El resultado hasta este punto sería similar a lo mostrado a continuación.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-GWov_z7S5VA/UNNb8GU6EmI/AAAAAAAABHs/r_XMXaoPG50/s1600-h/image%25255B32%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-TwDjcNNtXLo/UNNb8ubocTI/AAAAAAAABH0/cTwuBCJQN_M/image_thumb%25255B16%25255D.png?imgmax=800" width="244" height="131"></a></p> <p> </p> <p>Note que si expande o contrae la página el contenido también se acomoda al nuevo tamaño.</p> <p> </p> <p>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.</p> <p> </p> <p>VIEW CRITERIAS.</p> <p>Los view criterias son como filtros que tiene un query que se definen en tiempo de diseño. </p> <p>Si hacemos una analogía con los conceptos de base de datos, un view object vendría a ser el query, por ejem:</p> <p>SELECT *</p> <p>FROM CLIENTE</p> <p>El view criteria vendría a ser un criterio o filtra de esa consulta por ejemplo</p> <p>NOMBRE LIKE ´JOSE´</p> <p>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 </p> <p>EMAIL LIKE <a href="mailto:‘parbizu@hotmail.com’">‘parbizu@hotmail.com’</a></p> <p> </p> <p>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.</p> <p> </p> <p><a href="http://lh3.ggpht.com/-nxGy6muIqGA/UNNb9lY1jVI/AAAAAAAABOg/G3kCcFIPauM/s1600-h/image1%25255B1%25255D%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-L6VpHkhmexI/UNNb-PEi5fI/AAAAAAAABOk/Qiv4EvwPKtI/image1%25255B1%25255D_thumb.png?imgmax=800" width="523" height="212"></a></p> <p> </p> <p>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-</p> <p><a href="http://lh6.ggpht.com/-3bBacc4V8xg/UNNb-lCcrcI/AAAAAAAABIM/L_LbGQfQfyk/s1600-h/image10%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-oPkjuw45Eyg/UNNb_UD6NsI/AAAAAAAABIU/_u_p0ydMLsA/image_thumb6.png?imgmax=800" width="331" height="331"></a></p> <p>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.</p> <p><a href="http://lh3.ggpht.com/-Iw-m77aAFXk/UNNb_z48sgI/AAAAAAAABIc/mrt5y6yOic8/s1600-h/image14.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-LG8pvRgZ5oI/UNNcAkaoacI/AAAAAAAABIk/pCeTiS5T9j4/image_thumb8.png?imgmax=800" width="276" height="276"></a></p> <p> </p> <p>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.</p> <p><a href="http://lh4.ggpht.com/-owv-NUxSXj0/UNNcBOHYQMI/AAAAAAAABIs/Bd5jjZsYT-I/s1600-h/image17.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-dt5h6Axzh-s/UNNcBvCV72I/AAAAAAAABI0/uAJyQAzv8RI/image_thumb9.png?imgmax=800" width="244" height="217"></a></p> <p> </p> <p>18. Perfecto, ya tenemos creado el viewCriteria denominado <strong>ClienteVOCriteria. </strong>Será ahora necesario disponer de un método que invoque a este query-</p> <p><a href="http://lh3.ggpht.com/-t88ag9-bnuw/UNNcCIWvAUI/AAAAAAAABI8/YqRW2xUsvJU/s1600-h/image21%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-qIDgfEWpTpM/UNNcC-Jo6jI/AAAAAAAABJE/WLE97iKNbCI/image_thumb11.png?imgmax=800" width="325" height="257"></a></p> <p> </p> <p>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</p> <p> </p> <p><a href="http://lh3.ggpht.com/-536OrckBANY/UNNcDFyH5TI/AAAAAAAABJM/u9S2gv2mjAA/s1600-h/image29%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-rghDk8M-4fQ/UNNcFMShJ5I/AAAAAAAABJU/k0OWWBV65zw/image_thumb15.png?imgmax=800" width="376" height="244"></a></p> <p> </p> <p>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.</p> <p> </p> <p>public void filtrarCliente(String nombre)<br>{<br> this.getClienteVO1().setApplyViewCriteriaName("ClienteVOCriteria");<br> this.getClienteVO1().setNamedWhereClauseParam("p_nombre", nombre);<br> this.getClienteVO1().executeQuery();<br>}<br></p> <p> </p> <p><a href="http://lh4.ggpht.com/-H5tK_C9s_g4/UNNcFduTTtI/AAAAAAAABJc/idPRg6F3Nyo/s1600-h/image33.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-G0fWFZo2ne8/UNNcGHyLasI/AAAAAAAABJk/SeV8pL8fJy4/image_thumb17.png?imgmax=800" width="471" height="273"></a></p> <p> </p> <p>21. Finalmente no olvide publicar su método en el módulo de aplicaciones. Pulse OK.</p> <p><a href="http://lh6.ggpht.com/-4tsLALJtmCw/UNNcHG1W-4I/AAAAAAAABOo/lgsr7d7ipbE/s1600-h/image34%25255B1%25255D%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-dBduZ2GD6Sk/UNNcIMpZ9eI/AAAAAAAABOs/V13Dk518cuM/image34%25255B1%25255D_thumb.png?imgmax=800" width="540" height="218"></a></p> <p> </p> <p>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.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-EB6CGihSkQY/UNNcIlGoHpI/AAAAAAAABOw/NL7x2w69ARc/s1600-h/image22%25255B1%25255D%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-9BQIidqwgeE/UNNcJWX2WqI/AAAAAAAABO0/-bZIjsYpZZw/image22%25255B1%25255D_thumb.png?imgmax=800" width="549" height="197"></a></p> <p> </p> <p>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.</p> <p> </p> <p><a href="http://lh5.ggpht.com/-UKPeY7AsaoU/UNNcKTgwwPI/AAAAAAAABO4/0tko0pr5OwE/s1600-h/image39%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-nfjHJKEN_oQ/UNNcK7zVvsI/AAAAAAAABO8/NbvD7k9zDc8/image39_thumb.png?imgmax=800" width="550" height="199"></a></p> <p> </p> <p>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 .</p> <p><a href="http://lh4.ggpht.com/-8WxFo4zeldU/UNNcMc977oI/AAAAAAAABKc/BFHykpmWjTs/s1600-h/image47.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-Vw3aRpHHxMI/UNNcNLpwwUI/AAAAAAAABKk/UDb2Y0ort2Y/image_thumb25.png?imgmax=800" width="418" height="266"></a></p> <p> </p> <p>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.</p> <p><a href="http://lh6.ggpht.com/-jPiwISfeEvg/UNNcNnPwkuI/AAAAAAAABKs/PXzUPdeOsTs/s1600-h/image51.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-WuvXGi7P7vk/UNNcONBNEMI/AAAAAAAABK0/_z4ma2kdi5U/image_thumb27.png?imgmax=800" width="436" height="337"></a></p> <p> </p> <p>26. Defina como nombre variable b_nombre y del tipo String.Pulse OK.</p> <p><a href="http://lh4.ggpht.com/-ZiC59NFK-A8/UNNcOhWGGCI/AAAAAAAABK8/k5433GJ2nTs/s1600-h/image54.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-FtpWEfK9o1w/UNNcPH0TG3I/AAAAAAAABLE/y2TnWRHG8EY/image_thumb28.png?imgmax=800" width="244" height="95"></a></p> <p> </p> <p>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” </p> <p> </p> <p><a href="http://lh6.ggpht.com/-jpAU6pNgZUw/UNNcPlII6HI/AAAAAAAABPA/Vf6b8zskv9s/s1600-h/image%25255B66%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-SXMtSh2POrY/UNNcQX6jw1I/AAAAAAAABPE/9thx-p9TrQw/image_thumb%25255B34%25255D.png?imgmax=800" width="519" height="246"></a></p> <p> </p> <p>28. En esa pantalla elija la opción de atributes values.</p> <p><a href="http://lh6.ggpht.com/-l_WMU191u3c/UNNcRTWpq5I/AAAAAAAABLc/M-UwOJS95t8/s1600-h/image%25255B40%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-Vb9sUmyAe8Y/UNNcSIh1zDI/AAAAAAAABLk/zd2z83zLn4Q/image_thumb%25255B20%25255D.png?imgmax=800" width="301" height="276"></a></p> <p>29. Luego elija como dataSource las variables y como atributo b_nombre definido en el paso anterior. Pulse OK.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-mQmuMgWWhsA/UNNcStz87HI/AAAAAAAABLs/yQghDYwb2MU/s1600-h/image%25255B43%25255D.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-iUuuzqZGicc/UNNcTWYvcZI/AAAAAAAABLw/2WgHsZa6ck4/image_thumb%25255B21%25255D.png?imgmax=800" width="244" height="114"></a></p> <p>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.</p> <p><a href="http://lh6.ggpht.com/-kEj0YXj4RdY/UNNcT1LzY5I/AAAAAAAABL8/q6TPaaxD6fc/s1600-h/image%25255B47%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-Y70hsluJXMM/UNNcUQlgLrI/AAAAAAAABME/XrBhMBMFmnQ/image_thumb%25255B23%25255D.png?imgmax=800" width="401" height="186"></a></p> <p>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</p> <p> </p> <p><a href="http://lh6.ggpht.com/-vyGZSxyJS7A/UNNcVIByyuI/AAAAAAAABPI/LRefNWLGzc8/s1600-h/image%25255B67%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-2s3_nZofqfI/UNNcV1BEf2I/AAAAAAAABPM/ztH984YWFH8/image_thumb%25255B35%25255D.png?imgmax=800" width="519" height="240"></a></p> <p> </p> <p>32. Luego coloque la siguiente expresión sobre el campo y pulse OK.</p> <p> </p> <p>#{bindings.b_nombre1.inputValue}</p> <p> </p> <p><a href="http://lh5.ggpht.com/-ZFFME2OJ_SU/UNNcWQgYSyI/AAAAAAAABMc/x6wNE8z7ptA/s1600-h/image%25255B51%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-F343G92c-L8/UNNcW-HCy_I/AAAAAAAABMk/gOGL-ctRxt8/image_thumb%25255B25%25255D.png?imgmax=800" width="472" height="295"></a></p> <p> </p> <p>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.</p> <p> </p> <p><a href="http://lh4.ggpht.com/-u6LNFHStoyE/UNNcXTqPyVI/AAAAAAAABMs/DJC5Kyhf35U/s1600-h/image%25255B13%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-FBJREVR_Zcs/UNNcYDA9nBI/AAAAAAAABM0/z56q8-FE-lc/image_thumb%25255B7%25255D.png?imgmax=800" width="512" height="298"></a></p> <p> </p> <p>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.</p> <p><a href="http://lh6.ggpht.com/-FvrFQ5H1AkY/UNNcYsAYQ7I/AAAAAAAABM8/ZX7VdfknOKU/s1600-h/image%25255B17%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-XjP2_iFxWt4/UNNcZrv3EOI/AAAAAAAABNE/p6HqGBc95sg/image_thumb%25255B9%25255D.png?imgmax=800" width="373" height="361"></a></p> <p> </p> <p><a href="http://lh5.ggpht.com/-BLxYOdLiT0A/UNNcaCKBEzI/AAAAAAAABNM/nMm5JeTYM4w/s1600-h/image%25255B55%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-DHS2twZ2hnM/UNNcay8RiKI/AAAAAAAABNU/qD7WQ9VzYcM/image_thumb%25255B27%25255D.png?imgmax=800" width="366" height="309"></a></p> <p> </p> <p>35. Finalmente modifiquemos el valor del texto del botón por : Buscar.</p> <p><a href="http://lh3.ggpht.com/-Bc1BKPNW8qc/UNNcbqn9fMI/AAAAAAAABNc/vywr8OYcU-8/s1600-h/image%25255B59%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-XDPBntCdy-o/UNNccNFT2qI/AAAAAAAABNk/Us8CtRA5bHc/image_thumb%25255B29%25255D.png?imgmax=800" width="419" height="71"></a></p> <p> </p> <p>36. Probemos nuevamente nuestra pantalla. Repita el paso 11 y verá que ahora la pagina inicialmente recupera todos loa valores</p> <p><a href="http://lh3.ggpht.com/-Ea9ymCW4ohE/UNNcdwTMHpI/AAAAAAAABNs/kdaUB4wV5QU/s1600-h/image%25255B29%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-2rES5nga3vE/UNNceQIRRJI/AAAAAAAABN0/tuhLTeGqcBA/image_thumb%25255B15%25255D.png?imgmax=800" width="498" height="292"></a></p> <p> </p> <p>37. Ahora si colocamos la palabra “la” y pulsamos Buscar, nos mostrará todas las coincidencias.</p> <p><a href="http://lh5.ggpht.com/-jT0YK78uNn0/UNNce80WooI/AAAAAAAABN8/_oNlcQ7EjZc/s1600-h/image%25255B65%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-x_Eudgho4yY/UNNcfkFiigI/AAAAAAAABOE/eFXNReYDURc/image_thumb%25255B33%25255D.png?imgmax=800" width="471" height="263"></a></p> <p> </p> <p>38. Si desea puede descargar el proyecto culminado en el siguiente enlace.</p> <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo8.zip">CODIGO COMPLETO</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com2tag:blogger.com,1999:blog-390232277710184382.post-91718884782362006592012-11-01T17:17:00.001-07:002012-11-01T17:26:29.379-07:00Obtener la Certificación ADF<p> <p><img src="http://4.bp.blogspot.com/-WrX72okNtJ8/TrojGBeAUgI/AAAAAAAAAIM/kSfw-pLUiac/s1600/O_Certified+Specialist_clr.bmp" width="529" height="288"> <p>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. <p><b>Datos Generales.</b> <p>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. <p>El examen es en ingles (también hay una versión en japonés, pero dudo que prefiera este en vez del ingles ) <p>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. <p><a href="http://www.oracle.com/partners/en/knowledge-zone/middleware/adf-exam-page-322499.html">http://www.oracle.com/partners/en/knowledge-zone/middleware/adf-exam-page-322499.html</a> <p>Finalmente el grado que se obtiene es: <p><a href="http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=442">Oracle Application Development Framework 11<em>g</em> Certified Implementation Specialist</a> <p><b>Cuál es la estructura del Examen?</b> <p>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. <p>Ejemplo de Pregunta Teórica. <table border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="top" width="631"> <p><b>An Iterator Binding:</b></p></td></tr> <tr> <td valign="top" width="631"> <p>Connects UI components to attributes in a data collection (text values entered on the page)</p></td></tr> <tr> <td valign="top" width="631"> <p>Binds to an iterator that tracks the current row in a data collection (results returned to the page)</p></td></tr> <tr> <td valign="top" width="631"> <p>Invokes custom or built-in operations on a data control or its data collections (the Create button)</p></td></tr></tbody></table> <p>Ojo acá se mide la teoría de bindings <p>Ejemplo de pregunta Práctica. <table border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="top" width="631"> <p><b>What are the three ADF component categories?</b></p></td></tr> <tr> <td valign="top" width="631"> <p>Common, Operations, and Bindings</p></td></tr> <tr> <td valign="top" width="631"> <p>Common, Operations, and Layout</p></td></tr> <tr> <td valign="top" width="631"> <p>Operations, Layout, and Bindings</p></td></tr> <tr> <td valign="top" width="631"> <p>Operations, Bindings, and Data</p></td></tr></tbody></table> <p>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. <p><b></b> <p><b>Como puedo prepararme?</b> <p>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. <p><a href="http://www.oracle.com/technetwork/developer-tools/adf/learnmore/adfinsider-093342.html">http://www.oracle.com/technetwork/developer-tools/adf/learnmore/adfinsider-093342.html</a> <p>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. <p><b>Recomendaciones durante el Examen.</b> <p>· Se puede saltar las preguntas, es decir si no sabes la respuesta a alguna de las preguntas las puedes marcar para responderlo posteriormente. <p>· 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. <p>· 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: <p>o Cuales son los componentes claves de ADF BC? <p>o Cuales son los tipos de bindings? <p>o Cual es la diferencia entre un taskflow de tipo bounden y unbounded. <p>No puede tomar el examen sino tiene claro los distintos componentes de ADF. <p><b>Donde compro los vouchers para dar el examen.</b> <p>Oracle trabaja con pearson así que en el enlace que coloco abajo le indica los pasos a seguir para pagar el examen. <p><b><a href="http://pearsonvue.com/oracle/">http://pearsonvue.com/oracle/</a></b> <p>Adicionalmente, existen otras maneras de obtener un voucher de manera gratuita. <p>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. <p>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. <p><b></b> <p><b>Que preguntan vienen en el examen?</b> <p>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. <p> </p> <table border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="top" width="623"> <p><b>The Structure Pane displays the elements of a selected document in a tree format.</b></p></td></tr> <tr> <td valign="top" width="623"> <p>True Or False</p></td></tr></tbody></table> <p><b>..</b> <table border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="top" width="624"> <p><b>The bc4j.xcfg file contains the definition for:</b></p></td></tr> <tr> <td valign="top" width="624"> <p>VO names and locations</p></td></tr> <tr> <td valign="top" width="624"> <p>AM names and their database sources, with any run-time parameters</p></td></tr> <tr> <td valign="top" width="624"> <p>Objects that bind iterators to VOs and iterator bindings to iterators</p></td></tr> <tr> <td valign="top" width="624"> <p>Location of .jpx and .cpx files</p></td></tr></tbody></table> <p>… <table border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="top" width="631"> <p><b>In which directory do you find the adfc-config.xml, faces-config.xml, trinidad-config.xml, and web.xml files?</b></p></td></tr> <tr> <td valign="top" width="631"> <p>\model\WEB-INF</p></td></tr> <tr> <td valign="top" width="631"> <p>\classes\WEB-INF</p></td></tr> <tr> <td valign="top" width="631"> <p>\public_html\WEB-INF</p></td></tr> <tr> <td valign="top" width="631"> <p>\source\WEB-INF</p></td></tr></tbody></table> <p><b>..</b> <table border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="top" width="631"> <p><b>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.</b></p></td></tr> <tr> <td valign="top" width="631"> <p>True Or False</p></td></tr></tbody></table> <p><b>..</b> <table border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="top" width="631"> <p><b>Identify the source of components in the Data Control Palette.</b></p></td></tr> <tr> <td valign="top" width="631"> <p>Entity Objects and Database Tables</p></td></tr> <tr> <td valign="top" width="631"> <p>Managed Beans and Java Classes</p></td></tr> <tr> <td valign="top" width="631"> <p>View Objects and Application Modules</p></td></tr> <tr> <td valign="top" width="631"> <p>Page Definitions and Web Services</p></td></tr></tbody></table> <p><b></b> <p><b>..</b> <table border="1" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="top" width="631"> <p><b>All managed beans should be defined in the faces-config.xml file.</b></p></td></tr> <tr> <td valign="top" width="631"> <p>True Or False</p></td></tr></tbody></table> <p>Bien estoy seguro que siguiendo las recomendaciones que indico en este post usted pasará con éxito el examen de certificación en ADF. <p>Mucha suerte y coméntenos su experiencia con la prueba. Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com4tag:blogger.com,1999:blog-390232277710184382.post-86553608925512854022012-10-03T17:34:00.001-07:002012-10-03T17:34:55.024-07:00Experiencia de usuarios usando oracle <div><p>Esta sesion es bastante novedosa porque muestra la estrategia de oracle relacionada a la experiencia con usuarios. <br>
La charla inicia indicando que antes no se priorizaba esta tema y se concentraba en las funcionalidades de las apps.<br>
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. </p>
<p>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</p>
<p>Se menciona q el producto al igual que todos los productos de fusion se basa en ADF.</p>
<p>Muestro algunas imagenes del producto que se presento en este OOW</p>
<br/><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHqLNJzQCmqWa3-t9dJ4NADyDfvMpKRqmjk8TKlzOTnkCDUP610TUCN3TXFbOquRWsuxtGiSZhLkRA4fWMRC1RudMPJ2EJlo8ACOncZdgQ90gk1rcatU2CFB-FrDjqphqRZA80_sQvC0Q0/' /><br/><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIPIgTLib0PkJWvimGaWTlz3cd0BagxswYCTgcNFbf0FZqOj1sZSTQGRAczKmqAt64H7rf2QlyRT4OZOjNfdcSBYWXJRTosTRZveUD3lWrPeQk_-QCrSxiwDtIrzdi95Q2-Bd49nXvlV-a/' /><br/><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3TN2c7csc5K4u-UhpL_MQ69ZLXUAhMYYUr_lsUGVnD28wAKmYFFtOeBsVKp_PpQ4bOvBSccz4_UOSOVo3r3YoVULyyTdk2TiFbUNZisYvhIP9zKDRHuRYM1fGSR5M5YEgdNiEsqmqPgA6/' /></div>Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-22463704102746026552012-10-02T16:00:00.001-07:002012-10-02T16:00:19.901-07:00ADF Mobile<div><p>Durante esta sesion se memciona que se usa adf como el framework para el desarrollo de soluciones mobiles<br>
Se menciona 3 posibilidades :</p>
<p>1 Usar los componenetes de adf tal como los conocemo para que sea mostrado en tablets.</p>
<p>2. Usa adf mobile browser para ejecutr las paginas de adf en dispositivos mas pequenos como telefonos inteligentes</p>
<p>3. Oracle adf mobile para aplicaciones nativas . Es decir que corran en el dispositivo mobil sin necesidad  de estar en linea.</p>
<p>Durante la explicacion de la arquitectura se menciona que las aplicaciones usan un jvm para ejecutar el codigo java dentro de los dispositivos mobiles </p>
<p>Finalmente se muestra la demo del producto</p>
<br/><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB_jdlirGtscwoaicJwtlQOunnIFyFR_pB57dY7UF5rXUsmNxVsI1WDiLBsPgDqKeVQz_N-w2i1uVsBwcTEIu1ch5kpkdam2AaH4rMRX4bENfWzfd-JabBSckk-NsJnvaLtX8WH7cqM7lx/' /><br/><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwa5kdo6gcbg570_6Qu0KWy9wPoBMEjKQzALJt2Wlu_McMhdE0-pWOtrhhB-ve59br4wPUT7n2PYyAdxjzAqngv6hVQ_V44y6nYWjRYlL2MrSOAONxtuJFFYxABAl6aG4ijYLg6Ix0uNLR/' /><br/><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH1l_GtsFHSmUKlMvOmiQmS67GGEEF6KII1eIaoneJABFicYVeYQ2zhHgxexQ5hD18Mn4O92V81FVidGCzUmSzA21RXNXlvv9hud9sDXkHw8a6b0z70jj8WE1ixmbtYI923-RFhsIDgFZH/' /></div>Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-58223980280481592302012-10-02T09:31:00.001-07:002012-10-02T09:31:45.497-07:00Keynote cloud services thomas kurian<div><p>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.<br>
Adicionalmente se indico los proximos servicios en la nube : colaboracion, colas y analiticos.<br>
Se mostro una demo del servicio de developer el cual permite que se pueda integrar el codigo, build el ear y automatizar los despliegues. <br>
Listo la oferta que tiene para las aplicaciones en la nube. Servicios financieros , crm , recursos humanos, etc</p>
<br/><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2gLXwMXvxzomjnNhwK1McbJls4blFJA8eoHdYlJmdr__4LmUNctYP34573VEf7uh96ujRsMEUJzBygZMWkixJ7ALKa0SwtliJHVLO9cAIB3LawnISGbG440HXkJj8KfCtjcntVuHCnOm5/' /></div>Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-3657647326273855152012-10-01T19:37:00.001-07:002012-10-01T19:37:23.489-07:00Desarrollando sobre la red social de oracle<div><p>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.</p>
<br/><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0-3g0U8hCVQpl9apX9VXHWrBWrQiYYbpl8OmE57uF17W3B2ayVwt6KJPa-SmH2guBLJe2Ozy98_LC7aJg5LGfuK_Ge9iPL4Id4M244QPKhBm1Y-vbMRvI4IEX96gNGZCq7yHfPEWWL-_Q/' /><br/><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJkkNoAUX6VWJFIKLBuUZBZNQujju9UbGSLxv77C4Ocu3qdxgUc4zfC2H6nWzo_zAYyfNiY5FKHa9EvjY4UleX6COK0AGqkQVLDIx_KFkZ3wflXc7CcSIeLdyLtdCX08MsdIx1WlAZPwS9/' /></div>Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-81070768649473859042012-09-30T11:30:00.001-07:002012-09-30T11:31:34.811-07:00Deploy automatico con jdev <div><p>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.</p>
<p>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 <br>
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.</p>
<p>Bien, este ha sido una excelente experencia para ver como jdev se integra con otras tecnologias open source.</p>
<br/><img src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEje2DTv0DavpeaedpVBhAb1-17EgHcpKJU8GyibVzxQ43S6xNlw_HdHMPcPqrkwCUdcTeKJ6iBHIeCUkdgqdecVa8ECIqsRQUtOuXnIIGPIhL-LfYxdiFKUq6JEnCmZpBSPNSbQ3cIh0vR_/' /></div>Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-4282010989363480672012-09-27T12:21:00.001-07:002012-09-27T12:21:45.584-07:00Versión Gratuita de ORACLE ADF.<p>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.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-_IyWqWBxSy8/UGSnRTe4ybI/AAAAAAAABCI/7obysuQIQc8/s1600-h/image%25255B3%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-h9JlHm2oWhQ/UGSnRy-W4pI/AAAAAAAABCQ/Stl_pzZHpIE/image_thumb%25255B1%25255D.png?imgmax=800" width="489" height="283"></a></p> <p>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:</p> <p>Motivación:</p> <p>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.</p> <p>Limitación:</p> <p>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:</p> <ul> <li>Oracle ADF Faces Rich Client Components </li> <li>Oracle ADF Controller</li> <li>Oracle ADF Binding</li> <li>Oracle ADF Business Components.</li></ul> <p>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.</p> <p>Conclusiones:</p> <p>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.</p> <p>Bueno, espero que con esto tengamos muchos más desarrolladores y empresas usando ADF en nuestra región.</p> <p> </p> <p>Más Información </p> <p><a title="http://www.oracle.com/technetwork/developer-tools/adf/overview/adfessentials-1719844.html" href="http://www.oracle.com/technetwork/developer-tools/adf/overview/adfessentials-1719844.html">Oracle ADF Essentials Site</a></p> <p><a title="Oracle ADF Essentials FAQ" href="http://www.oracle.com/technetwork/developer-tools/adf/overview/adfessentialsfaq-1837249.pdf">Oracle ADF Essentials FAQ</a></p> <p><a title="https://blogs.oracle.com/shay/entry/deploying_oracle_adf_applications_to" href="https://blogs.oracle.com/shay/entry/deploying_oracle_adf_applications_to">Demo de como Desplegar en GlassFish</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com5tag:blogger.com,1999:blog-390232277710184382.post-52696396530129300232012-09-12T17:19:00.001-07:002012-09-12T17:20:16.572-07:00Oracle Open World 2012<p>Este 30 de Septiembre se inicia el Oracle Open World 2012 en la ciudad de San Francisco. Este año, nuevamente participaré de este espectacular evento posteando notas sobre tópicos cómo : ADF, WebCenter, WebLogic, BPM, etc. Adicionalmente participaré en varios hands-on de las tecnologías mencionadas y cubriré los lanzamientos y anuncios de los Key Notes.</p> <p>Finalmente, participaré por primera vez del Java One y recogeré algunas impresiones de este evento que en paralelo se realiza en esta ciudad.</p> <p> </p> <p>Así que este atento a mis siguientes post para que conozca más de las tecnologías de ORACLE.</p> <p> </p> <p><a href="http://lh3.ggpht.com/-N2p6Ft7FZWs/UFEmfN39TiI/AAAAAAAABBs/l6ru6vmE1Yg/s1600-h/image%25255B5%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-kpgMbsaIcno/UFEmgeie6XI/AAAAAAAABBw/m-i1aqNWQQk/image_thumb%25255B3%25255D.png?imgmax=800" width="545" height="365"></a></p> <p> </p> <p><a title="http://www.oracle.com/openworld/index.html" href="http://www.oracle.com/openworld/index.html">http://www.oracle.com/openworld/index.html</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-46425557691201923232012-08-23T11:52:00.001-07:002012-08-23T11:52:34.743-07:00Introducción a Oracle WebCenter Portal 11g<p>Ya se encuentra publicada en la página de OTN mi introducción y demo sobre Oracle WebCenter Portal. Este es un buen inicio para adentrarse en esta tecnología por lo que recomiendo su lectura. En base al ejemplo descrito en este artículo incluiré en este blog otros post para extender aún más el portal desarrollado.</p> <p>Para acceder al artículo :</p> <p><a title="http://www.oracle.com/technetwork/es/articles/adf/componentes-webcenter-portal-1741843-esa.html" href="http://www.oracle.com/technetwork/es/articles/adf/componentes-webcenter-portal-1741843-esa.html">http://www.oracle.com/technetwork/es/articles/adf/componentes-webcenter-portal-1741843-esa.html</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-43361668661281641642012-08-02T17:12:00.001-07:002012-08-02T17:12:24.695-07:00OTN Tour en Perú 2012<p><a href="http://lh5.ggpht.com/-QBHJEUrJRkQ/UBsXZXjUuAI/AAAAAAAABA4/K5v3ScNeUFM/s1600-h/image%25255B3%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-u3CetkdlULQ/UBsXZ4r7s-I/AAAAAAAABBA/j-hAnPYuclw/image_thumb%25255B1%25255D.png?imgmax=800" width="366" height="452"></a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-35160891170107418162012-07-27T10:30:00.001-07:002012-07-27T11:00:13.584-07:00Apreciaciones del OTN Tour 2012<p>Finalmente terminó mi participación en el OTN Tour – Sección Norte. Anteriormente había participado en eventos regional, sin embargo esta ha sido mi primera experiencia cubriendo 3 países durante una semana. Los países que visité fueron Ecuador, Honduras y Costa Rica, y debo confesar que ha sido una experiencia enriquecedora. Para empezar fue la primera vez que visitaba estos países donde conocí la hospitalidad, el entusiasmo y las ganas de aprender de las comunidades de usuarios ORACLE en estos países. <p>Las charlas que apoye fueron: <ul> <li>Experiencias Reales con ADF. (<a href="http://www.cardinalsoluciones.com/blog/eventos/OTN_TOUR_ADF_Imprimir.pdf">Descargar Presentación</a>) <li>Desarrollo de Portales Usando WebCenter Portal (<a href="http://www.cardinalsoluciones.com/blog/eventos/OTN_TOUR_WebCenter_Imprimir.pdf">Descargar Presentación</a>)</li></ul> <p>Debo agradecer mucho a los organizadores del Evento. Paola Pullas, Ronald Vargas , y por supuesto a Francisco Muñoz presidente del LAUOC por hacer posible esto. <p>Obviamente al programa ACE: Vikki, Lillian y Justin de OTN que nos apoyan con las facilidades para materializar nuestras participaciones. <p>También tuve la oportunidad de conocer aún más a los expositores. Tuve clases de ingles “británico” con Tim Hall, pude conversar en un buen español con Sheeri Cabral y conocer la simpatía que era Debra Lilley. <p>Finalmente estreche lazos con mis amigos de la región : Sergio Tribst de Brasil , (con su acento de Lousiana), Noel Portugal de México (quien me mostró su interés en apoyar a la comunidad en México) y mi “compadre” Joel Pérez con quien pude conocer parte de Honduras. <p>Espero el próximo año poder participar en otros países. <p><a href="http://lh4.ggpht.com/-PRj5fYN4Ihc/UBLRFNpFi7I/AAAAAAAABAE/OFimSRi2cHY/s1600-h/2012-07-13%25252018.49.22%25255B4%25255D.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2012-07-13 18.49.22" border="0" alt="2012-07-13 18.49.22" src="http://lh3.ggpht.com/-W73AEKnKnfU/UBLRFmtulUI/AAAAAAAABAI/N9we1WWBupc/2012-07-13%25252018.49.22_thumb%25255B1%25255D.jpg?imgmax=800" width="317" height="237"></a> <p> <p><a href="http://lh3.ggpht.com/-stINg1t8IpU/UBLRGU7bI8I/AAAAAAAABAU/mhLL4YQyroc/s1600-h/2012-07-13%25252015.32.05%252520HDR%25255B4%25255D.jpg"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2012-07-13 15.32.05 HDR" border="0" alt="2012-07-13 15.32.05 HDR" src="http://lh3.ggpht.com/-866DAQy_eAI/UBLRHx-dkTI/AAAAAAAABAc/GFl7V0RVP9Y/2012-07-13%25252015.32.05%252520HDR_thumb%25255B1%25255D.jpg?imgmax=800" width="320" height="240"></a> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-19075812344659409742012-06-26T19:37:00.001-07:002012-06-26T19:37:37.171-07:00OTN Tour–Latinoamerica 2012<p> </p> <p>Este año he sido invitado a participar como expositor en el OTN Tour. Estaré presentando las sesiones. <p>· Construyendo Portales con Oracle WebCenter Portal 11g. <p>· Experiencias Reales usando Tecnología ADF. <p>Las fechas de mis presentaciones son : <p><a href="http://www.ecuoug.org/?p=729">- 6 de Julio en Ecuador.</a> <p><a href="http://www.otntourhn.com/">- 13 de Julio en Honduras</a> <p><a href="http://oracledbacr.blogspot.mx/p/otn-tour-day-2012.html">- 16 de Julio en Costa Rica.</a> <p>Nunca he estado en estos países, así que estoy seguro será una experiencia agradable departir mis experiencias con otros desarrolladores.</p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-65299433132231727162012-05-30T10:20:00.001-07:002012-05-30T10:22:42.812-07:00Evento del Grupo de Usuarios Oracle En México.<p>El día 23 de Junio se realizará el primer evento del grupo de usuarios ORACLE en México del cual soy miembro.</p> <p>Los temas a tocar serán :</p> <p> </p> <p>Tema: Implementando SOA Suite</p> <p>Descripción: La sesión estará enfocada a dar tips de implementación sobre la plataforma de ORACLE SOA SUITE 11g. Dando ejemplos reales, esquemas prácticos, y tips para el desarrollador.</p> <p> </p> <p>Tema: Un vistazo a Oracle Weblogic 12c</p> <p>Descripción: La sesión será una introducción a los nuevos features de este release de Weblogic. Haciendo énfasis en sus bondades para Cloud Computing<br></p> <p> </p> <p>Les recomiendo participar y conocer aún más la tecnología ORACLE.</p> <p>La liga del evento es :</p> <p><a title="http://www.oramex.org/eventos.php" href="http://www.oramex.org/eventos.php">http://www.oramex.org/eventos.php</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-31672802440655598202012-05-22T12:24:00.001-07:002012-05-22T12:25:05.176-07:00Curso Avanzado de ADF por Oracle <table border="0" cellspacing="0" cellpadding="2" width="527"> <tbody> <tr> <td valign="top" width="200"><a href="http://lh5.ggpht.com/-tR7qNGMrrmQ/T7vn1wVmnPI/AAAAAAAAA_w/VIpyK8fkBBs/s1600-h/image%25255B5%25255D.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-uyW-KfKhqJ0/T7vn2ShRFvI/AAAAAAAAA_4/Z5t4JfhXwp8/image_thumb%25255B1%25255D.png?imgmax=800" width="121" height="164"></a></td> <td valign="top" width="325">Oracle Acaba de lanzar un curso Avanzado de ADF en formato eCourse. Esta muy completo, así que si usted ya tienen conocimientos de ADF y no tiene problemas con su ingles, puede aprovecharlos. <br><br>El curso que estoy escribiendo en este blog, brinda un primer alcance que luego puede ser profundizado en este Curso de Oracle .<br><br>Me olvidaba comentarles es GRATUITO!! así que ha aprovechar el curso.<br><br>Este es el enlace<br><br><a title="http://apex.oracle.com/pls/apex/f?p=44785:24:0::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:6022,2" href="http://apex.oracle.com/pls/apex/f?p=44785:24:0::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:6022,2">http://apex.oracle.com/pls/apex/f?p=44785:24:0::NO:24:P24_CONTENT_ID,P24_PREV_PAGE:6022,2</a></td></tr></tbody></table> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com3tag:blogger.com,1999:blog-390232277710184382.post-46763777589235892012012-05-08T16:39:00.001-07:002013-01-10T17:17:57.478-08:00Curso ADF 11g–Parte 7<p>Tema : Template de la Aplicación <p>Luego del proceso de creación de la parte de negocio, será necesario la creación de elementos para la parte de interfaz de usuario. Esta parte es importante, teniendo en cuenta que ADF se ha convertido en el framework de facto para la parte de presentación en la plataforma Oracle Fusion Middleware. <p>La creación de interfaz de usuario comprenderá varios post. Pero empezaremos creando el template que luego será reusado por todas las páginas. <p>Requerimiento: <p>· Oracle Jdeveloper 11g. 11.1.1.3 <p>· Oracle Database Express 11g <p>· Haber culminado la parte 6 del tutorial.</p> <p>Capítulos Anteriores <p>Parte 1: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-11g-parte-1.html">Creación del Modelo de Datos.</a> <p>Parte 2: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-parte-2.html">Creación de Componentes de Negocio</a> <p>Parte 3: <a href="http://plinioa.blogspot.com/2012/01/curso-adf-11g-parte-3.html">Personalización de Entidades</a> <p>Parte 4: <a href="http://plinioa.blogspot.com/2012/02/curso-adf-11g-parte-4.html">Personalización de View Objects.</a> <p>Parte 5: <a href="http://plinioa.blogspot.mx/2012/02/curso-adf-11gparte-5.html">Lógica en el Módulo de Aplicaciones</a> <p>Parte 6: <a href="http://plinioa.blogspot.mx/2012/02/curso-adf-11gparte-6.html">Manejo de Bindings</a> <p>Opcional : <p>Si no culmino los capítulos anteriores y quiere empezar desde este capítulo, puede descargar el siguiente código para continuar el curso. <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo6.zip">Código previo</a>. <p>Bien, como indicamos inicialmente vamos a crear el template de nuestra aplicación. Un template es un elemento vital en cualquier aplicación, pues permite definir el aspecto gráfico y la organización que será común entre todas nuestras páginas. Esto es importante, porque nos permite estructurar el contenido de nuestras páginas y definir elementos gráficos como el banner, pie de página y logos que deberán aparecer en todas las páginas. El termino template es equiparable con conceptos como “master page” , “plantilla” ó “machote”. <p> <p>Los pasos a realizar son los siguientes: <p>1. Para empezar, usaremos la imagen (bannerVenta.jpg) como banner del template. Por, ello descarguemos esta imagen del siguiente link y usando el manejador de archivos ubíquelo en la siguiente ruta : <p><RUTA_APLICACION_VENTAS>\ViewController\public_html\images ( Deberá crear la carpeta images porque no existe). <p>Al final usted deberá crear una imagen como esta : <p> <p><a href="http://lh5.ggpht.com/-sjSS3KsE040/T6mujwjUn6I/AAAAAAAAA4M/LrRgnd-8Srk/s1600-h/image3.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-Rj0OV0O67OA/T6muks-QJCI/AAAAAAAAA4U/Pr-VvzIuxso/image_thumb1.png?imgmax=800" width="462" height="244"></a> <p> <p>2. Abra el jdeveloper, elija el proyecto View Controller, haga clic derecho y seleccione la opción New. Luego elija de la galería de componentes el item : JSF Page Template. Pulse OK. <p><a href="http://lh3.ggpht.com/-6Qndemsb_5o/T6muleiY3vI/AAAAAAAAA4c/89yJcqOq6Cc/s1600-h/image7.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-aNorwIWuhNk/T6mumDtP9FI/AAAAAAAAA4k/_J0dWaUuRvI/image_thumb3.png?imgmax=800" height="212" width9?296?></a> <p> <p>3. Bien en este punto, indicaremos las propiedades del template. <ul> <li>Nombremos al template como: templateVentas <li>Ubiquemos el template no en la raiz sino en la subcarpeta \templates,</li></ul> <p>Hasta este punto usted debería tener los siguientes valores. Aún no pulse OK</p> <p><a href="http://lh6.ggpht.com/-gsPSEwtekuk/T6mumovW3wI/AAAAAAAAA4s/uv4vt34wZKs/s1600-h/image15.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Nl4BOTIytvA/T6munW-npYI/AAAAAAAAA40/XulcKw3KotY/image_thumb7.png?imgmax=800" width="453" height="178"></a></p> <p> </p> <p>4. Ahora, usaremos el asistente para determinar la estructura del template. Active el check Use a Quick Start Layout y pulse el botón Browse.</p> <p>5. Deberá aparecer el asistente. En este punto elegiremos la categoria “one-column”, el tipo 2 y el layout 1, tal como muestra la figura.</p> <p><a href="http://lh4.ggpht.com/-U8Cw6hy1ZOI/T7aykUG803I/AAAAAAAAA6E/a0vBePr8BVo/s1600-h/image41.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-B7-GkxJHDqw/T7aylWJKMWI/AAAAAAAAA6M/KNCeWf57PiM/image_thumb11.png?imgmax=800" width="332" height="243"></a></p> <p> </p> <p>Este layout tendrá como características que la parte superior ser mantendrá fija. Es decir existirá un espacio definido para albergar el banner .</p> <p>La parte inferior será variable, es decir si el usuario modifica el tamaño de la página, entonces el contenido de esa sección se “re ajustara” al tamaño que tenga la pantalla. Es importante tener en cuenta que esto dependerá de que tipo de layouts (contenedores) coloquemos en la página. Más adelante analizaremos esto.</p> <p>Pulse OK para continuar con la creación del template.</p> <p>6. Bien ahora toca definir la región que podrá ser modificada por cada página que use el template. Recuerde que usamos el template para compartir su estructura entre las páginas. En consecuencia será necesario definir una región que podemos modificar cuando elaboremos las páginas. Por ello, usando la pestaña Facet Definitions pulsemos el botón Add para añadir un nuevo facet, que identificará a la región que podrá ser modificada. Nombremos al facet como contenido, tal como se muestra en la figura.</p> <p><a href="http://lh4.ggpht.com/-vfVOJlTfPts/T7aylyVG-_I/AAAAAAAAA6U/2LJF0aPTjc4/s1600-h/image12.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-tkxjffmCUe4/T7aymVj-kKI/AAAAAAAAA6c/PF1xt0yoP8g/image_thumb5.png?imgmax=800" width="304" height="388"></a></p> <p> </p> <p>7. Finalmente elija la pestaña Attributes y agregue una nuevo atributo llamado titulo. Este atributo es como una variable a nivel de página y nos servirá para poner un titulo en la parte superior de cada página.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-AuK8KErbnOU/T7aymw08ImI/AAAAAAAAA6k/hAuUi7jd9gE/s1600-h/image13.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-2j51dkXR7Cg/T7aynWSWAfI/AAAAAAAAA6s/iOoT_iP1zdQ/image_thumb6.png?imgmax=800" width="301" height="385"></a></p> <p> </p> <p>8. Pulse OK para culminar la creación del template.</p> <p>9. Analicemos que ha creado el asistente. Observe la paleta de estructura y notará que el asistente a incluid un componente llamado panelStrechLayout. Bien este tipo de componente se denomina contenedor ó layout y sirve para albergar a otros layouts ó contenedores. Este tipo de panel tiene la característica de ajustar sus dimensiones en función del tamaño que se defina en el browser. </p> <p> </p> <p><a href="http://lh6.ggpht.com/-iF4m5CjQAA4/T7ayo7I0ydI/AAAAAAAAA60/Kw6dUNOu_nc/s1600-h/image41%25255B1%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-yEj9ZGTvJrY/T7aypcIur0I/AAAAAAAAA68/k22AaVKTaXo/image_thumb11%25255B1%25255D.png?imgmax=800" width="342" height="276"></a></p> <p> </p> <p>El panel define 2 regiones center y top ( Note que el resto de regiones se encuentra deshabilitadas porque no se usan) . El top se usará para mostrar el banner de nuestra aplicación y la parte de center, incluirá el contenido que se poblará cuando se construya cada página que utilice el template.</p> <p>10. Revisemos las propiedades del panelStrechLayout, notaremos que existe una propiedad que define el alto de la sección top (TopHeight). Por default considera 50 pixeles lo cual es conforme con el alto que tiene la imagen que tenemos. Eventualmente usted podría cambiar el valor de el alto en función del alto de su banner.</p> <p><a href="http://lh6.ggpht.com/-2444Pq2ivQE/T7ayprFhF3I/AAAAAAAAA7E/QCg76BOuNWY/s1600-h/image8.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Kn8SuSJGJ2w/T7ayqArjZFI/AAAAAAAAA7M/iXUt2jsi1Zc/image_thumb31.png?imgmax=800" width="479" height="204"></a></p> <p> </p> <p>11. En la sección top colocaremos el banner descargado previamente. Una alternativa sería colocar un control imagen en esta sección, sin embargo nosotros queremos colocar la imagen del banner y encima de esta imagen un texto que describa la pantalla que estamos mostrandk. Por ello usaremos como control un layout la cual permite defijir una imagen de fondo y además servir de contenedor de otros controles como textos. Hagamos esto, arrastre un Panel Group Layout en la region top.</p> <p><a href="http://lh4.ggpht.com/-bdppz1JDp5U/T7ayqtITxrI/AAAAAAAAA7Q/CnF_Hn6UoM4/s1600-h/image%25255B4%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-7bnCk2DRRec/T7ayrN1BZ2I/AAAAAAAAA7c/O3njC39QY8Y/image_thumb%25255B1%25255D.png?imgmax=800" width="502" height="182"></a></p> <p> </p> <p>12. Modifiquemos las propiedades del Layout con los siguientes valores :</p> <p>Halign:center : Centrado de manera horizontal</p> <p>Valign: middle: Centrado de manera vertical</p> <p>Layout: vertical : Permitirá que todos los componentes que se agreguen se colocarán de manera vertical</p> <p> </p> <p><a href="http://lh3.ggpht.com/-13HkKd7P9c8/T7ayrUjH1SI/AAAAAAAAA7k/_OQ27nojbck/s1600-h/image%25255B8%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-QnR-mYk0P8A/T7ayr6PCZwI/AAAAAAAAA7s/fLCMFBSaoZg/image_thumb%25255B3%25255D.png?imgmax=800" width="280" height="306"></a></p> <p> </p> <p>13. Ahora apliquemos como valor de fondo la imagen descargada previamente, usando la propiedad image de la seccion Style and Theme como se indica en la figura.</p> <p><a href="http://lh5.ggpht.com/-qGGgyEZuotI/T7aysazVwBI/AAAAAAAAA70/Q2HarOW4XHM/s1600-h/image%25255B12%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-LIFHCXgxuD4/T7ays2hWRdI/AAAAAAAAA78/I9jk6ALTSMM/image_thumb%25255B5%25255D.png?imgmax=800" width="247" height="294"></a></p> <p>14. Nuestro template debería quedar de la siguiente manera :</p> <p><a href="http://lh3.ggpht.com/-ayC4Vz-8dUE/T7aytQ-nFeI/AAAAAAAAA_E/9qXc15QEO-I/s1600-h/image%25255B65%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Vhq7pb0WvUc/T7ayt-WIBaI/AAAAAAAAA_I/C5OmJc5iqH4/image_thumb%25255B34%25255D.png?imgmax=800" width="525" height="255"></a></p> <p> </p> <p>15. Debemos ahora asignarle un Titulo a nuestro template y adicionalmente un texto que será variable y que estará relacionado a la pagina que se muestre. Por eso, arrastre 2 OutputText sobre el layout creado.</p> <p><a href="http://lh4.ggpht.com/-nkK7XM9gtRw/T7ayu30KxuI/AAAAAAAAA_M/zH44grl94Ho/s1600-h/image%25255B66%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-ijjWy47-55Q/T7ayvYqs3UI/AAAAAAAAA_Q/dZypmxk3PUo/image_thumb%25255B35%25255D.png?imgmax=800" width="517" height="115"></a></p> <p> </p> <p>Note que hos textos se están montando sobre la imagen que era lo que queríamos</p> <p> </p> <p>16. Ahora , modifique los valores de las propiedades de los textos. Al primero se le pondrá como value : “SISTEMA DE VENTAS” y se cambiará su color y texto tal como lo mostrado a continuación.</p> <p><a href="http://lh5.ggpht.com/-niyVezey8xk/T7ayvj4cRPI/AAAAAAAAA8k/QUXVpzefc14/s1600-h/image%25255B25%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Z9VCaKzbkLA/T7aywa3KcEI/AAAAAAAAA8s/IX0Uh-pSx1A/image_thumb%25255B12%25255D.png?imgmax=800" width="367" height="329"></a></p> <p>17. Sobre el segundo outputText realizar la misma configuración del paso anterior, pero adicionalmente definir en la propiedad value la expression: #{attrs.titulo} que identificará al parámetro definido en el punto 7.</p> <p><a href="http://lh4.ggpht.com/-kY03Fcx5S78/T7aywxy-fAI/AAAAAAAAA80/gV2iFUnsA18/s1600-h/image%25255B29%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-z8rZr5orRls/T7ayxQhNsFI/AAAAAAAAA88/XWZ0xl1J8jo/image_thumb%25255B14%25255D.png?imgmax=800" width="361" height="336"></a></p> <p> </p> <p>18. Para terminar nuestro template, tenemos que definir que región de nuestro template será completado por las paginas que se construyan. En nuestro caso esa región se ubicará en la seccion center de nuestro template. Sin embargo nosotros lo “nombraremos” como “contenido” que fue definido en el punto 6.</p> <p>Para eso, arrastremos el control Facet Ref sobre la región center y haciendo uso de la ventana emergente elegir el valor contenido. Pulse OK.</p> <p> </p> <p><a href="http://lh3.ggpht.com/-L7rD3gaX2xw/T7ayx9cJgbI/AAAAAAAAA_U/sG_TNLAnhBM/s1600-h/image%25255B67%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-Z0-B-aYjO1s/T7ayys4uLeI/AAAAAAAAA_Y/L0EYJjaw6lQ/image_thumb%25255B36%25255D.png?imgmax=800" width="527" height="172"></a></p> <p> </p> <p>19. Nuestro template deberia tener la siguiente estructura.</p> <p><a href="http://lh4.ggpht.com/-zKhg0Rv-oD0/T7ayzKPp8oI/AAAAAAAAA_c/rVAkThnNXAE/s1600-h/image%25255B68%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-ptzhVDIMFQI/T7ayzhcLDhI/AAAAAAAAA_g/dOMOTJlbyik/image_thumb%25255B37%25255D.png?imgmax=800" width="563" height="286"></a></p> <p> </p> <p> </p> <p>20 Finalmente para probar el template, será necesario crear una página de prueba que la use. Haga clic derecho sobre el paquete de pages y elija la opción new.</p> <p><a href="http://lh5.ggpht.com/-xspsVQxDRJQ/T7ay0P7KCbI/AAAAAAAAA9g/59Id7Sg6c_w/s1600-h/image%25255B42%25255D.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-rPlQuL7NCGE/T7ay0VMbthI/AAAAAAAAA9o/173-lzMlMH0/image_thumb%25255B21%25255D.png?imgmax=800" width="244" height="239"></a></p> <p> </p> <p>21. Seleccione JSF –Page y pulse OK</p> <p> </p> <p><a href="http://lh5.ggpht.com/-l9iRnSHQ9gk/T7ay00ebUII/AAAAAAAAA9w/HMloIIsK6Mc/s1600-h/image%25255B46%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-Lr6bYxnk4B8/T7ay1tFTOZI/AAAAAAAAA94/k-Y_QIHobcg/image_thumb%25255B23%25255D.png?imgmax=800" width="382" height="273"></a></p> <p> </p> <p>22. Nombremos a nuestra página como pruebaTemplate y aseguremosno de que este seleccionado el templateVentas tal como se muestra a continuación. Pulse OK</p> <p> </p> <p><a href="http://lh4.ggpht.com/-Gi79HyhH1FU/T7ay2cQo6II/AAAAAAAAA-A/t3yWBfVyqvs/s1600-h/image%25255B50%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-EM8MkYS3UJE/T7ay3JgWvgI/AAAAAAAAA-I/oCjsAQXlBnU/image_thumb%25255B25%25255D.png?imgmax=800" width="361" height="351"></a></p> <p> </p> <p> </p> <p>23. Sobre la pagina creada, utilice la paleta de estructura para ubicar la referencia al template. Note que en la paleta de propiedades apareció la propiedad titulo que hace referencia a la variable asociada al template. Modifique su valor por “PRUEBA DE VENTAS”</p> <p> </p> <p> </p> <p><a href="http://lh4.ggpht.com/-FxWg7BmmKKg/T7ay3nyfbjI/AAAAAAAAA_k/7xlsBNYVpF0/s1600-h/image%25255B69%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-aKlJ5zX1g_8/T7ay4VJfEmI/AAAAAAAAA_o/tReSfWkC5vk/image_thumb%25255B38%25255D.png?imgmax=800" width="576" height="183"></a></p> <p> </p> <p>24. Finalmente probemos la pagina haciendo clic derecho sobre ella y pulsando la opción de Run</p> <p> </p> <p><a href="http://lh3.ggpht.com/-hwMWq3Qq2lk/T7ay5HQIoDI/AAAAAAAAA-g/5UBG8lAQCAw/s1600-h/image%25255B59%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-qI98lQr0fJU/T7ay5kk2ibI/AAAAAAAAA-o/TrpJgX5_IHQ/image_thumb%25255B30%25255D.png?imgmax=800" width="393" height="273"></a></p> <p> </p> <p>25. La página ejecutada debe ser similar a la siguiente.</p> <p><a href="http://lh6.ggpht.com/-OlkL1WT2mfU/T7ay7QguSPI/AAAAAAAAA-w/mu7MNAmjGXQ/s1600-h/image%25255B64%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-BevECs-HL5k/T7ay78oRyeI/AAAAAAAAA-4/0R5wgHcVZ3E/image_thumb%25255B33%25255D.png?imgmax=800" width="515" height="265"></a></p> <p> </p> <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo7.zip">Código Final</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com7tag:blogger.com,1999:blog-390232277710184382.post-82958817394061095862012-03-21T16:55:00.000-07:002013-01-10T17:20:37.683-08:00Curso ADF 11g–Parte 6<p>Tema : Capa ADF Model <p>Si ha seguido los post anteriores notará que estamos en la etapa de construcción de Interfaz de usuario. Sin embargo antes de construir las páginas de la aplicación debemos comprender una de las capas previas que tiene el framework ADF denominado ADF Model y que permite exponer los componentes de negocio hacia la capa de Vista. <p>Requerimiento: <ul> <li>Oracle Jdeveloper 11g. 11.1.1.3 <li>Oracle Database Express 11g <li>Haber culminado la parte 5 del tutorial.</li></ul> <p>Capítulos Anteriores <p>Parte 1: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-11g-parte-1.html">Creación del Modelo de Datos.</a> <p>Parte 2: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-parte-2.html">Creación de Componentes de Negocio</a> <p>Parte 3: <a href="http://plinioa.blogspot.com/2012/01/curso-adf-11g-parte-3.html">Personalización de Entidades</a> <p>Parte 4: <a href="http://plinioa.blogspot.com/2012/02/curso-adf-11g-parte-4.html">Personalización de View Objects.</a> <p>Parte 5: <a href="http://plinioa.blogspot.mx/2012/02/curso-adf-11gparte-5.html" target="_blank">Lógica en el Módulo de Aplicaciones</a> <p>Opcional : <p>Si no culmino los capítulos anteriores y quiere empezar desde este capítulo, puede descargar el siguiente código para continuar el curso. <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo5.zip">Código previo</a>. <p><strong>Introducción.</strong> <p>Como lo comentamos inicialmente, el framework cuenta con una capa que sirve de interfaz de los componentes de negocio. Esto permite un bajo acoplamiento entre la capa de negocio y capa web que desarrollaremos más adelante. De esta manera no importa la manera que se implemente la capa de negocio (ADF BC,EJB,Java Beans) la capa de Vista siempre accederá de una manera común a los componentes de negocio. Un Imagen que nos ayuda a ilustrar esto se muestra a continuación : <p> <p><img src="http://gerardnico.com/wiki/_media/dat/obiee/adf_architecture.jpg?w=650" width="435" height="251"> <p> <p>Note que en las capas inferiores podemos usar distintas tecnologías para implementar los servicios de negocio. En nuestro caso, estamos usando ADF Business components, pero se podría usar otra tal como se muestra en la figura. <p>La capa de Model sirve como un traductor, que “traduce” cualquiera de las tecnologías inferiores en unos componentes comunes. De esta forma la capa Controller y View no se enteran como se ha implementado las reglas de negocio sino que simplemente interactúan con los componentes que ofrece la capa Model. <p>La capa de Model en ADF tiene la siguiente arquitectura. <p> <p> <p> <a href="http://lh4.ggpht.com/-H1Jdanv4NyM/T5TgCi15WhI/AAAAAAAAA0c/fyVFRWepg-I/s1600-h/image%25255B3%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-7ajjvQF-pV8/T5TgEYnUG2I/AAAAAAAAA0k/npTewia45WQ/image_thumb%25255B1%25255D.png?imgmax=800" width="237" height="347"></a> <p> <p>Business Service : Esto esta compuesto por los componentes de negocio que hemos implementado en los capítulos anteriores con los ADF Business Componentes. <p>DataControl : Es la interfaz que expone los componentes de negocio que tiene los business service. Básicamente expone los componentes que hemos “publicado” en el módulo de aplicación. <p>Bindings: Para que una página pueda acceder a datos necesita disponer de “variables” que permitan accedan a dicha información. Esto se soluciona en ADF por medio de bindings (“enlaces”) que pueden ser accedidos por las páginas para obtener información. <p> <p>Bien, veamos un ejemplo de como identificar estos elementos. <p> <p>1. Sobre el proyecto ViewController hagamos clic derecho y elija la opcion Nes. <p><a href="http://lh4.ggpht.com/-C--R_6XlFrg/T5TgFkHRU-I/AAAAAAAAA0s/V4mr8LvMyp8/s1600-h/image%25255B7%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-H3cNBuztchM/T5TgJ8UvrlI/AAAAAAAAA00/vF1p8GM0iWk/image_thumb%25255B3%25255D.png?imgmax=800" width="477" height="315"></a> <p> <p>2. Elija la opción JSF y pulse OK. <p><a href="http://lh5.ggpht.com/-zLiXf6oSoGI/T5TgNWsfZUI/AAAAAAAAA08/BF_1UPOZp_Y/s1600-h/image%25255B11%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-Qfn0Hphrpqc/T5TgQ5TY-6I/AAAAAAAAA1E/uBd9CKTn5kA/image_thumb%25255B5%25255D.png?imgmax=800" width="393" height="281"></a> <p> <p>3. Elijamos los datos de la página tal como se muestra a continuación. Tenga en cuenta los siguientes datos : <p>Nombre : consultaCliente.jspx <p>Directory: <RUTA_DEFAULT>/pages. <p>Los demás valore se dejan por default. <p>Los conceptos asociados a las páginas JSF los abordaremos con más detalle cuando lleguemos al post asociados a las interfaces de usuarios. <p>Pulse OK* <p><a href="http://lh4.ggpht.com/-YvxFp3NFTD8/T5Tnu5uwBTI/AAAAAAAAA1M/9_8oNja7CnQ/s1600-h/image%25255B15%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-n4wywIuYbSc/T5Tnvukc9jI/AAAAAAAAA1U/Vz6aDK7xJLU/image_thumb%25255B7%25255D.png?imgmax=800" width="277" height="356"></a> <p> <p>4. Se generó la página JSF de consulta de Clientes. Bien lo primero que vamos a analizar es el componente DataControl, si se fija existe una region DataControls. Expandalo para conocer nuestro primer tipo de componente denominado Data Control. <p> <p> <a href="http://lh6.ggpht.com/-buh9KuDlihY/T5TnwPxFL8I/AAAAAAAAA1c/2WUkObcgNf0/s1600-h/image%25255B19%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-C7xeeFhfpNc/T5TnwqqTqnI/AAAAAAAAA1k/s4Ju31fwIX0/image_thumb%25255B9%25255D.png?imgmax=800" width="292" height="335"></a></p> <p>5. Puede notar que en la sección de DataControls se exponen las vistas que hemos desarrollado en las lecciones anteriores. En este punto es importante recordar que el data control solo expone referencias a las vistas y métodos, no son las implementaciones en si, sino referencias, recuerde que el data control funciona como una interfaz hacia los componentes de lógica de negocio. También, note que se exponen que los métodos que se implementaron en el anterior post. </p> <p><a href="http://lh5.ggpht.com/-ETmHnq-JRYA/T5TnxaKnZKI/AAAAAAAAA1s/T4DL19rF6-Y/s1600-h/image%25255B23%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-DOlf6wU5hHo/T5Tnx80ijJI/AAAAAAAAA10/JKOkZFBPxjY/image_thumb%25255B11%25255D.png?imgmax=800" width="338" height="267"></a></p> <p>6. El segundo tipo de compontes se llama bindings y aparecen cuando las paginas tienen acceso a datos. </p> <p>Como hemos creado una pagina en blanco, vamos a incluirle una consulta de clientes para identificar este tipo de componentes. Lo que hacemos es arrastrar la referencia a la vista ClienteVO1 hacia la página creada. Elijamos la opción Form | ADF Form tal como se muestra a continuación.</p> <p><a href="http://lh6.ggpht.com/-Nr2yX_8lOLQ/T5TnyVdcQ_I/AAAAAAAAA14/lDdde9PEpEU/s1600-h/image%25255B57%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-ENSd7jgsYjI/T5Tny0r2LgI/AAAAAAAAA2E/vc-LnNXEewQ/image_thumb%25255B27%25255D.png?imgmax=800" width="437" height="201"></a></p> <p> </p> <p>7. En la ventana, se define los datos a mostrar, seleccione “Include Navigation Control” que permite incluir botones de navegación entre los datos. Pulse OK.</p> <p> </p> <p><a href="http://lh3.ggpht.com/-llPdUZyv_m8/T5TnzTotHVI/AAAAAAAAA2M/65n8neL-k90/s1600-h/image%25255B60%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-fbrXbvuuUD4/T5Tnz1aoYoI/AAAAAAAAA2U/dPk4C9nkMDY/image_thumb%25255B28%25255D.png?imgmax=800" width="244" height="204"></a></p> <p> </p> <p>8. Note que se ha creado un formulario que muestran datos de la vista. Sin embargo, debemos recordar que si una pagina expone datos, es porque existen bindings que recuperan esa información. Comprobemos eso, para eso pulse la pestaña Source en la parte inferior de la página.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-6YEhUH9VO9A/T5Tn0aPYjXI/AAAAAAAAA2c/Tsq_93MuzFI/s1600-h/image%25255B42%25255D.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-jRDJ75wdSEs/T5Tn0h7OU5I/AAAAAAAAA2k/J9znz86bLpI/image_thumb%25255B20%25255D.png?imgmax=800" width="244" height="75"></a></p> <p> </p> <p>9. Aparece los tags que hacen referencia a cada uno de los campos agregados. Sin embargo lo que nos interesa es el valor de la propiedad value. Puede por ejemplo ver que la propiedad value de clienteId tiene la siguiente expresión.</p> <p>value="#{bindings.ClienteId.inputValue}"</p> <p> </p> <p><a href="http://lh5.ggpht.com/-i4vBbmr1pi4/T5Tn1EIU5xI/AAAAAAAAA2s/X_bJGshoNck/s1600-h/image%25255B67%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-Le2scL23Wg8/T5Tn1vC0t3I/AAAAAAAAA20/xa9WA2TsrHg/image_thumb%25255B31%25255D.png?imgmax=800" width="478" height="122"></a></p> <p> </p> <p>Lo que indica eso, es que el valor que muestra el campo es de un binding llamado ClienteId. Pero donde están los bindings?, para eso hagamos clic en la la pestaña inferior denominado Bindings</p> <p> </p> <p><a href="http://lh3.ggpht.com/-0GdJKB2j7Bg/T5Tn11jzncI/AAAAAAAAA28/knFfVxdKhIU/s1600-h/image%25255B71%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-7DJkkTiE0Y4/T5Tn2B05-EI/AAAAAAAAA3E/TGxpc0liIBU/image_thumb%25255B33%25255D.png?imgmax=800" width="356" height="47"></a></p> <p> </p> <p>10. En esta pestaña se muestran los bindigs que tiene la página. Note que existen tantos bindings como campos se muestran en la página. Esto lo ha creado el asistente.</p> <p> </p> <p><a href="http://lh6.ggpht.com/-W5R4VxP_IWc/T5Tn2rlbE6I/AAAAAAAAA3M/dUXJBPSMYUY/s1600-h/image%25255B75%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-b4nse2tGbgs/T5Tn3H2Ws5I/AAAAAAAAA3U/-9g2FtT87uk/image_thumb%25255B35%25255D.png?imgmax=800" width="516" height="292"></a></p> <p> </p> <p>11. Los componentes ClienteId,Nombre e Email son bindigs del tipo “value bindigs” y son los que obtienen datos. Adicionalmente vamos a ver que se han creado 4 botones que permiten el desplazamiento de datos. Estas operaciones son soportadas gracias a los bindings del tipo “Operation Bindigs”. En este caso los bindigs de este tipo son: First,Previous, Next y Last.</p> <p>Los value bindigs indicados anteriormente, recuperan su información de otro tipo de bindigs del tipo iterador.En este caso el iterador que se utiliza se llaia ClienteVO1Iterator y es como un cursor que recupera la información de la vista.</p> <p>12. Bien, veamos la página en funcionamiento para comprobar su funcionamiento. Haga clic derecho sobre la página y pulse RUN.</p> <p><a href="http://lh4.ggpht.com/-4i3XHKiPpDs/T5Tn3vzlKkI/AAAAAAAAA3c/BtYtn5JH5JE/s1600-h/image%25255B79%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-0OLWpYhBrBE/T5Tn4XpBTHI/AAAAAAAAA3k/0m7zJBEAe8M/image_thumb%25255B37%25255D.png?imgmax=800" width="504" height="300"></a></p> <p> </p> <p>13. Note que se muestran los datos de los clientes. Esto se produce porque, como hemos visto existen bindings que soportan esta información.</p> <p><a href="http://lh4.ggpht.com/-HUde3OFHoxQ/T5Tn476wwoI/AAAAAAAAA3s/weo7QPuvyKQ/s1600-h/image%25255B83%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-eqRlkTdWeRs/T5Tn5eeHh-I/AAAAAAAAA30/ACCc3uqyiHM/image_thumb%25255B39%25255D.png?imgmax=800" width="407" height="200"></a></p> <p> </p> <p>14. Si pulsamos el botón Next se recorre al siguiente registro. Esto se debe al uso de los operation Bindigs.</p> <p><a href="http://lh6.ggpht.com/-0RF2lTN8QAs/T5Tn5p2H6yI/AAAAAAAAA38/73cnxu2SHSM/s1600-h/image%25255B87%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-L8ODbziLmNg/T5Tn6HEad0I/AAAAAAAAA4E/4g0UnF_VLJM/image_thumb%25255B41%25255D.png?imgmax=800" width="415" height="204"></a></p> <p> </p> <p>15. Bien, luego de entender como llegan los datos podemos seguir con los siguientes post donde conoceremos el desarrollo y refinamiento de las páginas.</p> <p> </p> <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo6.zip">CODIGO FINAL</a> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com0tag:blogger.com,1999:blog-390232277710184382.post-78345579698357737532012-02-26T22:18:00.000-08:002013-01-10T17:21:48.914-08:00Curso ADF 11g–Parte 5<p>Tema : Lógica en el Módulo de Aplicaciones</p> <p>Parte importante del cualquier desarrollo, es la aplicación de reglas de negocio. Como comentamos en capítulos anteriores la implementación de reglas se realiza en el componente denominado Application Module <p>En este capitulo conoceremos más sobre este componente y lo aplicaremos en nuestro desarrollo. <p>Requerimiento: <ul> <li>Oracle Jdeveloper 11g. 11.1.1.3 <li>Oracle Database Express 11g <li>Haber culminado la parte 4 del tutorial.</li></ul> <p>Capítulos Anteriores <p>Parte 1: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-11g-parte-1.html">Creación del Modelo de Datos.</a> <p>Parte 2: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-parte-2.html">Creación de Componentes de Negocio</a> <p>Parte 3: <a href="http://plinioa.blogspot.com/2012/01/curso-adf-11g-parte-3.html">Personalización de Entidades</a> <p>Parte 4: <a href="http://plinioa.blogspot.com/2012/02/curso-adf-11g-parte-4.html">Personalización de View Objects.</a> <p>Opcional : <p>Si no culmino los capítulos anteriores y quiere empezar desde este capítulo, puede descargar el siguiente código para continuar el curso. <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo4.zip">Código previo</a>. <p><strong>Introducción.</strong> <p>El módulo de aplicaciones (Application Module), es el lugar donde se aplica las lógica del negocio que tendrá la aplicación. El modulo de aplicaciones implementa el patrón Facade, eso implica que centralizará la reglas de negocio y será el punto de acceso de las interfaces web con el modelo de la aplicación. <p>Si usted es un desarrollador SQL, un equivalente a este componente sería los store procedures que usted desarrolla para implementar las reglas de negocio. <p>Bien, para conocer como implementar la lógica de negocio, desarrollemos las siguientes 2 reglas. <blockquote> <p>1. Se necesita implementar una funcionalidad de “Incremento” de precios de todo el catalogo de precios en base a un porcentaje.</p></blockquote> <blockquote> <p>Ejemplo: Se ingresa como parámetro 10 y todos los precios del catalogo se incrementa en 10 %</p> <p>2.Se necesita clasificar a los clientes en función al total de los montos de sus movimientos. Para eso los clientes manejarán un status que se asignará de la siguiente manera</p> <p> <a href="http://lh5.ggpht.com/-mg7sKEyM42c/T0s5jeLQ9pI/AAAAAAAAAw8/Po1i2p0ymVA/s1600-h/image%25255B3%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-jgBcJXxjs-A/T0s5j5JH3-I/AAAAAAAAAxE/2q12kCL3Klw/image_thumb%25255B1%25255D.png?imgmax=800" width="461" height="156"></a></p> <p>La funcionalidad que se requiere es realizar el cálculo de todos los clientes para determinar su Status en función a la sumatoria de sus movimientos.</p></blockquote> <p>Bien, veamos como aplicamos estas reglas. <p><strong>Funcionalidad Incremento de Precios.</strong> <p>1. Lo primero que debemos hacer es identificar la clase donde se aplicará los métodos de reglas de negocio. El componente que consolida las reglas, se llama modulo de aplicación y en nuestro desarrollo se llama VentasAM . Haga doble clic sobre el, elija la categoría Java y haga clic sobre el Botón “Edit java options” <p><a href="http://lh6.ggpht.com/-KKQ8unRJqmY/T0s5kS51DdI/AAAAAAAAAxM/YwP5Xa-RWvA/s1600-h/image%25255B7%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-mCkpSDtE7o0/T0s5kizGdqI/AAAAAAAAAxU/1_o8JMeWlyY/image_thumb%25255B3%25255D.png?imgmax=800" width="549" height="115"></a></p> <p>2. Al igual que en el resto de casos, en esta ventana podemos asociar al componente a una clase Java. En este caso seleccionamos la casilla “Generate Application Module Class: VentasAMImpl” Pulse Ok.</p> <p><a href="http://lh6.ggpht.com/-v190ffkS8c8/T0s5mNTeQmI/AAAAAAAAAxc/mZb07sn9D2A/s1600-h/image%25255B11%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-yJRc7YynLeM/T0s5mplS3lI/AAAAAAAAAxk/etGY7w7foW4/image_thumb%25255B5%25255D.png?imgmax=800" width="421" height="388"></a></p> <p>3. Confirme que debajo del componente se hayan creado la clase java VentasAMImpl.java. Haga doble clic sobre la clase.</p> <p><a href="http://lh4.ggpht.com/-dh3VPboqfTk/T0s5nIq81OI/AAAAAAAAAxs/ov-tf5lK1ew/s1600-h/image%25255B15%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-VwzP30P4p4I/T0s5nm6ACtI/AAAAAAAAAx0/LgQo_A2-EdY/image_thumb%25255B7%25255D.png?imgmax=800" width="413" height="306"></a></p> <p>4. Analicemos por un momento el código asociado a esta clase. Notará que existen algunos métodos creados. </p> <p><a href="http://lh6.ggpht.com/-xZsmCEddY-c/T0s5pP3--EI/AAAAAAAAAx8/PunMo8Ka0G4/s1600-h/image%25255B19%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-u2Ia0aF6_74/T0s5pVczOWI/AAAAAAAAAyE/g6iyBKHscII/image_thumb%25255B9%25255D.png?imgmax=800" width="462" height="248"></a></p> <p>5. Por ejemplo en la imagen se muestra el método getClienteVO1(). La creación de este método se debe a que nosotros en anteriores capítulos publicamos los View Objects para que podamos probarlo. Para comprobarlo haga doble clic sobre VentasAM y seleccione la categoría DataModel </p> <p><a href="http://lh3.ggpht.com/-MSIvD7jbtGw/T0s5raNK3MI/AAAAAAAAAyM/3amfKIK11Tc/s1600-h/image%25255B23%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-a607iM_NIOQ/T0s5sJTU_kI/AAAAAAAAAyU/i0_Ab6bbl6c/image_thumb%25255B11%25255D.png?imgmax=800" width="509" height="187"></a></p> <p>Note que aparecen publicadas las vistas ClienteVO1, DetalleVO1, MovimientoVO1 y ProductoVO1. Eso implica que por cada vista que publicamos automáticamente se crea su correspondiente método get<Nombre de la Vista> en la clase java. De esta manera podemos acceder programáticamente a los datos de la vista para procesarlo.</p> <p>6. Regresemos a la clase. El primer método que crearemos será imprimirProductos(), que nos servirá simplemente para consultar los productos y sus precios. El código sería similar a lo siguiente.</p> <p>public void imprimirProductos(){<br> System.out.println("Reporte de Productos");<br> Row fila = this.getProductoVO1().first();<br> while (fila !=null)<br> {<br> <br> System.out.println(<br> fila.getAttribute("Precio") <br> + "\t"<br> + fila.getAttribute("Descripcion")<br> ); <br> fila = this.getProductoVO1().next();<br> }<br>}</p> <p>Analicemos el código. </p> <p>El método getProductoVO1() obtiene una referencia a los datos de la vista de productos. Es decir un puntero a los 7 registros que tiene la vista. Sin embargo, nos gustaría tener referencia a alguna de las instancias para su procesamiento, entonces usamos los métodos first(), next(), previous() y last() que nos recuperan un registro de la vista, de manera similar a como procesamos un cursor.</p> <p>Entonces la primera línea ,</p>Row fila = this.getProductoVO1().first();<br> <p>Nos permite obtener una referencia a la primera instancia de la vista. Ojo no olvide importar la clase oracle.jbo.Row cuando declare la instancia.</p> <p>Lo que sigue a continuación es recorrer a la vista, para eso como si trabajara con un cursor recorra la vista usando las siguientes instrucciones.</p> <p> while (fila !=null)<br> { …..</p> <blockquote>fila = this.getProductoVO1().next();<br></blockquote> <p> }<br></p> <p>Es obvio que la fila toma el valor del registro siguiente haciendo uso del método next()</p> <p>y Finalmente el cuerpo del bucle colocamos la sentencia para imprimir la descripcion y precio del producto.</p>System.out.println(<br> fila.getAttribute("Precio") <br> + "\t"<br> + fila.getAttribute("Descripcion")<br> ); <br> <p>Tenga en cuenta que los nombres de los atributos Precio y Descripcion corresponde a los nombres de los atributos declarados en la vista.Tenga en cuenta mayúsculas y minúsculas.</p> <p><a href="http://lh5.ggpht.com/-L8QPDoa0fb8/T0s5sRVAgcI/AAAAAAAAAyc/KxbntvC9B6E/s1600-h/image%25255B27%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-ghqN1gc-cVU/T0s5s4clHYI/AAAAAAAAAyk/w1t5_IV-cdw/image_thumb%25255B13%25255D.png?imgmax=800" width="513" height="205"></a></p> <p>7. Bien, así como publicamos las vista en el módulo de aplicaciones, también será necesario publicar el método que acabamos de crear. Entonces haga doble clic el módulo de aplicaciones, categoría Java y pulse la opción “Edit application module client interface”</p> <p><a href="http://lh3.ggpht.com/-fENV6SwyoSc/T0s5tRQ6U8I/AAAAAAAAAys/bAWel8sXk7g/s1600-h/image%25255B37%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-snW_yBUW1AM/T0s5uHdL3oI/AAAAAAAAAy0/Ws2LJ2cnamA/image_thumb%25255B19%25255D.png?imgmax=800" width="560" height="222"></a></p> <p>8. En la ventana mostrada, seleccione el método y desplazelo a la izquierda, como se muestra en la figura. Pulse OK.</p> <p><a href="http://lh3.ggpht.com/-wieBkqRdjN8/T0s5uo4Jg5I/AAAAAAAAAy8/PkJyVZ3zebc/s1600-h/image%25255B40%25255D.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-jAGvejJA8VU/T0s5u_pCw4I/AAAAAAAAAzE/tw0rdKIZkpg/image_thumb%25255B20%25255D.png?imgmax=800" width="244" height="171"></a></p> <p>9. Probemos el método, ejecute el módulo de aplicaciones.</p> <p><a href="http://lh3.ggpht.com/-tS4pf4RA2kA/T0s5vU0a6zI/AAAAAAAAAzM/2XHK5lNJw0c/s1600-h/image%25255B44%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-oQhnvIocn24/T0s5wJUwQaI/AAAAAAAAAzU/aEb1kdNW-pI/image_thumb%25255B22%25255D.png?imgmax=800" width="451" height="373"></a></p> <p>10. Ahora haga doble clic sobre la raíz del módulo de aplicaciones, aparecerá los métodos disponibles. Note que esta seleccionado el único métodos “imprimirProductos”. Pulse “Ejecutar”. </p> <p><a href="http://lh4.ggpht.com/-HlQEtVqQh5A/T0s5wqyOfGI/AAAAAAAAAzc/9Ld7ECnerDw/image%25255B52%25255D.png?imgmax=800"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-5N8UBN9SOgk/T0s5xGjdUjI/AAAAAAAAAzk/-F6t_HI8a_s/image_thumb%25255B26%25255D.png?imgmax=800" width="394" height="310"></a></p> <p> </p> <p>12. En la consola se mostrará el listado de productos y sus precios.</p> <p><a href="http://lh5.ggpht.com/-fCidjKhJJDg/T0s5xgAvLHI/AAAAAAAAAzs/_omGjcJb9xU/s1600-h/image%25255B56%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-wQi7K2gtPDw/T0s5xyjUXjI/AAAAAAAAAz0/5xzrw9lod08/image_thumb%25255B28%25255D.png?imgmax=800" width="463" height="235"></a></p> <p>13. Bien ahora agregaremos el método incrementarPrecio el cual tendrá el siguiente contenido.</p> <p>public void incrementarPrecio(int porcentaje){<br> System.out.println("Inicio del Proceso");<br> Row fila = this.getProductoVO1().first();<br> while (fila !=null)<br> {<br> float precio = ((Number)fila.getAttribute("Precio")).floatValue();<br> float nuevoPrecio = precio * (100+ porcentaje)/100 ;<br> fila.setAttribute("Precio", new Number(nuevoPrecio));<br> <br> fila = this.getProductoVO1().next();<br> }<br> <br> this.getDBTransaction().commit();<br> <br> System.out.println("Fin del Proceso");<br>}<br></p> <p>El código lo que hace es recorrer nuevamente todos registros de la vista, sin embargo el cuerpo del bucle tiene unas líneas distintas.</p> float precio = ((Number)fila.getAttribute("Precio")).floatValue();<br> float nuevoPrecio = precio * (100+ porcentaje)/100 ;<br> fila.setAttribute("Precio", new Number(nuevoPrecio));<br> <p>Note que la variable precio recupera el valor del precio del producto. Acá lo único distinto es que casteamos el valor recuperado en un tipo Number (tipo de dato correspondiente a ese atributo que se declaro cuando se definió la entidad Producto). Una vez que recuperamos el tipo Number usamos el método floatNumber para obtener el primitivo float que necesita la variable,</p> <p>Es claro lo que hace la variable nuevoPrecio y finalmente usamos el método setAttribute para devolver el valor calculado al atributo Precio. Ojo debemos devolver un tipo Number por eso instanciamos esa clase con el nuevoPrecio obtenido.</p> <p>Importante, para evitar errores de compilación en esta parte, asegúrese de importar la clase Number.</p> <p>import oracle.jbo.domain.Number;</p> <p> </p> <p>Adicionalmente, debe observar que estamos usando la siguiente sentencia. Para aplicar los cambios hacia la base de datos.</p> <p><br> this.getDBTransaction().commit();</p> <p>Acá es importante destacar, que este framework maneja por default el concepto de transacción, es decir que todos los cambios se mantienen en memoria y sólo cuando hacemos uso de la última sentencia persistimos los cambios contra la BD.</p> <p>14 Repita los pasos 7 y 8 para publicar el método.</p> <p>15. Repitamos los pasos 9 y 10 para probar el método. Sólo que ahora será necesario seleccionar ese método y definir el porcentaje de incremento, en nuestro caso 10. Pulse OK.</p> <p><a href="http://lh6.ggpht.com/-sxx4uur8YXQ/T0s5yZnNpPI/AAAAAAAAAz8/kXs80jT7nEM/s1600-h/image%25255B63%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-tHG6kQy7ZAk/T0s5y8_bwfI/AAAAAAAAA0E/lROiB89aFNY/image_thumb%25255B31%25255D.png?imgmax=800" width="416" height="327"></a></p> <p> </p> <p>16. Ahora vuelva a ejecutar el método imprimirProductos y note que los precios han cambiado con lo que confirmamos que el método funciona correctamente.</p> <p><a href="http://lh4.ggpht.com/-he-ihVhF0aU/T0s5zM1k24I/AAAAAAAAA0M/X8sbot9fvO4/s1600-h/image%25255B72%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Fspt0XWggxQ/T0s5zg8Mm5I/AAAAAAAAA0U/lyVFjvJmI3A/image_thumb%25255B36%25255D.png?imgmax=800" width="480" height="270"></a></p> <p> </p> <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo5.zip">CODIGO FINAL</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com2tag:blogger.com,1999:blog-390232277710184382.post-68278331582608885162012-02-12T23:26:00.001-08:002013-01-10T17:22:53.794-08:00Curso ADF 11g - Parte 4<p>Tema : Personalización de View Objects. <p>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”. <p>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. <p>Requerimiento: <ul> <li>Oracle Jdeveloper 11g. 11.1.1.3 <li>Oracle Database Express 11g <li>Haber culminado la parte 3 del tutorial.</li></ul> <p>Capítulos Anteriores <p>Parte 1: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-11g-parte-1.html">Creación del Modelo de Datos.</a> <p>Parte 2: <a href="http://plinioa.blogspot.com/2011/12/curso-adf-parte-2.html">Creación de Componentes de Negocio</a> <p>Parte 3: <a href="http://plinioa.blogspot.com/2012/01/curso-adf-11g-parte-3.html">Personalización de Entidades</a> <p>Opcional : <p>Si no culmino los capítulos anteriores y quiere empezar desde este capítulo, puede descargar el siguiente código para continuar el curso. <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo3.zip">Código previo</a>. <p>Nuestro objetivo en esta parte será lo siguiente: <ul> <li>Personalizaremos los atributos que muestran las vistas por default. <li>Modificar las etiquetas (Label) y Formatos. <li>Asociar una lista de valores a lo campos. </li></ul> <p><strong>PERSONALIZAR ATRIBUTOS DE VISTAS.</strong></p> <p>1. Ejecute el módulo de aplicaciones, y consulta la vista de Movimiento-Detalle.</p> <p><a href="http://lh5.ggpht.com/-YjmFTn2UOwg/Tzi6cjACihI/AAAAAAAAAqA/wkdIZL8uCjk/s1600-h/image%25255B3%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-c43JyJZtPa0/Tzi6ddekEBI/AAAAAAAAAqI/aX-yEh2BQys/image_thumb%25255B1%25255D.png?imgmax=800" width="479" height="251"></a></p> <p>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. <p>3. Regrese al Jdeveloper y hagamos doble clic sobre la vista detalle. <p><a href="http://lh5.ggpht.com/-HSFVrCUAitY/Tzi6d4OBnNI/AAAAAAAAAqQ/2f_k_7x-WEA/s1600-h/image%25255B7%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-iqjGbgSs7VI/Tzi6edPQACI/AAAAAAAAAqY/uRxvI-AqC24/image_thumb%25255B3%25255D.png?imgmax=800" width="307" height="364"></a> <p>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. <p><a href="http://lh4.ggpht.com/-2W84oqsZXpU/Tzi6e5N4JEI/AAAAAAAAAqg/nkaiXET5cb4/s1600-h/image%25255B11%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-eI6MKpwQ2t8/Tzi6ff90jkI/AAAAAAAAAqo/LsE1XKcWEpM/image_thumb%25255B5%25255D.png?imgmax=800" width="521" height="237"></a> <p>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. <p><a href="http://lh3.ggpht.com/-sNv8q96wqtc/Tzi6gv8MPzI/AAAAAAAAAqw/lCGjCGlHQPM/s1600-h/image%25255B15%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-2KIa7sGwKYs/Tzi6hWtnhqI/AAAAAAAAAq4/fZVNavTAJkU/image_thumb%25255B7%25255D.png?imgmax=800" width="514" height="293"></a> <p>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</p> <p><a href="http://lh5.ggpht.com/-YJ9Yf4kRmME/Tzi6h3ul8WI/AAAAAAAAArA/rOyVUOnTkMo/s1600-h/image%25255B19%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-zUaDzumAFvY/Tzi6jXxPXhI/AAAAAAAAArI/2djy02FHQws/image_thumb%25255B9%25255D.png?imgmax=800" width="549" height="301"></a></p> <p>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ó.</p> <p><a href="http://lh4.ggpht.com/-CVAB3vyV4Jg/Tzi6j1sIgVI/AAAAAAAAArQ/qp4wCmXHPys/s1600-h/image%25255B27%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-SrJaThuF6gE/Tzi6kfz1tYI/AAAAAAAAArY/zCPExih8Yqs/image_thumb%25255B13%25255D.png?imgmax=800" width="529" height="238"></a></p> <p>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></p> <p>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.</p> <p><a href="http://lh3.ggpht.com/-9c5Z9976gEw/Tzi6k0nvioI/AAAAAAAAArg/93Y3bZ2lX9U/s1600-h/image%25255B32%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-s75RJQF7KsQ/Tzi6lmmEAEI/AAAAAAAAAro/QW7dobtEGP8/image_thumb%25255B16%25255D.png?imgmax=800" width="547" height="211"></a></p> <p>8. Elija el atributo Descripción de la entidad Producto, agréguelo a la sección de Selected y Pulse Ok.</p> <p><a href="http://lh6.ggpht.com/-LV2lEzmrwU4/Tzi6md48uyI/AAAAAAAAArw/6xWJ9A_kFhA/s1600-h/image%25255B53%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/-GxVxGj4NpQw/Tzi6mz5lfDI/AAAAAAAAAr4/xUi0vZqQItU/image_thumb%25255B27%25255D.png?imgmax=800" width="447" height="334"></a></p> <p>9.Ahora pulse el botón, Set Source Order para ordenar los campos.</p> <p><a href="http://lh6.ggpht.com/-NyZBxvD12nI/Tzi6nXV8GwI/AAAAAAAAAsA/Lg1SEBpFPtw/s1600-h/image%25255B40%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-jwOM2_LuVik/Tzi6n_d_AEI/AAAAAAAAAsI/tXYP9zN7E0c/image_thumb%25255B20%25255D.png?imgmax=800" width="492" height="215"></a> </p> <p>10. Ordénelo tal como se muestra en la imagen.Pulse OK y grabe los cambios.</p> <p><a href="http://lh5.ggpht.com/-nUV7uz8MmlM/Tzi6oM2AK8I/AAAAAAAAAsQ/XcAE4zRzTnc/s1600-h/image%25255B44%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-sOPgzBbce4k/Tzi6o7eqZYI/AAAAAAAAAsY/81C_gKYiGiM/image_thumb%25255B22%25255D.png?imgmax=800" width="406" height="374"></a></p> <p>11. Ejecutemos el módulo de aplicación y vemos los resultados.</p> <p><a href="http://lh5.ggpht.com/-IQVFELeKEhI/Tzi6pchHexI/AAAAAAAAAsg/Sb8aJCoxd_8/s1600-h/image%25255B48%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-C19ytaHWHb8/Tzi6p5H7ByI/AAAAAAAAAso/Mo-oA3kP6ec/image_thumb%25255B24%25255D.png?imgmax=800" width="421" height="298"></a></p> <p>12. Veamos la vista Movimiento-Detalle y notemos que ya apareció el atributo Descripción del Producto.</p> <p><a href="http://lh3.ggpht.com/-AYriO1vBKjo/Tzi6qXMREGI/AAAAAAAAAsw/WGXwK5fnasg/s1600-h/image%25255B52%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-8H-7LxoGOas/Tzi6q75qe3I/AAAAAAAAAs4/x6KcuODcTv0/image_thumb%25255B26%25255D.png?imgmax=800" width="488" height="254"></a></p> <p><strong>PERSONALIZAR FORMATOS Y ETIQUETAS</strong>.</p> <p>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</p> <p>14. Haga doble clic en la vista MovimientoVO.Luego elija la categoría Attributes y finalmente haga doble clic sobre al atributo “Fecha”</p> <p><a href="http://lh4.ggpht.com/-SvN30K4tvhM/Tzi6rcLOWoI/AAAAAAAAAtA/9uXn-lnl_1M/s1600-h/image%25255B57%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-zyXvmfoxDJM/Tzi6sV-ci9I/AAAAAAAAAtI/Hn0IUP82RUA/image_thumb%25255B29%25255D.png?imgmax=800" width="532" height="303"></a></p> <p>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.</p> <p>Format Type: Simple Date</p> <p>Format: dd/MM/yyyy</p> <p><a href="http://lh3.ggpht.com/-fw8ilP8MazE/Tzi6txtfGRI/AAAAAAAAAtQ/f8iaOmIC5LM/s1600-h/image%25255B61%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-hHmJSqDevTs/Tzi6uV3N4wI/AAAAAAAAAtY/Q36Qn6ZUXak/image_thumb%25255B31%25255D.png?imgmax=800" width="488" height="323"></a></p> <p>Pulse OK.</p> <p>16. Hagamos doble clic ahora sobre el atributo “ClienteId”. </p> <p><a href="http://lh6.ggpht.com/-bQZIUaXccUw/Tzi6usmrfBI/AAAAAAAAAtg/FD-mxW9PhjM/s1600-h/image%25255B66%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-IO8Ov0fiHmU/Tzi6vdGZ5vI/AAAAAAAAAto/EkFLcJ3T4TA/image_thumb%25255B34%25255D.png?imgmax=800" width="541" height="252"></a></p> <p>17. Seleccionemos nuevamente la categoría Control Hint y modifiquemos la propiedad Label por “Id Cliente”. Pulse OK y Grabe los cambios.</p> <p><a href="http://lh4.ggpht.com/-SCvAuf1_4XA/Tzi6v3ycS9I/AAAAAAAAAtw/ApnNcZtwV8U/s1600-h/image%25255B78%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-KUYTCFMp89s/Tzi6wf51CjI/AAAAAAAAAt4/Kc0APbztLbk/image_thumb%25255B40%25255D.png?imgmax=800" width="425" height="281"></a></p> <p>18. Ejecutemos el módulo de aplicación para verificar los cambios.</p> <p><a href="http://lh5.ggpht.com/-bfQY0mIq_Og/Tzi6w6ZJXGI/AAAAAAAAAuA/3_UrHaG4i3Q/s1600-h/image%25255B74%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-Miu9SqdpWUU/Tzi6xo8TVYI/AAAAAAAAAuI/e2dylRZTYDo/image_thumb%25255B38%25255D.png?imgmax=800" width="432" height="341"></a></p> <p>19. Al consultar la vista de movimiento notará que se realizaron correctamente.</p> <p><a href="http://lh6.ggpht.com/-W3sVZYIbveo/Tzi6yGw1QPI/AAAAAAAAAuQ/MeigAgNMYH0/s1600-h/image%25255B82%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-wukAwdOYAIQ/Tzi6yim3OVI/AAAAAAAAAuY/2YeqKcH_hNU/image_thumb%25255B42%25255D.png?imgmax=800" width="476" height="271"></a></p> <p><strong>ASOCIAR LOS ATRIBUTOS CON LISTAS DE VALORES</strong></p> <p>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.</p> <p><a href="http://lh5.ggpht.com/-Q1ly1W6eUlI/Tzi6zOD88iI/AAAAAAAAAug/mdjvR1V9e-E/s1600-h/image%25255B94%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-agddKP78r3Y/Tzi6z6UAggI/AAAAAAAAAuo/GNjkusWBePA/image_thumb%25255B48%25255D.png?imgmax=800" width="513" height="295"></a></p> <p>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”</p> <p><a href="http://lh3.ggpht.com/-YVBTqqd4CCI/Tzi60XLt0iI/AAAAAAAAAuw/z2sSJzMw5j4/s1600-h/image%25255B99%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-1hUemv1psec/Tzi67jIJcbI/AAAAAAAAAvI/jYMRR-X2vkY/image_thumb%25255B51%25255D.png?imgmax=800" width="434" height="460"></a></p> <p>22. Seleccionemos la vista ClienteVO, pues será de esta de la que tomaremos el nombre del cliente. Pulse OK.</p> <p><a href="http://lh4.ggpht.com/-P87GpDxChAA/Tzi69Np_6VI/AAAAAAAAAvQ/QLmwms7T-NU/s1600-h/image%25255B103%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/-UJZPkHieY70/Tzi691RCQRI/AAAAAAAAAvY/2JuqFT0H1dc/image_thumb%25255B53%25255D.png?imgmax=800" width="406" height="374"></a></p> <p>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.</p> <p><a href="http://lh6.ggpht.com/-XpAD7NVStw8/Tzi6-SekxCI/AAAAAAAAAvg/40N_tTp3ZyQ/s1600-h/image%25255B107%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-KSLxDmqo_q8/Tzi6-2ugWPI/AAAAAAAAAvo/WRJ1VVs1eSQ/image_thumb%25255B55%25255D.png?imgmax=800" width="369" height="381"></a></p> <p>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.</p> <p>Adicionalmente seleccionamos Nombre como el atributo a mostrar en la lista. Pulse OK y Grabe los cambios.</p> <p><a href="http://lh6.ggpht.com/-W47fHm5Mg9M/Tzi6_UL4_NI/AAAAAAAAAvw/ueDvRJAJsgA/s1600-h/image%25255B111%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-sSEagvQvoCM/Tzi6_9NDV9I/AAAAAAAAAv4/ua8TdlL3_5w/image_thumb%25255B57%25255D.png?imgmax=800" width="354" height="366"></a></p> <p>25. Probemos los cambios desde el módulo de aplicación y vemos que los cambios se han aplicado correctamente.</p> <p><a href="http://lh4.ggpht.com/-0xk-6C6YA3I/Tzi7AaOCXLI/AAAAAAAAAwA/JWfds1HZ2bY/s1600-h/image%25255B115%25255D.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-UOig5PHZoo4/Tzi7BAaaEFI/AAAAAAAAAwI/HZMuzqrDpRQ/image_thumb%25255B59%25255D.png?imgmax=800" width="461" height="362"></a></p> <p>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.</p> <p><a href="http://www.oramex.org/blog/curso/VentasFinCapitulo4.zip">CODIGO FUENTE FINAL</a></p> Plinio Arbizuhttp://www.blogger.com/profile/12356214825846243107noreply@blogger.com5