Publicando un Reporte
Dado que los reportes ya no viven en nuestra instalacion particular sino que se encuentran en un servidor, es necesario publicarlos para dejarlos disponibles a todos quienes quieran hacer uso de ellos.
Este proceso de publicación en algunos casos involucra la transformación de esos recursos, como asi tambien que los mismos esten ubicados correctamente y con todos sus componentes accesibles.
En general los pasos para publicar un reporte serian:
- Crear los recursos para los assets involucrados
- Crear los recursos para las imagenes involucradas
- Crear el recurso para el reporte
Cada uno de esos pasos va a devolver identificadores para los recursos que acabamos de crear, por lo que es necesario guardarlos ya que los mismos seran necesarios ya sea para especificar en otros recursos o para poder ejecutar un reporte.
Assets
Los assets son archivos que seran utilizados por el reporte, los mismos pueden ser hojas de estilo, documentos html, archivos de datos, etc.
En particular, los subreportes se convierten en un asset que sera consumido por el reporte general de forma tal que los mismos se deben suministrar via este mecanismo, inclusive el mismo fuente del reporte se puede proporcionar asi.
Suponiendo que tenemos un archivo que deseamos utilizar para nuestros reportes, el contenido a enviar seria:
{
"proyecto": "Imhotep",
"id": "Pustulas",
"uri": "/reportes/Imhotep/fuenteReportes/fuenteHechizos.jrxml",
"archivo": {
"uri": "/reportes/Imhotep/fuenteReportes/fuenteHechizos.jrxml",
"tipo": "jrxml",
"data": base64encode(file_get_contents("/path/to/archivo.jrxml")),
"temporal": 0
}
}
Luego nuestro pedido será similar a:
curl -X POST "http://siu:81/reportes/v2/archivos" -H "accept: application/json" -H "Content-Type: application/json" -d "@./docs/ejemplos/jasper/addFile/descriptor.json"
Si todo funciona correctamente, se nos devolverá el identificador del archivo en un JSON
{
"uri": "/reportes/Imhotep/fuenteReportes/fuenteHechizos.jrxml"
}
Imagenes
Las imagenes son un asset tambien, pero a diferencia de los archivos no se especifica su tipo durante la creacion sino que simplemente se indica el contenido y su identificador.
El ejemplo mas comun para un reporte seria incrustar el logo de la institucion o del sistema, el cual podriamos agregar de la siguiente forma:
{
"proyecto": "Imhotep",
"id": "logo.jpg",
"uri": "/reportes/Imhotep/imagenes/logo.jpg",
"imagen" : {
"uri": "/reportes/Imhotep/imagenes/logo.jpg",
"data": base64encode(file_get_contents("/path/to/logo.png"))
}
}
Luego nuestro pedido será similar a:
curl -X POST "http://siu:81/reportes/v2/imagenes" -H "accept: application/json" -H "Content-Type: application/json" -d "@./docs/ejemplos/jasper/addImg/descriptor.json"
Esto a su vez si funciona correctamente, se nos devolverá el identificador del archivo en un JSON
{
"uri": "/reportes/Imhotep/imagenes/logo.jpg"
}
Publicando Reportes
Suponiendo que ya tenemos nuestros assets cargados y nuestras imagenes tambien, lo siguiente es armar la estructura del reporte de la forma correcta. Esto significa que debemos asegurarnos que los recursos que utiliza estan bien direccionados en su definicion, tal como mencionamos aquí.
Lo que queda entonces luego es publicarlo, para ello presentaremos la siguiente estructura al recurso reportes
:
{
"proyecto": "Imhotep",
"id": "Hechizados",
"uri": "/reportes/Imhotep/Hechizos/Hechizados",
"source" : {
"uri": "/reportes/Imhotep/Hechizos/flsafhsafs",
"data": base64encode(file_get_contents("/path/to/hechizos.jrxml"))
}
}
Los campos existentes en source
pueden aparecer simultaneamente o unicamente data
, en este ultimo caso se generara un nombre y uri
automaticamente para el contenido enviado, de otra forma se utilizara el provisto por uri
.
"source" : {
"data": base64encode(file_get_contents("/path/to/hechizos.jrxml"))
}
Nuestra invocación entonces quedaria de la siguiente forma:
curl -X POST "http://siu:81/reportes/v2/reportes" -H "accept: application/json" -H "Content-Type: application/json" -d "@./docs/ejemplos/jasper/addReport/item_list/descriptor.json"
En caso de ser correctos los datos proporcionados, esto es.. que el jrxml tenga todos sus recursos bien direccionados, etc.. se nos devolvera una estructura JSON con el siguiente contenido.
{
"uri": "/reportes/Imhotep/Hechizos/Hechizados"
}
Este será el identificador a utilizar al momento de ejecutar el reporte y proporcionarle los datos, por lo cual es necesario que el mismo se guarde en el sistema de forma de poder realizar el mapeo entre el codigo y lo que necesita el servidor de reportes.