Hola buenos días,
Después de probar y probar. He detectado con que tenía problemas. Yo quería pasar un parámetro para incluir en un where con IN.
Esta era la consulta inicial:
SELECT * FROM TABLA WHERE nombreCampo in $P!(parametroCampo)
El caso es que no me dejaba pasar un parámetro como una cadena. '1', '2', '3'. Ya que me indicaba que necesitaba una colección y no una cadena.
Por lo tanto necesitaba pasar los parámetros de la siguiente manera.
g:jasperReport jasper="sample-jasper-plugin" format="PDF" name="Parameter Collection Example">
<input type="hidden" name="parametroCampo" value="1"/>
<input type="hidden" name="parametroCampo" value="2"/>
</g:jasperReport>
Con la siguiente consulta:
SELECT * FROM TABLA WHERE $X{IN, nombreCampo, parametroCampo}
Pero claro tenía problemas porque no puedes tener una etiqueta jasperReport dentro de un form. Y yo necesito tener el otro form exterior, al menos eso creo porque intente hacerlo con un solo form y tenía problemas, supongo que se podrá hacer.
No funcionaba este codigo en el gsp
<div class="col-xs-12">
<button class="btn btn-success pull-right"
data-toggle="tooltip" data-placement="top" data-original-title="Informe"
type="submit" name="_action_generarInforme"
onclick="GetElements();">
<span class="glyphicon glyphicon-file"></span> Informe
</button>
</div>
Así que al final tengo el botón anterior con una llamada a un controller y el siguiente código en el controller que me genera el informe inline, integrado en el navegador.
def generarInforme(){
// ruta de donde guardo los reportes
def servletContext = ServletContextHolder.servletContext
def reportPath = servletContext.getRealPath('reports')
params.SUBREPORT_DIR = reportPath
// lista de ids de los alumnos de los que quiero generar el informe.
def alumnosJson = params['alumnosJson']
def slurper = new JsonSlurper()
def results = slurper.parseText(alumnosJson)
params.ID_ALUMNOS = results.id
def reportDef = new JasperReportDef(name:'calificaciones.jrxml',
fileFormat:JasperExportFormat.PDF_FORMAT,
parameters:params)
response.contentType = 'application/pdf'
response.outputStream << jasperService.generateReport(reportDef).toByteArray()
response.outputStream.flush()
response.outputStream.close()
return null
}
Estoy buscando como no generarlo integrado en el navegador, si alguien sabe, que tengo que cambiar.
Saludos.