20 de noviembre de 2009

JasperReports con DownloadResponse

Version mejorada de Reportes en Jasper devolviendo con DownloadResponse para llamarlo desde una url


import com.*;
import org.hibernate.Session;
import com.wavemaker.runtime.RuntimeAccess;
import com.wavemaker.runtime.server.DownloadResponse;
import java.net.URL;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
import org.springframework.mail.javamail.ConfigurableMimeFileTypeMap;

public class GeneradorReporte extends com.wavemaker.runtime.javaservice.JavaServiceSuperClass {
public DownloadResponse getReport() throws Exception {
DownloadResponse ret=new DownloadResponse();
ConfigurableMimeFileTypeMap mimeFileTypeMap = new ConfigurableMimeFileTypeMap();
try {
//para recoger la conexion de la base de datos
Dbescolar service = (Dbescolar) RuntimeAccess.getInstance().getService(Dbescolar.class);
service.begin();
Session session = service.getDataServiceManager().getSession();
//para enviar parametros al reporte
/*Map parameters = new HashMap();
parameters.put("id_facultad",new Integer(id_facultad));
parameters.put("facultad",facultad);*/
//mi direccion del archivo de jasper
URL fileUrl = this.getClass().getResource("mirepo.jasper");
//para cargar el jasper
JasperReport report2 = (JasperReport)JRLoader.loadObject(fileUrl);

//para cargar: la conexion de la base de datos al reporte, parametros y el archivo jasper
JasperPrint jasperPrint = JasperFillManager.fillReport(report2,null,session.connection());
//exportar el proyecto a PDF
ByteArrayOutputStream out = new ByteArrayOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, out);
//para cargar el PDF como un respuesta de descarga
ret.setContentType(mimeFileTypeMap.getContentType("mirepo.pdf"));
ret.setContents(new ByteArrayInputStream(out.toByteArray()));
ret.setFileName("mirepo.pdf");
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}

}


y lo puede llamar con el link
"services/GeneradorReporte.download?method=getReport"

y en tu navegador seria
http://localhost:8094/miproyecto/services/GeneradorReporte.download?method=getReport


Espero que les sirva




4 comentarios:

Unknown dijo...

Hola Mavirroco, Excelente código!!
y video. Lo único es el audio, es un poco bajo pero si te pones audifonos mejora mucho!

Una precisión al código del ejemplo, cuando estaba realizandolo me costo un poco de trabajo ya que al cambiar el nombre de la bd del ejemplo (Dbescolar) por el que estaba usando me compilaba con errores.
El nombre que estaba utilizando era sas que es el nombre de mi servicio de bd; y al compilar me daba el error de "Clase No Encontrada".

Para solucionarlo vi que por alguna extraña razón cuando WM guarda la clase del servicio de BD la primera letra la pone en mayúscula, por lo que el nombre queda Sas y eso lo soluciono!.

Entonces la linea queda asi: "Sas service = (Sas) RuntimeAccess.getInstance().getService(Sas.class);"

Gracias por la ayuda!!

Unknown dijo...
Este comentario ha sido eliminado por el autor.
Unknown dijo...

gracias ossad espero poder ver por lo menos un screenshot de tu aplicacion...saludos

Unknown dijo...

gracias ossad espero poder ver por lo menos un screenshot de tu aplicacion...saludos

Mis cosas

Powered By Blogger