Llamar un report desde un gsp

294 views
Skip to first unread message

Ismael

unread,
Jan 20, 2017, 9:55:04 AM1/20/17
to grailsEnCastellano
Muy buenas he visto varias formas de llamar un report.

<g:jasperReport jasper="calificaciones" inline="true" format="PDF" name="Todas las Notas"/>

<a href="../jasper/?_format=PDF&_name=notas&_file=calificaciones">PDF</a>

Pasando datos y parámetros:
chain(controller: "jasper", action: "index",
model: [data: Calificacion.list()],
params: params)

Me pregunto si quiero invocar un informe en el que quiero utilizar el query del informe y pasar los parámetros con el chain dejando el model vacío tengo problemas. ¿Cómo tengo que hacerlo?. Alguien me hecha un cable.

Tengo el siguiente error si dejo el model vacío.

Error 500: Internal Server Error

URI
/jasper/index
Class
groovy.lang.MissingMethodException
Message
No signature of method: static org.codehaus.groovy.grails.plugins.jasper.JasperExportFormat.message() is applicable for argument types: (java.util.LinkedHashMap) values: [[code:jasper.controller.invalidFormat, args:[...]]] Possible solutions: isCase(java.lang.Object)

Iván López

unread,
Jan 20, 2017, 10:02:50 AM1/20/17
to grailsEnCastellano
Hola,

Yo no he usado jasper reports y no conozco cómo se comporta en taglib g:jasperReport. En cualquier caso, si quieres ejecutar algo desde una GSP lo suyo es llamar a una acción de un controller que llame a un servicio y ejecute lo que sea.

Saludos, Iván.

--
Has recibido este mensaje porque estás suscrito al grupo "grailsEnCastellano" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a grailsencastellano+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a grailsencastellano@googlegroups.com.
Visita este grupo en https://groups.google.com/group/grailsencastellano.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Message has been deleted

Ismael

unread,
Jan 29, 2017, 5:49:18 AM1/29/17
to grailsEnCastellano
Gracias Iván por la recomendación. Si los controladores cuanto más limpios mejor y la lógica de negocio en los servicios.

compile ":jasper:1.6.1"
runtime ':jasper:1.6.1'

Veo por internet dos opciones pero no encuentro la intermedia que es la que necesito:

Primera opción:
Llamada al reporte sin paramétros y con la consulta embebida en la misma consulta, no hacer falta pasar datos.


Segunda opción:
Llamada al reporte pasando una colección de datos y paramétros pero sin la consulta embebida en el reporte. (Yo por mi cuenta pruebo a dejar una consulta embebida y falla al llamarlo y sin ella funciona)

Ejemplo: http://ironicprogrammer.blogspot.com/2009/09/creating-jasper-reports-in-grails.html

Y yo quería poder pasar paramétros pero utilizar la consulta embebida del reporte para pasar un parametro que hace la consulta del reporte dinámica, como aquí comenta http://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v60/using-parameters-queries

Y de momento no consigo que me funcione, si alguien me puede dar algo de luz.
Para publicar en este grupo, envía un correo electrónico a grailsenc...@googlegroups.com.

Ismael

unread,
Feb 6, 2017, 9:23:48 AM2/6/17
to grailsEnCastellano
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.

Ismael

unread,
Feb 6, 2017, 11:22:11 AM2/6/17
to grailsEnCastellano
Me auto respondo.

Tengo que poner el header. He visto hay dos métodos.

response.setHeader("Content-Disposition", 'attachment; filename="mifichero.pdf"')

o

response.addHeader("Content-Disposition", 'attachment; filename="mifichero.pdf"')
Reply all
Reply to author
Forward
0 new messages