Ya explicado todo creo que viene lo mas importante, pasar los parámetros al reporte para que este imprima valores según preguntas que se le hagan al usuario, como debe ser en los reportes, para ello seguimos las líneas de la Parte II del tutorial y ubicados en el inspector hacemos click en "Parameters" y agregamos uno nuevo (Add Parameter), le colocamos el nombre que queramos y modificamos nuestra consulta SQL colocando al final la condición WHERE.
El String "MiValor" agrega al método la cadena para mappearla al parámetro del reporte, con "parametro.put('nombre_del_parametro',MiValor)" es que agregamos este valor, para agregar mas parametro simplemente agregamos mas líneas y mas variables al método, por ejemplo.
SELECT campos FROM mitabla WHERE campo = $P{MiParametro}Y una vez establecido el SQL cambiamos el código anterior con una pequeña variante, haremos un retorno de String para saber el valor del parámetro indicado, el código sería el siguiente.
package reportes; import java.sql.*; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.*; import net.sf.jasperreports.view.save.JRPdfSaveContributor.*; import net.sf.jasperreports.view.JRViewer.*; import net.sf.jasperreports.view.save.JRMultipleSheetsXlsSaveContributor.*; /** * * @author Carlos Martinez */ public class IniciarReporte { Connection conn; public IniciarReporte(){ try { Class.forName("org.gjt.mm.mysql.Driver"); conn = DriverManager.getConnection(URL_MYSQL,USUARIO_MYSQL,CLAVE_MYSQL); } catch (SQLException ex) { Logger.getLogger(IniciarReporte.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(IniciarReporte.class.getName()).log(Level.SEVERE, null, ex); } } public void MiConsultaN(String MiValor){ try{ String archivo = System.getProperty ("user.dir")+"\src\reportes\MiReporte.jasper"; System.out.println("Cargando desde: " + archivo); if(archivo == null){ JOptionPane.showMessageDialog(null,"Error al generar reporte, verifique impresoran", "Generar Reporte",JOptionPane.ERROR_MESSAGE); } JasperReport masterReport= null; try { masterReport= (JasperReport) JRLoader.loadObject(archivo); } catch (JRException e) { System.out.println("Error cargando el reporte maestro: " + e.getMessage()); JOptionPane.showMessageDialog(null,"Error al generar reporte, verifique impresoran","Generar Reporte",JOptionPane.ERROR_MESSAGE); } Map parametro= new HashMap(); parametro.put("nombre_del_parametro",MiValor); JasperPrint jasperPrint= JasperFillManager.fillReport(masterReport,parametro,conn); JasperViewer jviewer= new JasperViewer(jasperPrint,false); jviewer.setTitle("Titulo de mi Reporte"); jviewer.setVisible(true); }catch (Exception j){ System.out.println("Mensaje de Error:"+j.getMessage()); } } }Y al igual que antes lo podemos llamar de la siguiente forma:
IniciarReporte jasper = new IniciarReporte(); jasper.MiConsultaN("MiValorString");Claro, para obtener este valor podemos utilizar un JTextField, un dialogo o cualquier otra cosa que se nos ocurra, ya lo demas queda a nuestra creatividad e imaginación.
El String "MiValor" agrega al método la cadena para mappearla al parámetro del reporte, con "parametro.put('nombre_del_parametro',MiValor)" es que agregamos este valor, para agregar mas parametro simplemente agregamos mas líneas y mas variables al método, por ejemplo.
public void MiConsultaN(String Valor1,String Valor2,String Valor3){ //...Resto del código parametro.put("parametro1",Valor1); parametro.put("parametro2",Valor2); parametro.put("parametro3",Valor3); //...Resto del códigoCon esto ya estamos listos para generar los reportes. Ya hasta aquí llega este tutorial de como generar reportes en java... suerte!!
Recibe notificaciones por correo
8 Comentarios
Escribir ComentarioGracias!!!:)
Responder@007
Respondergracias carlitox por tu aporte es muy bueno, y gracias a el pude solucionar un problema que tenia al generar reportes con mas de un parametro... muy buen aporte... espero sigas asi...
hola, me parece interesante lo del ireport, pero tengo una consulta como lo haria con java web, he hecho una vista preliminar con java e ireport de los registros de mi pagina, el problema es que solo se ejecuta desde el servidor y no del lado del cliente, me han dicho que puedo hacerlo con un applet, pero no se nada de eso. Porfa si tienen algun comentario o posible solucion ;-|. Help
Respondermmmmm.... bueno, puedes hacer la siguiente prueba, en donde indicas la ruta del reporte debes utilizar path relativo, es decir:
RespondergetClass().getResource().getPath() o getFile() [según sea el caso]
Colocalo todo dentro del mismo paquete desde el cual ejecutas la clase que genera el reporte, si no funciona coméntame y probamos otra cosa...
En cuanto a lo del applet no entendí.... Un applet es un programa escrito en java que corre desde el navegador, por lo que si es una app web entonces es un applet, si no mal recuerdo es así... Prueba y comenta, saludos!
Gracias mi estimado carlitox esto es muy util y bueno solo para avisar nadamas que le falta cambiarle esto:
ResponderJasperPrint jasperPrint= JasperFillManager.fillReport(masterReport,null,conn);
por esto:
JasperPrint jasperPrint= JasperFillManager.fillReport(masterReport,parametro,conn);
le faltaba pasar el parametro al reporte, me imagino que se te ha de ver pasado je je pero exelente aporte carlitox saludos.
Muy cierto, ya corrijo el error, debí enviar los parámetros y de esa forma solo envió un reporte sin parámetro alguno, gracias!!
ResponderNunca lo corrigio O.o
ResponderJasperPrint jasperPrint= JasperFillManager.fillReport(masterReport,null,conn);
Muy bueno el aporte D:
Corregido =)
ResponderLamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.
Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión