reportes en j developer parte 1 y 2

27
Reportes en JDeveloper - Parte 1 Hola amigos, en esta oportunidad haremos una aplicacion con reportes, claro esta utilizando Jasper and IReport, para ello utilizaremos lo siguiente: JDeveloper 10.1.3.4.0 IReport 2.0.4 1. El esquema que utilizare es algo sencillo, a ver: El codigo sql : CREATE TABLE TBAREA ( IDAREA NUMBER NOT NULL, DESAREA VARCHAR2(100), FECHACREACION DATE ) ; CREATE TABLE TBPERSONAL (

Upload: steven-gomez

Post on 02-Dec-2014

7.031 views

Category:

Technology


6 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Reportes En J Developer   Parte 1 Y 2

Reportes en JDeveloper - Parte 1

Hola amigos, en esta oportunidad haremos una aplicacion con reportes, claro esta utilizando Jasper and IReport, para ello utilizaremos lo siguiente:

JDeveloper 10.1.3.4.0

IReport 2.0.4

1. El esquema que utilizare es algo sencillo, a ver:

El codigo sql :

CREATE TABLE TBAREA(IDAREA NUMBER NOT NULL,DESAREA VARCHAR2(100),FECHACREACION DATE);CREATE TABLE TBPERSONAL(IDPERSONAL NUMBER NOT NULL,PERNOMBRE VARCHAR2(100),PERPATERNO VARCHAR2(100),PERMATERNO VARCHAR2(100),DIRECCION VARCHAR2(100),IDAREA NUMBER

Page 2: Reportes En J Developer   Parte 1 Y 2

);ALTER TABLE TBAREAADD CONSTRAINT TBAREA_PK PRIMARY KEY(IDAREA)ENABLE;ALTER TABLE TBPERSONALADD CONSTRAINT TBPERSONAL_PK PRIMARY KEY(IDPERSONAL)ENABLE;ALTER TABLE TBPERSONALADD CONSTRAINT TBPERSONAL_TBAREA_FK1 FOREIGN KEY(IDAREA)REFERENCES TBAREA(IDAREA) ENABLE;

2. Configurar el IReportDebemos tener a la mano el driver de oracle (ojdbc14.jar) y colocarlo en la carpeta /home/JasperSoft/IReport-2.0.4/lib

Si no lo tienen cerca el driver, pueden buscarlo dentro de las librerias de su JDeveloper.Ahora abriremos el IReport, y deben darle clic a options/classpathAparecera esta ventana:

Page 3: Reportes En J Developer   Parte 1 Y 2

Dar clic al boton add Jar, buscar el driver oracle que antes pegamos en la carpeta lib del IReport.

Ahora darle clic al menu Data / Connections - Datasources

Aparecera una ventana , debes darle clic al boton "new".

En la nueva ventana seleccionar "Database JDBC Connection" y darle al next!

La parte final de la configuracion, deberas colocar los parametros de tu conexion, en mi caso es el siguiente:

Page 4: Reportes En J Developer   Parte 1 Y 2

Eso finaliza nuestra parte de configurar el IReport con nuestro Oracle.

3. Ahora vamos a darle clic al menu File / new DocumentLe damos un nombre y unas caracteristicas adicionales a nuestro reporte.

Page 5: Reportes En J Developer   Parte 1 Y 2

Dar clic al menu Data / Report Query , ahora digitaremos un query sencillo:

SELECT A."DESAREA",P."PERNOMBRE",P."PERPATERNO",P."PERMATERNO",P."DIRECCION",P."IDAREA" AS P_IDAREA,P."IDPERSONAL" AS P_IDPERSONAL,A."IDAREA" AS A_IDAREA,A."FECHACREACION" AS A_FECHACREACION

Page 6: Reportes En J Developer   Parte 1 Y 2

FROM"TBPERSONAL" P INNER JOIN "TBAREA" A ON P."IDAREA" = A."IDAREA"WHEREa.idarea= $P{idlocal}

Si nos fijamos el query tiene un parametro, asi que vamos a la parte inferior derecha del IDE, en el panel de "document structure" y le damos clic derecho parameters/add.

El nombre de nuestro parametro es IDLOCAL y el tipo de dato por defecto sera String.

Hasta este punto asegurese de guardar todos los cambios.

En el "document structure" es factible ver todos los elementos de la plantilla reporte que tenemos.

Dentro del elemento "pageHeader" agregamos un objeto tipo staticText, y le damos de texto "REPORTE DE PERSONAL", para modificar las fuentes, tamaño del texto, puede ver en la parte derecha el panel de properties.

El diseño del reporte es sencillo, si desea puede agregar una imagen como logo, o tambien un rectangle que haga mas vistoso el titulo, en este caso agregare un rectangle y dentro de el colocare un static text, con el texto "AREA". Al costado de este static text, arrastrare desde el document structure el FIELD "DESAREA".

En la plantilla tambien del reporte, tambien existe el componente "columHeader", aqui procederemos a colocar static text que representen titulos de campo de toda informacion que se imprimira.

Finalmente nuestro reporte tendria esta forma:

Page 7: Reportes En J Developer   Parte 1 Y 2

Como notara los campos "FIELDS" se han colocado en la parte denominada "detail", mientras que los titulos de los campos van en la parte de "ColumHeader".

Ejecutar : menu build/ execute (with active connection)

(procure que el parametro idlocal tenga activada la opcion "use a promt")

Page 8: Reportes En J Developer   Parte 1 Y 2

En la carpeta principal del IReport, notara que se ha generado el archivo : mi_reporte_javix.jrxml

Este archivo es el que utilizaremos para generar los reportes en pdf o excel desde el JDeveloper.

Publicado por Javix en 18:36 3 comentarios

miércoles 25 de marzo de 2009

Nuevos Elementos del Blog!!

Hola amigos, esta semana he agregado dos nuevos elementos al blog, uno que nos permite ver que visitantes tenemos y otro un chat dinamico, espero seguir teniendo sus comentarios, ah mi proxima entrega sera sobre reportes, saludos!Gracias! Publicado por Javix en 10:20 5 comentarios

jueves 12 de marzo de 2009

Page 9: Reportes En J Developer   Parte 1 Y 2

Web Services y ADF (part 2 cliente)

En este segundo post respecto de web services, veremos la parte del cliente, que mecanismos debemos hacer para poder invocar una web service.La aplicacion cliente en este caso es swing y cada cierto tiempo, dependiendo de la necesidad, el usuario utilizara esta web service.

1. En nuestro proyecto anterior(el de la web service part 1) generamos un archivo descriptor llamado AppModuleService.wsdl , este archivo debemos copiarlo desde este proyecto y pegarlo en un directorio de nuestro proyecto cliente, preferible en el view.

2. Teniendo este archivo descriptor en una carpeta de nuestro proyecto, procedemos a darle clic derecho al proyecto view / new , seleccionar Web Services/Web Services Proxy, tal como aparece en la figura:

Page 11: Reportes En J Developer   Parte 1 Y 2

4. En el siguiente paso podemos seleccionar la opcion, si es el caso, que nuestra web service se esta ejecutando desde un servidor externo.

Page 12: Reportes En J Developer   Parte 1 Y 2

5. Luego de finalizado el asistente, el ide nos cargara directamente una clase( la clase AppModuleServiceSoapHttpPortClient ) con un public static void main, que esta invocando a la web service.

Se puede notar en la imagen como es que sea crea el objeto myPort mediante este objeto invocamos los procedimientos de la web service, por ejemplo : myPort.miMetodoWebService(parametros). Publicado por Javix en 9:39 0 comentarios Etiquetas: jdeveloper en español, Swing Web Service, Web service en ADF, Web service JDeveloper

sábado 21 de febrero de 2009

Web Services y ADF

Hola de nuevo, que dias de verano intensoss, hace falta una tarde de playa y viento fresco, me espera cerro azul.Bien a lo que vinimos, las web services, al principio pense que seria uno de esos temas largos, pero realmente es sencillo, tanto la programacion de la web service en si, como tambien la invocacion posterior de este servicio en un cliente.Para este caso, primero les explico el contexto del problema y la solucion urgente que me solicitaron, si no el negocio se venia abajo.

Teniamos problemas con nuestro proveedor de internet, asi que en este caso nuestro portal iba y venia y en el camino se detenia, bueno y tenemos muchos locales(clientes) que necesitan del portal para poder registrar su informacion.

Asi que era necesario desarrollar una aplicacion local para cada cliente que permitira registrar la data, en una base mysql(cada cliente tendria su propia bd), claro , tambien debia de actualizarse mediante web services el inventario de estas bases de datos locales mysql.

Page 13: Reportes En J Developer   Parte 1 Y 2

Bueno al final del dia, el aplicativo local de cada cliente, debia de subir todo lo registrado desde la bd mysql hacia la base de datos central oracle.Claro nuestra base de datos central es Oracle, entonces la web service debia ser invocada por cada cliente para subir toda esta data.

Solucion.1. Herramientas y FrameworkIDE JDeveloper 10Oracle 10g (para servidor central)Mysql 5 (para clientes externos) ADF BC (inevitable el blog trata sobre esto, pero realmente se podria tambien desarrollar con DAO o EJB).Swing (El aplicativo local para cada cliente lo desarrolle en swing)

2. Procedimiento.Bueno a desarrollar la web service:2.1 Crear un proyecto con el template de ADF BC, colocarle de nombre WebService:

2.2 Ahora, debemos crear las EntityObject y ViewObjects que creamos convenientes, para esta demo solo creare una ViewObject en tiempo de ejecucion que se encargara de leer un campo de una tabla determinada, y luego almacernarlo en un array. Todo este procedimiento debemos programarlo en el AppModule, tal como sigue:

public ArrayList getTraerDatos(){

ArrayList lista=new ArrayList();

Page 14: Reportes En J Developer   Parte 1 Y 2

String sqlsec="select miCampo from miTabla";

ViewObject vsec = this.createViewObjectFromQueryStmt("",sqlsec);

while(vsec.hasNext()){Row row=vsec.next();lista.add(row.getAttribute(0));}

vsec.clearCache();return lista;

}

2.3 Bueno ahora debemos de colocar este procedimiento como visible por los clientes a nivel de AppModule, por ello:

2.4 Ahora vamos a crear la web service, darle clic al check de "remoteable Application Module" y luego darle doble clic al AppModule y en la opcion Remote, seleccionar "J2EE WebService", debera tener finalmente la siguiente vista:

Page 15: Reportes En J Developer   Parte 1 Y 2

2.5 Luego de darle aceptar, vamos a notar que aparece los siguientes elementos claves:

a) El deploy (WebServices.deploy) necesario que subiremos a nuestro servidor web.b) El archivo XML (AppModuleService.wsdl) que tiene la especificacion de nuestra web service y que necesitara el cliente para poder recibir los servicios.

2.6 Debemos levantar el OC4J embebido que tenemos por defecto, (otra opcion seria ya levantarlo directamente en un servidor web), ir a la carpeta raiz de nuestro JDeveloper,clic a JDEV y luego al bin!, para terminar darle doble clic start_ocj4.bat

2.7 Se levanta una consola, que solicita una contraseña, escribir "welcome" y listo, el servicio esta levantado.

2.8 Bueno crearemos una conexion a nuestro oc4j desde el JDeveloper, vamos a la seccion de "Connections", clic derecho a la carpeta "Application Server", nuestra conexion la vamos a nombrar "CNLocal" luego seguimos el asistente, en el paso 2 nos solicita un

Page 16: Reportes En J Developer   Parte 1 Y 2

user y un password, el user por defecto es "oc4jadmin", de contraseña le colocamos "welcome":

Dar next, al siguiente asistente , dar clic al boton "test" y si todo ha sido correcto en nuestra configuracion nos dara un success!!, finalmente clic al boton terminar

2.9 Para deployar nuestra web service en el oc4j, volvemos a nuestro proyecto en JDeveloper y le damos clic derecho al archivo WebServices.deploy, seleccionamos Deploy to/ "CNLocal".

Luego de este paso ya nuestro servicio web debe estar publicado y visible por los usuarios de nuestra red.

2.10 Como paso final vamos a visualizar la web service, darle doble clic al archivo: AppModuleService.wsdl , en la parte final del codigo xml aparece:

Ese atributo location nos muestra una direccion web que debemos copiar y pegar en nuestro navegador:

Page 17: Reportes En J Developer   Parte 1 Y 2

Reportes en JDeveloper - Parte 2

Hola amigos, en esta segunda parte veremos como gestionar los archivos jasper desde JDeveloper y como pasar los parametros que necesita el reporte.Debemos copiar desde la carpeta lib de nuestro IReport, los siguientes jar :

itext-1.3.1.jarjasperreports-2.0.4.jarjasperreports-extensions-1.3.1.jarpoi-2.5.1-final-20040804

Luego pegarlos en la carpeta WEB-INF/lib de nuestro proyecto web.En la lista podemos ver las librerias itext y el poi, estas librerias nos serviran para los reportes en pdf y excel respectivamente.

Page 18: Reportes En J Developer   Parte 1 Y 2

Debemos crear una carpeta dentro del WEB-INF, su nombre sera "reports", al interior de este carpeta pegaremos el archivo mi_reporte_javix.jasper (recuerde que este archivo lo generamos en el anterior articulo), este archivo se encuentra en la carpeta principal de su IReport.

Vamos al proyecto ViewController darle doble clic y agregaremos las librerias,darle clic al boton add Jar/Directory

Finalmente quedaria de esta manera:

Page 20: Reportes En J Developer   Parte 1 Y 2

Tenemos dos paginas , la navegacion tiene el nombre de "dialog:jspreporte".El diseño de la pagina index.jsp seria el siguiente:

Modifique las siguientes propiedades del boton "Generar Reporte":useWindow="true"windowHeight="800"windowWidth="600"

Debe capturar el valor del selectonechoice que almacena el area luego cargarlo como variable session a idarea.Programacion del boton "generar reporte" en el backing:

FacesContext context = javax.faces.context.FacesContext.getCurrentInstance();HttpSession session = (HttpSession) context.getExternalContext().getSession(false);

Page 21: Reportes En J Developer   Parte 1 Y 2

session.setAttribute("idarea",idarea);return "dialog:jspreporte";

Para generar el reporte necesita una conexion a una base de datos, en este caso se puede tomar la conexion existente del datasource original, o tambien crear una propia conexion a la base de datos, optaremos por esta opcion, entonces debera crear una clase "OracleDBConn".

package com.javix.pe.model.db;

import java.sql.Connection;import java.sql.DriverManager;import javax.naming.InitialContext;import javax.sql.DataSource;public class OracleDBConn {/***Registramos el driver*/static {try {Class.forName("oracle.jdbc.driver.OracleDriver");} catch (Exception e) {System.out.println("Ocurrió un problema con el driver\n" + e);}}/*** Obtiene una conexión a la Base de Datos.*/public Connection getConexion() {Connection connection = null;try {connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","blog","blog");} catch (Exception e) {System.out.println("Ocurrió un problema al obtener la conexión\n" + e);}return connection;}}

Continuando ya se tiene el archivo reporte, la clase de conexion, ahora falta la pagina que soportara el reporte, para este ejemplo ejecutaremos un reporte en pdf y al dar clic al boton "generar reporte" automaticamente debera aparecer una ventana emergente mostrando un pdf con la informacion solicitada.

Page 22: Reportes En J Developer   Parte 1 Y 2

Para ello debemos programar la pagina reporte.jsp con el siguiente codigo:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http  :// www . w3 . org/TR/html4/loose.dtd">

<%@ page import="net.sf.jasperreports.engine.*" %> <%@ page import="net.sf.jasperreports.engine.design.*" %> <%@ page import="net.sf.jasperreports.engine.data.*"%> <%@ page import="net.sf.jasperreports.engine.export.*"%> <%@ page import="net.sf.jasperreports.engine.util.*"%> <%@ page import="net.sf.jasperreports.view.*"%> <%@ page import="net.sf.jasperreports.view.save.*"%> <%@ page import="java.sql.*"%> <%@ page import="java.util.*" %> <%@ page import="java.io.*" %> <%@ page contentType="text/html;charset=windows-1252"%>

<html> <head><title>Reporte Javier Calizaya!</title> <script language="JavaScript"> function regresar(){

            history.back();

}

function error(){

            alert("Error encontrando procesando el periodo: " + periodo);

            history.back();

}

</script> </head>

<%

try{         com.javix.pe.model.db.OracleDBConn objDBConn =new com.javix.pe.model.db.OracleDBConn() ;

         Connection conn = null ;

        conn = objDBConn.getConexion();

            System.setProperty("jasper.reports.compile.class.path",application.getRealPath("/WEB-INF/lib/jasperreports-2.0.4.jar") +

Page 23: Reportes En J Developer   Parte 1 Y 2

                        System.getProperty("path.separator") +

                        application.getRealPath("/WEB-INF/classes/")

                        );

            System.setProperty(

                        "jasper.reports.compile.temp",

                        application.getRealPath("/reports/")

                        );

            File reportFile = new File(application.getRealPath("/reports/mi_reporte_javix.jasper"));

            Map parameters = new HashMap();

            javax.faces.context.FacesContext context = javax.faces.context.FacesContext.getCurrentInstance();

            parameters.put("idlocal",session.getAttribute("idarea").toString());

            byte[] bytes =JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,conn);

            response.setContentType("application/pdf");

            response.setContentLength(bytes.length);

            ServletOutputStream ouputStream = response.getOutputStream();

            ouputStream.write(bytes, 0, bytes.length);             ouputStream.flush();            ouputStream.close();

                                   }catch (JRException e)

                                   {System.out.println("Error:" +e.getMessage());}

                                   catch (Exception e)

                                   {

                                   e.printStackTrace();

                                   System.out.println("Error2:" +e.getMessage());                                     }        

Page 24: Reportes En J Developer   Parte 1 Y 2

%>

<body ></body></html>

Ejecutar la pagina index.jsp: