Friday, 30 December 2011

Copiar y Pegar de EXCEL a ADF

Hace unas semanas recibí el requerimiento de realizar un proceso de copiado y pegado de Excel hacia una aplicación ADF. Esto debido a que los usuarios obtenían mucho de los datos que ingresaba desde varias hojas de cálculo.



Solucioné este requerimiento usando pasos muy similares a los que describo en este post, y el resultado final que usted tendrá al culminar este ejercicio será así.






image






Tenga en cuenta que se utiliza una tabla ADF como destino, y un menú emergente para que el usuario pueda situar sobre que columna quiere realizar el copiado.



Puede descargar el ejemplo completo en el siguiente enlace.



Código Fuente.



Bien vemos como solucionamos este requerimiento en ADF.




Requerimientos :



Jdeveloper 11.1.1.3




1.Para el ejemplo primero crearemos una aplicación ADF. Los pasos de creación los omito debido a que uso las opciones por default.





2. En el proyecto ViewController agregaremos el bean “EmpleadoBean” con los datos de código y nombre de empleado. Asegúrese de incluir los métodos accesores.





3.Crearemos además una managed Bean “DatosBean” de JSF a nivel de sesión donde almacenaremos los datos ingresados desde la página. Noté que esta clase tendrá una lista de Empleados. Asegúrese de incluir los métodos accesores.







4.Sobre escribimos el constructor de este bean para agregar un empleado al iniciar la pagina.


    public DatosBean() {
     
        super();
        EmpleadoBean empleado = new EmpleadoBean();
        listaEmpleados.add(empleado);
           
     
    }



5.Para definir a la clase como un managed bean de sesión es necesario configurarlo en el adfc-config.xml




6.Ahora creamos la pagina ADF




7.Arrastramos de la paleta el control Table hacia la pagina




8.Asociamos los datos mostrados a la lista creada previamente.




9. Configuramos el contenido de nuestra tabla, estamos cambiando los headers, values y el tipo de componente por inputText, tal como se muestra en la figura.




Ojo, debe respetar los nombres de los atributos de manera similar como lo definió en el bean : EmpleadoBean.




10.Ejecutamos la página. En una primera prueba, esto debería mostrarse.



11. Bien, la idea ahora será que el usuario haga clic derecho sobre algunas de las celdas y se muestre un menú contextual que ofrezca una opción de pegado de contenido de una hoja excel.




Para eso primero crearemos el menú contextual. Arrastre el control popup hacia la página,




image






12. Incluya dentro del popup, los componentes Menu (Que define el menú vertical) y finalmente un “Menu Item” que será el botón que pulsará el usuario. Al final usted debe tener algo similar a lo mostrado a continuación.





image



Tenga en cuenta que se cambio la propiedad Text del Menu Item por “Pegar Contenido” y además la propiedad ContetDelivery del popup por “Inmediate” lo cual acelerará la presentación del contenido del popup y que es recomendada para las ventanas emergentes que serán siempre usadas en las pantallas, como es el caso de esta opción.




13 Ahora será necesario programar un evento a nivel de las celdas que lancen el popup que acabamos de crear. Para ello, usaremos un componente llamado Client Listener que permite invocar a funciones javaScript en nuestra página. Arrastremos este componente sobre la primera celda (inputText) de nuestra tabla.





image






Note que estamos indicando que se invocará a la función mostrarPopup y el evento asociado es el contextMenu. Este evento se ejecuta cuando hacemos clic derecho sobre la celda (input text)


14. Colocamos la función JavaScript en la página tal como se indica a continuación.




function mostrarPopup(popupId)
{
return function(evt)
{
evt.cancel();
var clientId = evt.getSource().getClientId();
var popup = AdfPage.PAGE.findComponentByAbsoluteId(popupId);
var hints = {align:"end_before", alignId:clientId};
popup.show(hints);
}
}





Note que la función java script cancela el comportamiento por default del evento, define la variable clienId asociado al control que recibe el evento (la caja de texto),define la varible popup, asociado al control popup que creamos previamente, define la varible hints permite definir la ubicación donde aparecerá nuestra ventana emergente y finalmente muestra el popup (popup.show).




15. Probemos la pantalla hasta este punto. Al hacer clic derecho sobre la celda, debe mostrar el menú contextual.





image

16.Es momento ahora de programar el listener de botón “Pegar Contenido”. El código usará un inputText como intermediario entre el contenido de la hoja excel y la tabla de ADF. Por eso primero vamos a agregar un control input Text. Arrastre el inputText a la página. Verifique el id del control, en este caso se creo el id it3.





image



En la paleta de estructura se debería reflejar lo siguiente :



image



17. Ahora asociaremos el botón “Pegar Contenido” con una rutina JavaScript. Para eso arrastraremos un control clientListener hacía el control commandMenuItem.



image



Verifique que tenga un resultado similar a lo mostrado a continuación.



image





Tenga en cuenta que se invoca a una función mostrarContenido pasando como parámetro el id del popup.




18. La función JavaScript tendrá la siguiente implementación.




function pegarContenido(popupId)
{
return function(evt)
{

var txtContenido = document.getElementById("it3::content");
txtContenido.focus();
txtContenido.select();

rangeExcel=txtContenido.createTextRange();
rangeExcel.execCommand("Paste");

}
}




Las dos últimas líneas sólo funcionan para IE y permiten obtener el contenido del portapapeles de wndows hacía el control inputText it3.




19. Probemos hasta este punto cual es el efecto en tiempo de ejecución.




image




Noté que el contenido ahora reside en el control inputText en la página. Lo que requerimos ahora es mover el contenido hacía la tabla ADF. Para eso usaremos un listener ligado a un botón. Para eso, arrastremos un button hacía la página y la asociamos al método “pegarDatos”




image











20. Implementamos el método en el backig bean.




public String pegarDatos() {
// Add event code here...

FacesContext ctx = FacesContext.getCurrentInstance();
DatosBean desarrolloBean = (DatosBean)ctx.getExternalContext().getSessionMap().get("datosBean");

EmpleadoBean empleado = desarrolloBean.getListaEmpleados().get(0);

StringTokenizer st = new StringTokenizer(it3.getValue().toString(), "\t");

empleado.setCodigo(st.nextToken());
empleado.setNombre(st.nextToken());

return null;
}




21. Finalmente, tenemos que modificar el javaScript “Pegar Contenido” para que posteriormente a la obtención de datos de la hoja excel, invoque al botón cb1, creado en el paso anterior.




function pegarContenido(popupId)
{
return function(evt)
{

var txtContenido = document.getElementById("it3::content");
txtContenido.focus();
txtContenido.select();


rangeExcel=txtContenido.createTextRange();
rangeExcel.execCommand("Paste");

var component = AdfPage.PAGE.findComponentByAbsoluteId("cb1");
AdfActionEvent.queue(component, component.getPartialSubmit());
}
}




22. El resultado final será el siguiente.




image

Thursday, 6 October 2011

Migracion a oracle webcenter

La charla de ahora es tips en migracion de otras plataformas a oracle webcenter. Primero se hace un repaso de las caracteristicas de webcenter.
Luego se hace un repaso de las principales caracteristicas que debe tener un portal, caracteristicas de personalizacion, seguridad, content repository etc.
Se comenta que si bien jdev es la herramienta para desarrollar el portal en el futuro se planea incluier estas funcionalidades a plugins de eclipse.
Inclusive se menciona que se puede publicar portlets de .net usando el estandar wrsp.
En cuanto a content managment se.menciona que la integracion ofrece capacidax para hacer chekcin checkout sobre los documentos workflows etc.
En compracion con otras tecnologias se destaca que oracle webxenter usa basicamente paginas jsf,mientras que otras tecnologias usan paginas generadas de manera dinamica o como el antiguo oracle portal usan paginas pl sql.
En cuanto a las busquedas se menciona que oracle usa sesel cual tiene apis que usan servicios para realizar las busquedas.
Como estrategia de migracion se menciona que para mitigar el riesgo se puede optar por reusar los portlets de manera gradual hasta tener el portal listo. Tambien se recomienda evitar las caracteristicas nativas del portal a migrar y alinearse al uso de estandares.


Wednesday, 5 October 2011

Aplicaciones mobiles hibridas con Adf.

Estas si es una novedad de la version 12 de jdeveloper. Las aplicaciones hibridas son una mezcla de una aplicacion que corren de manera local en los dispositivos mobiles pero que usan html y java script para generar su contenido. Ustedes se.preguntaran porque es importante esto?. Pues porque permite que la aplicacion use los recursos.del dispositivo mobil. : camara, lector de codigo de barras, generando codigo html ligero para poder ser presentado en el equipo. Entre los recursos que podria tomar del equipo mobilse incluye un bd standalone por ejemplo.
Esta funcionalidad estara disponible en la version 12 de jdeveloper que aun no tiene fecha de salida pero que comparto un par de fotos para que vean como sera el producto.



Monday, 3 October 2011

Webcenter administracion

Presentador cristina gibbons
Se indica algunas recomendacion de instalacions. 64 bit java development kit., instalar rcu,crear dominio, configurar servicios, etc.
Se indica que si.se hace un backup se tenga en cuenta data de servicios, metadata etc.
Se recomienda usar oam para el manejo de seguridad del portal.


Oracle webcenter content integration

Preentador . George Magessy
La charla de ahora es sobre web center y su integracion con ucm, se comenta la integracion tradional que era guardar el contenido html como documnentos de ucm.
Webcenfer content integration, donde se muestra como actualizar dinamicamente el.contenido del.portla desde el repositorio de ucm aplicandole templates predefinidos. La herramienta usada se llama site studio contributor. Se menciona como una nueva ventaja la aplicacion de mutiples regione con templates distintos en una misma pagina


Sunday, 2 October 2011

Adf methodology group - task flow

Presentador : Frank ninphus
primero se hace una introduccion sobre los adf task flows como el manejo de memoria, manejo declarativo de excepciones., save points. A continuacion se describe los tipos de taskflow. : unbounded y bounded, destacando la modularizacion que ofrece los del tipo bounded,capacidad para ser encapsulado como una libreia y aplicacion facil de seguridad
Sobre los bounded task flow, se comenta que tecnicamente definido en un xml y por lo tanto puede ser manejado declarativo, y si bien puede ser accedido directamente dede una url, debe ser.evitado por una cuestion de seguridad y siempre debe ser invocado desde otro flujo.
Recomienda manejar una exepxcion por cada bounded task flow. Apoyarse en los templates para facilitar esto.
Ahora se habla del scope de memeoria. Ademas de explicar los tipos application y sesion. La explicacion se concentra en los tipos pageflow para el manejo de.memoria en um flujo y el tipo view asociado a la ui que automaticamente se libera cuando se deja la ui. El tipo backinbean que es usado para los componentes declaratiovs.
Sobre las regiones,se realiza una demo arrastrando un flujo arrastrando hacia.una pagina convirtiendose en una region, cuando analisa los bindings menciona que para que la region se refresque es necesario que se defina en la propiedad refresh el valor ifneeded.De esta manera cada vez que cambie el valor de los parametros , la region se refrescara.
Finalmente habla sobtre los remote task flow, que es una novedad para mi. Estos flujos son deplegados en un server desligados a una aplicacion y pueden ser invocados desde una aplicacione externa via un get


Friday, 30 September 2011

Eventos

Como todos los años oracle me ha invitado a participar de su evento mas
importante , el oracle open world. En esta oportunidad hare la cobertura en linea asi que estoy seguro lo disfrutaran tanto como yo.
El evento empieza el domingo, pero oracle nos ha invitado hoy a una visita a sus instalaciones para mostrarnos como realiza sus pruebas de usabilidad a sus aplicaciones. Es decir, antes de lanzar sus aplicaciones, Oracle prueba que ellas sean sencillas e intuitivas a los usuarios finales. Una de las pruebas mostradas consistia en colocar a un usuario, calibrar su mirada para luego pedirle que ubique un dato solicitado al azar de la pantalla. Luego, se analiza la trayectoria de sus ojos y se mide que tan sencillo e intuitiva fue la pantalla. Puede verse la prueba en la foto que incluyo en este post.
Durante la reunion que nos brindo oracle, se nos adelanto algunos de los anuncios que se hara la proxima semana, lamentablemente no puedo contarles aun debido a una cuestion de confidenciabilidad ,pero les adelanto que tiene que ver con la.nube.




La semana pinta interesante, asi que le recomiendo estar atento a mi blog plinioa.blogspot.com y a la pagina
www.jdeveloperla.com pues publicare notas asociadas a adf.,webcenter,bpm y soa.




Desde san francisco




Plinio