31 de enero de 2009

Jasper Reports en WaveMaker

Algunos tips para realizar reportes en WaveMaker sobre Windows.
Para poder integrar JasperReports a tu aplicacion debes añadir en tu proyecto algunas librerias de jasper, las mas basicas son:
  • commons-digester-1.7.jar
  • itext-1.3.1.jar
  • jasperreports-3.0.0.jar
  • jasperreports-extensions-1.3.1.jar
En mi caso estas librerias las saque del IReport pero las versiones pueden ser diferentes.

Esto se debe hacer en la siguiente direccion: WaveMaker\Projects\EnNombreDeTuProyecto\lib

Luego podras crear tu java service para poder interactuar tu jrxml diseñado en mi caso con IReport.

Aqui mi java service para poder ver las conexiones y mi reporte exportado en PDF.


public class ReportGenerator {

public void getReport(String urlReporte,int nro) throws Exception {

Connection conn = null;
String url = "jdbc:postgresql://localhost:5432/";
String dbName = "tester";
String driver = "org.postgresql.Driver";
String userName = "postgres";
String password = "123456";
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url+dbName,userName,password);

Map parameters = new HashMap();
String par=String.valueOf(nro);
parameters.put("cod_pedido",new String(par));

URL fileUrl = this.getClass().getResource(urlReporte+".jrxml");
JasperDesign jasperDesign = JRXmlLoader.load(fileUrl.openStream());
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,parameters, conn);

JasperExportManager.exportReportToPdfFile(jasperPrint, "c:\\Documents and Settings\\usuario\\Mis documentos\\WaveMaker\\Projects\\ElNombreDeTuProyecto\\webapproot\\images\\"+urlReporte+".pdf");

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null) {
conn.close();
}
} catch(Exception e) {
}
}
}
Lugo obvimente te creas un serviceVariable enlazando con el java service anterior

Aqui lo importante, direcciono el reporte en PDF en una carpeta del proyecto

JasperExportManager.exportReportToPdfFile(jasperPrint, "c:\\Documents and Settings\\usuario\\Mis documentos\\WaveMaker\\Projects\\ElNombreDeTuProyecto\\webapproot\\images\\"+urlReporte+".pdf");


Y luego puedo abrirlo con un evento por ejemplo pulsando un boton.

imprimirEntregaSuccess: function(inSender, inData) {
window.open("images/mi_reporte.pdf");
},


Eso es todo espero ver muchos proyectos con jasper.

23 comentarios:

Eliecer Daza dijo...

Hola,
Pordrias, subir un punto zip de ejemplo con el proyecto, Seria de mucha utilidad, gracias!!!

Eliecer Daza dijo...

ya encontre este http://dev.wavemaker.com/forums/files/JasperReports.zip
lo chevere es que funciona

rolo dijo...

wow yo apenas estoy usando la herramienta y si considero que es una gran cosa,

me gustaria que nos pudieras enseñar un manual PASO a PASO de lo que hay que hacer si no e smucha molestia, estoy tratando de desentrañar el ejemplo que dejo Elin3t pero no logro darle no se pq pero no me genera ningun reporte, me falta mover algo lo puse mal ni idea, modiique la direccion de la DB a una que tengo el mismo data grid y todo pero no consigo anda espero puedas ayudarme

gracias

Eliecer Daza dijo...

Lo que sucede es que en la funcion que genera el reporte lo genera en c:/reporte.pdf, pero si no tienes todos abiertos (777) sobre la carpeta C: no se genera nada. lo ideal seria cambiar la direccion y crear una carpeta con todos los permisos (777) y hay si te funcionara,
Saludos

rolo dijo...

Elin perdona ayer cuando lo puse pues recien estaba aprendiendo a usarlo.

todo lo estoy desarrollando en mi pc. y sobre plataforma windows, asi que lo de los permisos no creo que sea.

ayer revisando el codigo del link que dejaste me di cuenta que lo que me faltaba era la base de datos y la configuracion con ella

en el codigo Java dentro del Wave Maker esta indicado un acceso a MySQL con user Root y password, algo que mi mysql no tiene pus no le eh definido un pass

luego apunta a una db no que no tengo creada, en fin ya hice eso, luego revise el JRXML y puestambien esta enlazada a una DB que no existe en mi motor, en pocas palabras era imposible que corra.

ahora estoy investigando como hacerlo

espero dar con ello pronto cuando lo haga hare un tutorial y lo pondre en el blog

aunque valoraria mucho tu ayuda en Java pues no conosco bien de programacion y menos de Java

Eliecer Daza dijo...

Que bueno, aunque lo de los permisos si puede ser problema, por lo menos en windows vista,
respecto a lo de java, en lo que te pueda ayudar....
estare atento a hacerlo...
saludos

rolo dijo...

si estas en linea aun, quiza pudieras darme tu msn y podrdriamos charlar tengo un proyecto en desarrollo y estoy atorado la verdad necesito mucha ayuda ojala pudieras hacerlo

rolo dijo...

o agregame tu el_tercer_profeta@hotmail.com

Eliecer Daza dijo...

mi msn es eliecerdaza7@hotmail.com o en gmail elin3t@gmail.com

saludos

Unknown dijo...

Gracias por colaborar en la comunidad de WaveMaker...en este foro hay mas informacion de JasperReports integrado con WaveMaker.. en los proximos dias integrare con subreportes una aplicacion con WaveMaker...

rolo dijo...

hola

necesito ayuda estoy trabado, ya busuqe por todo lado pero no logro dar con nada, espero que me puedan ayudar, quiero generar reportes pero en XLS lamentablemente no logro dar con la forma ojala puedan ayudarme
thanks

Eliecer Daza dijo...

encontré esta función tal vez te sirva. puedes agregarla al servicio java del ejemplo o crear un nuevo "java Service" y adaptarla, espero te sirva
/*
* Main.java
*
* Created on 17 de marzo de 2005, 8:56
*/

package reportload;

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.export.*;
import net.sf.jasperreports.engine.util.*;
import net.sf.jasperreports.view.*;
import java.sql.*;

import java.io.*;
import java.util.*;


/**
*
* @author DestruKtor
*/
public class Main {

/** Creates a new instance of Main */
public Main() {
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here

try
{

//Ruta de Archivo Jasper
String fileName="C:\\reports\\rep_cli.jasper";
//Ruta de archivo pdf de destino
String destFileNamePdf="C:\\reports\\rep_cli.pdf";
//Ruta de archivo xls de destino
String destFileNameXls="C:\\reports\\rep_cli.xls";

//Pasamos parametros al reporte Jasper.
Map parameters = new HashMap();
parameters.put("sql_query", new String("select * from clientes"));


//Preparacion del reporte (en esta etapa se inserta el valor del query en el reporte).
JasperPrint jasperPrint=JasperFillManager.fillReport(fileName, parameters, getConnection());

//Creación del PDF
JasperExportManager.exportReportToPdfFile(jasperPrint, destFileNamePdf);

//Creación del XLS
JRXlsExporter exporter = new JRXlsExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, destFileNameXls);
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporter.exportReport();

System.exit(0);
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}

/**Metodo para crear la conexion a DB*/
private static Connection getConnection() throws ClassNotFoundException, SQLException {
//Configuración de la conexión.
String driver = "org.postgresql.Driver";
String connectString = "jdbc:postgresql://192.168.1.7:5432/bdtest";
String user = "user";
String password = "123";

Class.forName(driver);
Connection conn = DriverManager.getConnection(connectString, user, password);

//Retornamos la conexión establecida.
return conn;
}

}

fuente: http://www.forosdelweb.com

Eliecer Daza dijo...

La clave de todo esta en esto:
OutputStream ouputStream
= new FileOutputStream(new File("C:/JasperReports/catalog.xls"));
ByteArrayOutputStream byteArrayOutputStream
= new ByteArrayOutputStream();
JRXlsExporter exporterXLS = new JRXlsExporter();
exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT,
print);
exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM,
byteArrayOutputStream);
exporterXLS.exportReport();
ouputStream.write(byteArrayOutputStream.toByteArray());
ouputStream.flush();
ouputStream.close();

Unknown dijo...

no olvidarse de poner el jar jxl.jar para generar archivos excel

rolo dijo...

este fue el avance que consegui, sorry por demorar en postearlo pero lo termine a las 4:00 AM y luego me dormi, y ahora que suspendieron mis clases lo posteo aca

los dos links

el proyecto------> http://www.settiperu.net/Downloads/WaveMaker/JasperReports.zip

la DB MySQL -------------> http://www.settiperu.net/Downloads/WaveMaker/Jasperdata.sql


solo consegui crear el archivo XLS pero no logro rellenarlo, de todas formas al hacer click en el boton generar crea los archivos Game.pdf y game.xls en la direccion C:/

rolo dijo...

bueno pues nada no consegui llenarlo hasta ahora, algo se me ocurrira

por otro lado, Manuel espero no te moleste pero implemente un blog para la Comunidad, habe si te das una vuelta y te inscribes para que me heches una mano :D espero que te animes, la invitacion tambien se extiende a ti Eliecer

rolo dijo...

jajaja me olvide darles el link jajajajaja

http://comunidadwm.settiperu.net/index.php

ese es el link del Blog, y el del foro es

http://comunidadwm.settiperu.net/forum/


los espero

Anónimo dijo...

hola! alguien tiene el proyecto aun? los enlaces no funcionan..gracias!

Unknown dijo...

hola que proyecto quieres asi te paso un link

Unknown dijo...
Este comentario ha sido eliminado por el autor.
Anónimo dijo...

nesecito una ayuda en wavemaker no logro hacer la conexion con el jasper por los parameters aun no logro encontrar como hacerlo porfa ayudenme.

adriana dijo...

Podrian ayudarme a crear la relacion de folio usuario.

Unknown dijo...

hola adriana podrias explicar mas acerca de relacion de folio usuario.

Mis cosas

Powered By Blogger