lunes, 31 de octubre de 2016

Aceptando valores nulos como parámetros en jasper report

A continuación se explica como hacer para aceptar valores nulos como parámetros en un reporte :

Se plantea la situación en la cual tenemos que hacer un listado de documentos y uno de los parámetros es el  número, creamos un parámetro llamado número y parte de la consulta seria la siguiente :

AND documento.numero = $P!{numero}

ahora si se pasa como parámetro de número el valor null el reporte nos mostrara una lista en blanco ya que ningún número de documento sera null, entonces lo que debemos hacer es lo siguiente:

creamos un nuevo parametro llamado numero_query y le ponemos como DEFAULT VALUE EXPRESSION lo siguiente :

  $P{numero}==null  ? " true": "documento.numero=".concat($P{numero}.toString())

En este caso solo validamos el valor null pero cada uno lo puede adaptar a sus necesidades validando otros valores como "".

Luego reemplazamos

AND documento.numero = $P!{numero}

por

AND $P!{numero_query} 

lunes, 1 de febrero de 2016

Mostrar pdf en iframe usando angularjs recibido de un api rest usando spring (@RestController ) + jasper report

Exportar reporte a pdf stream

byte[] response = null;
JasperPrint jasperPrint = reporteRepositorio.generarReporte(reportName,parameters);

if (TipoFormatoExportacion.STREAM.getValue().equals(formatType)) {

ByteArrayOutputStream baos = new ByteArrayOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, baos);
response=baos.toByteArray(); 

}

return response;

Controlador rest

@RequestMapping(method = RequestMethod.GET)
public void generarReporte(HttpServletRequest request,HttpServletResponse response) {

Map<String, Object> parameters = new HashMap<String, Object>();
try {
byte[] contents = reporteServicio.generarReporte("reportName",
TipoFormatoExportacion.STREAM.getValue(), parameters);
OutputStream os = response.getOutputStream();
response.setHeader("Content-Disposition", "inline; filename=file.pdf");
   response.setContentType("application/pdf");
response.setStatus(HttpServletResponse.SC_OK); 
response.setHeader("Cache-Control","private, must-revalidate, post-check=0, pre-check=0, max-age=1");
response.setHeader("Pragma","public");
os.write(contents);
os.close();
} catch (JRException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

Fragmento html
<iframe id="visualizador"></iframe>
Controlador angularjs
$http.get(CONFIG.API_URL + "/" + namereport + "/" + params, { responseType: 'arraybuffer' })
    .success(function (data) {
        if (data) {
          var file = new Blob([data], {type: 'application/pdf'});
          var url = URL.createObjectURL(file);
        }
     document.getElementById('visualizador').setAttribute('src',url);   
}).error(function (error) {});