viernes, 22 de noviembre de 2013

Generar Reporte en Ireport sin JSP !!! =)

Hola!!!

En esta Ocasión deben tener ya conocimientos de como realizar un reporte en ireport en el caso que no sea así pueden revisar este enlace http://www.javatutoriales.com/2009/02/creacion-de-reportes-con-jasperrepots-y.html que me parece que esta muy bien explicado pero al final indica con jsp.

La Entrada del día de hoy es genial... me surgió la necesidad de hacerlo debido a que necesitaba enviar un parámetro de tipo Date al jasper pero  el JSP me trajo demasiado inconvenientes.
Entonces para que el código no se me pierda a continuación les explicaré:
Antes debieron ver realizado el respectivo reporte en el ide Ireport y ver generado ya su archivo jasper.

Lo primero que debemos de indicar es establecer nuestra conexión dependiendo de la base, para el ejemplo es con Informix.

                Connection con = null;
    Connection conn = null;
   try {
                     Class.forName("com.informix.jdbc.IfxDriver");
   }
   catch (ClassNotFoundException e) {
     System.out.println("MySQL JDBC Driver not found.");
     System.exit(1);
   }
                  try {
   
     conn = DriverManager.getConnection("indicar el Driver ejm. jdbc:informix-sqli://"direccion sea localhost o la ip/"nombreBase": INFORMIXSERVER="nombreServidor","usuario","clave"");
     conn.setAutoCommit(false);
   }

Luego establecemos cuales serán los parámetros que enviaremos al jasper lo haremos a través de un Map, en este enlace le explican bien detallados sobre este tipo de Colección  http://java67.blogspot.com/2013/02/10-examples-of-hashmap-in-java-programming-tutorial.html

Map parameters = new HashMap();
      parameters.put("valorInicial", this.montoInicial);
parameters.put("bodega", this.bodega);
parameters.put("item", new String(this.item);
parameters.put("fechaInicio",this.diaDesde);
parameters.put("repartoSesion", repartoSesion);
parameters.put("fechaFin",this.diaHasta);

A continuación tenemos que añadir lo siguiente:

ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
ServletContext context = (ServletContext) externalContext.getContext();

Ahora el archivo de la plantilla del reporte no se encuentra en la raiz del proyecto, sino dentro del directorio web, debemos indicar la ruta completa en la que se encuentra este archivo.

JasperReport reporte = (JasperReport) JRLoader.loadObjectFromFile(context.getRealPath("/reportes/kardex.jasper"));
JasperPrint print = JasperFillManager.fillReport(reporte, parameters, conn);

Luego Exportamos nuestro Reporte al directorio web:
JasperExportManager.exportReportToPdfFile(print,context.getRealPath("/reportes/kardex.pdf"));

Finalmente mostramos nuestro Reporte:
 request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print);  
response.sendRedirect(request.getContextPath()+"/reportes/kardex.pdf");
FacesContext.getCurrentInstance().responseComplete();



Este es el código Completo:

public void generarReporte(){
try{
//CARGAMOS EL DRIVER
Connection con = null;
    Connection conn = null;
   try {
     Class.forName("com.informix.jdbc.IfxDriver");
   }
   catch (ClassNotFoundException e) {
     System.out.println("MySQL JDBC Driver not found.");
     System.exit(1);
   }
   //Para iniciar el Logger.
   //inicializaLogger();
   try {
   
     conn = DriverManager.getConnection("jdbc:informix-sqli://123456:1526/BASE:INFORMIXSERVER=ol_nt_desa","USUARIO","CLAVE");
     conn.setAutoCommit(false);
   }
   catch (SQLException e) {
     System.out.println("Error de conexión: " + e.getMessage());
     System.exit(4);
   }

   try {
   
   
    Map parameters = new HashMap();
      parameters.put("valorInicial", this.montoInicial);
parameters.put("bodega", new String(this.bodegaDescripcion.getBode_codi().toString()));
parameters.put("item", new String(this.remove1(item.toString())));
parameters.put("fechaInicio",this.diaDesde);
parameters.put("repartoSesion", repartoSesion);
parameters.put("fechaFin",this.diaHasta);
parameters.put("usuario", this.remove1(this.datos.getUserName()));
parameters.put("cantidadInicial",this.cantidadInicial);
parameters.put("descripcionBodega", this.bodegaDescripcion.getBode_codi()+" - "+this.remove1(this.bodegaDescripcion.getBode_desc()));
ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
ServletContext context = (ServletContext) externalContext.getContext();
JasperReport reporte = (JasperReport) JRLoader.loadObjectFromFile(context.getRealPath("/reportes/kardex.jasper"));
JasperPrint print = JasperFillManager.fillReport(reporte, parameters, conn);


     // Exporta el informe a PDF.
JasperExportManager.exportReportToPdfFile(print,context.getRealPath("/reportes/kardex.pdf"));
 // PERMITE VISUALIZAR EL REPORTE EXPORTADO.
//ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, print);  
    response.sendRedirect(request.getContextPath()+"/reportes/kardex.pdf");
FacesContext.getCurrentInstance().responseComplete();

 //Para visualizar el pdf directamente desde java
// JasperViewer.viewReport(print, false);
return;
 
   }
   catch (Exception e) {
     e.printStackTrace();
   }
   finally {
     /*
      * Cleanup antes de salir
      */
     try {
       if (conn != null) {
         conn.rollback();
         System.out.println("ROLLBACK EJECUTADO");
         conn.close();return;
       }
     }
     catch (Exception e) {
       e.printStackTrace();
     }
   }
}catch (Exception e) {
System.out.println("Error en Generar Reporte"+e);
}


No duden en comentar!!!  Espero les sirva =)

miércoles, 6 de noviembre de 2013

Utilizar confirm para afirmar una accion o cancelarla.

<a4j:commandLink
ajaxSingle="true" id="deleteRec2_ID"
onclick="if(!confirm('SEGURO DESEA ELIMINAR EL RECLUTAMIENTO SELECCIONADO')){return false};"
action="#{recMB2.eliminarListRec}" reRender="dt_detRec_ID,mensajesformulario"
limitToList="true">
<rich:toolTip value="Eliminar Reclutamiento" for="deleteRec2_ID" />
<h:graphicImage value="/images/icons/eliminarReclut.jpg"
style="border:0;width : 25px; height : 27px;" />
<f:setPropertyActionListener value="#{objVar}"
target="#{recMB2.recSeleccionado}"></f:setPropertyActionListener>
</a4j:commandLink> 


asi se hace, si sale, x su mardita desjracia no les sarga!.