sábado, 9 de mayo de 2009

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.jar
jasperreports-2.0.4.jar
jasperreports-extensions-1.3.1.jar
poi-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.

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:






















Ahora vamos al faces-config.xml y diseñamos la siguiente navegacion entre paginas:













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);
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.



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") +



                        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());

                                    }        



%>



<body >



</body>



</html>





Ejecutar la pagina index.jsp:



5 comentarios:

  1. Mira una pregunta te la hago porque miro que manejas bastante este programa, a nosotros nos dejaron hacer una aplicacion web con jsp y servlets pero de esto no se manejar nada aun, tonces para ver si no podes subir algun material que me sea de ayuda disculpa el abuso ya que yo se que no es para eso

    ResponderEliminar
  2. amigo disculpa la molestia a mi me dice que no encuentra el archivo... sera que me das una mano mi correo es gjmm1711@hotmail.com

    ResponderEliminar
  3. Oye el documento donde esta la Aplicacion completa en ADF utilizando Jdeveloper del mes de Enero la tendras disponible ya que cuando entro en este link solo me sale la introduccion, y ahorita necesito con urgencia entender ADF con BD en una aplicacion
    Gracias ojala y me puedas ayudar mi correo es:
    magadan_cm@hotmail.com

    ResponderEliminar
  4. ¿me podrías decir a que te referis con el backing?donde va el código este:
    FacesContext context = javax.faces.context.FacesContext.getCurrentInstance();
    HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
    session.setAttribute("p_id_orden",p_id_orden);
    return "dialog:jspreporte";

    ResponderEliminar
  5. hola, q tal soy nuevo con Jdeveloper y ireport, me parece bueno tu tutorial, me pregunto si dispones de la aplicación para poder guiarme, gracias y saludos.

    ResponderEliminar