Publicando un Reporte de manera All in One
Tal como vimos la publicacion de un reporte involucra varios pasos, hay situaciones en las cuales no es posible llevar adelante todos esos pasos de forma ordenada porque el reporte se construye dinamicamente casi por completo.
Para dichos casos puntuales, existe un mecanismo por el cual se puede realizar la incorporacion de los elementos en un solo pedido.
Suponiendo que ya tenemos toda la estructura del reporte en un solo archivo jrxml, lo que quedaria es publicarlo junto con los assets que necesitemos.
Para ello presentaremos la siguiente estructura al recurso reportes:
{
"proyecto": "Imhotep",
"id": "HechizosOnTheFly",
"uri": "/reportes/Imhotep/hechizosFly",
"source" : {
"uri": "/reportes/Imhotep/hechizosFly/helloWorld",
"data": base64encode("xml_sobre_el_poncho")
},
"archivo": {
"uri": "/reportes/Imhotep/fuenteReportes/cabeceraDinamica.jrtx",
"tipo": "jrtx",
"data": base64encode("xml_estilos")),
"temporal": 0
},
"imagen": {
"uri": "/reportes/Imhotep/imagenes/QR.png",
"data": base64encode("QR_img"),
}
}
curl -X POST "http://siu:81/reportes/v2/reportes" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"proyecto\": \"Imhotep\",
\"id\": \"HechizosOnTheFly\", \"uri\": \"/reportes/Imhotep/hechizosFly\", \"source\" : { \"uri\": \"/reportes/Imhotep/hechizosFly/helloWorld\", \"data\": base64encode(\"xml_sobre_el_poncho\")}, \"archivo\": {\"uri\": \"/reportes/Imhotep/fuenteReportes/cabeceraDinamica.jrxml\",\"tipo\": \"jrxml\",\"data\": base64encode(\"xml_cabeceraDinamica\")), \"temporal\": \"1\" }, \"imagen\": { \"uri\": \"/reportes/Imhotep/imagenes/QR.png\", \"data\": base64encode(\"QR_img\"),}}"
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/hechizosFly"
}
Este será el identificador a utilizar al momento de ejecutar el reporte y proporcionarle los datos, probablemente al ser un caso generado en el momento quizas no necesite almacenarse si se va a utilizar en el pedido GET inmediatamente posterior.
Una versión muy sencilla de este esquema, la podemos generar vía el siguiente comando:
curl -X POST "http://siu:81/reportes/v2/reportes" -H "accept: application/json" -H "Content-Type: application/json" -d "@./docs/ejemplos/jasper/addReport/hello_world/descriptor.json"
