Hola. alguien tiene idea de como trabajar con JasperReport utilizando Hibernate como fuente de datos? Es decir obtener los datos de mi reporte desde clases del framework?
ideas, links, sugerencias...
| |||
Re: JasperReport + Hibernate Yo la unica sugerencia que puedo hacer, y es en general, es lo que yo hago/hice. Aprender a usar JasperReports con fuentes de datos XML y luego puedes aplicarselo a cualquier cosa que pueda generar XML... desde ficheros estáticos para pruebas a cualquier clase capaz de generar texto (formateandolo en XML, claro). S! |
| |||
Re: JasperReport + Hibernate Hola, q tal? Es simple. Tienes que tener en cuenta lo siguiente: 1. Ejecutar iReport usando iReport.bat que está ubicado en el directorio donde instalaste iReport. (esto es fundamental ya q con el .exe parece ser q no funciona según mi experiencia y lo que pude averiguar en internet) 2. Editar el CLASSPATH (Options > Classpath) y agregar lo siguiente:
3. Crear la conexion Hibernate. Para ello ir a Data > Connections/Data Sources, clickear en New y elegir Hibernate Connection. Luego ingresas el nombre que quieras a tu conexion. Presiona Test y si todo va bien te aparecerá un cuadro de diálogo avisandote que la conexion fue exitosa. En este caso iReport busca en el CLASSPATH el archivo de configruación de Hibernate (hibernate.cfg.xml) con el cual obtendrá los parámetros de configuración. 4. Listo! Solo resta crear tu Query HQL yendo a Data > Report Query. Elegir lenguaje HQL e ingresar cualquier sentencia HQL. Asegurate de tener clickeado el Check 'Automatically Retrieve Fields' para ver el resultado de la Query en el panel DER. Espero que les sirva. Te dejo el link del ejempli que me resulto muy útil: http://jtri.sourceforge.net/en/report/ireportHibernate.html" Código del Ej (iReport_with_hibernate-0.5.3.zip): http://sourceforge.net/project/showfiles.php?group_id=132623 Saludos! Seba. |
| |||
Respuesta: JasperReport + Hibernate Hola, soy algo nueva en esto pero me gustaría poner lo que he desarroyado ya que a mi me costó un montón obtener información y al final como a veces pasa salió solo. Quería utilizar jasperreport con hibernate y obtener un pdf, en este caso lo obtengo que se pueda guardar o no, y quería que la query se incorporara dentro del pdf no hacerla con el ireport, os diré paso a paso lo importante. 1. Podemos hacer el jrxml desde ireport sin ningún problema pero OJO MUY IMPORTNTE los nombres de los field y de los textFieldExpression tienes que ser los mismos que en el name que tenemos mapeado y en el bean para obtenerlo, pongo unas lineas para que lo veais: jrxml:<field name="valor" class="java.lang.String"/> ... <textFieldExpression class="java.lang.String"><![CDATA[$F{valor}]]></textFieldExpression> hbm.xml(mapeo) <property name="nombre" type="java.lang.String" column="dom_nombre_tx" length="20" /> <property name="valor" type="java.lang.String" column="dom_valor_tx" length="20" /> Esto es lo mas importante para que los valores nos salgan en el reporte y por último hice una clase para obtener los bytes y sacarlo en el pdf os pongo todo junto aunque es un struts y tiene distintas partes. //sitio donde yo tengo mis jrxml public static final String REPORTE_IMPORTE = "/report/prueba_Mano.jrxml"; public static byte[] sacarReporte(String tipoReporte) throws ClassNotFoundException, SQLException, JRException { JasperDesign dis enioReporte; JRDesignQuery queryReporte; //Ruta de Archivo Jasper Reporte reporte = new Reporte(); String fileName; byte[] bytes = null; //hibernateUtil es una clase propia que me devuelve un SessionFactory Session session = HibernateUtil.getSessionFactory().getCurrentSessio n(); session.beginTransaction(); //UsuarioBean es donde tengo los geter y seter, para esto si hay ejemplos //por lo que no me estiendo List usuarios = session.createQuery("from UsuarioBean").list(); fileName = reporte.Path(REPORTE_IMPORTE); //cargamos el archivo disenioReporte = JRXmlLoader.load(fileName); //lo compilamos JasperReport report = JasperCompileManager.compileReport(disenioReporte) ; //obtenmos de forma adecuada los valores de las select para incorporalos. JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(usuarios); //HibernateQueryResultDataSource ds = new HibernateQueryResultDataSource(usuarios,campos); //obtenemos lo que vamos a sacar bytes = JasperRunManager.runReportToPdf(report, parameters, ds); return bytes; } //método para obtener el path del archivo public String Path(String tipoReporte) { URL url = this.getClass().getResource(tipoReporte); return url.getPath(); } } Una vez obtenido esto lo saco mi metodo es. public void imprime(HttpServletResponse response, String tipoReporte) throws Exception { byte[] bytes = Reporte.sacarReporte(tipoReporte); if(bytes!=null){ // Con esta sentencia hacemos que se pueda descargar el archivo y guardarlo pero sin extensión //response.setContentType("application/x-download"); //convertimos el archivo en pdf y nos pregunta que queremos hacer y lo abrimos o lo guardamos en pdf response.setHeader("Content-Disposition", "attachment; filename=informe.pdf" ); //Si solo ponemos esta parte de código nos saldrá el archivo en pdf directamente response.setContentLength(bytes.length); OutputStream ouputStream = response.getOutputStream(); ouputStream.write(bytes, 0, bytes.length); ouputStream.flush(); ouputStream.close(); } try{ System.out.println("El reporte está escrito"); } catch (Exception e){ System.out.println("error"); } } Espero que les sirva |