Imagenes de datos repetitivos en iReport (3.0.0)

Este breve alcance de documento busca detallar, en simples pasos, cómo mostrar imágenes de datos repetitivos. Un ejemplo de uso es cuando tenemos una grilla de archivos adjuntos asociadas a ciertos registros.

 

1) Disponer de la herramienta iReport 3.0.0, asegurarse de que esté conectado a una fuente de datos.

2) Disponer de la herramienta Editor de Formularios - NODUM.

3) Disponer de una tabla de datos de formato repetitivo (puede ser también de formato singular).

4) Establecer controles adjuntos a nivel de formularios, con una ruta relativa o absoluta.

5) Almacenar el nombre del adjunto en un campo de la tabla.

6) Formatear la ruta fija de los parámetros generales junto con la ruta del paso 4, enviar como parámetro dicha ruta.

7) Utilizar un ImageBox en IReport que lea el path enviado junto con el nombre del adjunto almacenado en la base de datos.

 

Los pasos están detallados en la respuesta técnica.

 

Este breve alcance de documento busca detallar, en simples pasos, cómo mostrar imágenes de datos repetitivos. Un ejemplo de uso es cuando tenemos una grilla de archivos adjuntos asociadas a ciertos registros.

 

1) Disponer de la herramienta iReport 3.0.0, asegurarse de que esté conectado a una fuente de datos.

2) Disponer de la herramienta Editor de Formularios - NODUM.

3) Disponer de una tabla de datos de formato repetitivo (puede ser también de formato singular).

 

Ejemplo de tabla singular:

cpt_tabla (nro_trans, cod_tit, cod_docum, nro_docum, fec_doc, descripcion)

Ejemplo de tabla repetitiva:

cpp_tabla (nro_trans, cod_tit, cod_doca, nro_doca, doc_adjunto, ayuda_adjunto)

(a nivel de herramientas de formularios usamos dos bloques, uno en formato singular para la cpt_tabla, otro en formato de grilla (repetitivo) para la cpp_tabla).

Nota: el control que utilicemos para el archivo adjunto debe ser un VARCHAR de al menos 4000 caractéres.

 

4) A nivel de formularios, debemos disponer de un control adjunto. Es importante que éste cuente con un servicio de inicializadorRuta, esto es para almacenar los adjuntos de forma organizada en el servidor de aplicaciones. Un ejemplo:

Servicio InicConcatenar - parámetro String = 'Carpeta';'\';'@G.G1.cpt_tabla:cod_docum';'@G.G1.cpt_tabla:nro_docum

Con esto logramos generar una carpeta madre en la carpeta "archivos" del servidor de aplicaciones, creando una subcarpeta segun cod_docum + nro_docum.

 

5) Debemos guardar el nombre del adjunto en un control de la tabla base para almacenar el nombre del archivo adjunto (para esto utilizaremos el campo "ayuda_adjunto"), dicho control lo almacenaremos con un servicio InicConsulta con la siguiente SQL (créditos a Alejandro Muñoz):

SELECT RIGHT((SELECT SUBSTRING(@G.G2.cpp_tabla:doc_adjunto, 
                CHARINDEX('"archivo":"', @G.G2.cpp_tabla:doc_adjunto) + LEN('"archivo":"'), 
                CHARINDEX('"', @G.G2.cpp_tabla:doc_adjunto, CHARINDEX('"archivo":"', @G.G2.cpp_tabla:doc_adjunto) + LEN('"archivo":"')) - CHARINDEX('"archivo":"', @G.G2.cpp_tabla:doc_adjunto) - LEN('"archivo":"')) ), 

CHARINDEX('/', REVERSE((SELECT SUBSTRING(@G.G2.cpp_tabla:doc_adjunto, 
                CHARINDEX('"archivo":"', @G.G2.cpp_tabla:doc_adjunto) + LEN('"archivo":"'), 
                CHARINDEX('"', @G.G2.cpp_tabla:doc_adjunto, CHARINDEX('"archivo":"', @G.G2.cpp_tabla:doc_adjunto) + LEN('"archivo":"')) - CHARINDEX('"archivo":"', @G.G2.cpp_tabla:doc_adjunto) - LEN('"archivo":"')) ))) - 1) 

AS aux

 

6) Enviar una path relativa (o absoluta) como parámetro al reporte:

Para tomar el path y enviarlo como parámetro debemos tomar el valor de la ruta fija (configurable en NODUM) + el valor de la ruta relativa (o absoluta). El valor de la ruta relativa será el mismo valor que indicamos en el paso 4.

Para tomar el valor de la ruta fija utilizamos un control auxiliar con un servicio InicConcatenar y un servicio InicConsulta embebido, consultando el valor_gral de la gl_param_grales donde el parámetro sea "camino_copia_arc". Luego de cerrar el embebido debemos concatenar también la ruta relativa fijada en el paso 4.

'$InicConsulta[SELECT valor_gral FROM gl_param_grales WHERE param_gral = 'camino_copia_arc']$';'\';'Carpeta';'\';'@G.G1.cpt_tabla:cod_docum';'@G.G1.cpt_tabla:nro_docum

 

Luego debemos utilizar otro auxiliar más, para sustituir los  '\' por '\\' luego de haber cargado el auxiliar anterior. Esto se debe a que Java utiliza el caracter '\' como código reservado para otras instrucciones del lenguaje.

SELECT REPLACE('@G.G1.ct_auxformulario:nom_aux2', '\', '\\').

 

Ya tendremos listo el Path para enviarlo por un servicio EjecucionReporte, llamando al NJR que utilizamos para almacenar el jrxml.

 

7) Armado del reporte:

Ya tenemos todo listo para armar el reporte, necesitaremos un parámetro para recibir el path (parmPath en este caso), recibir el nombre del archivo adjunto que guardamos anteriormente en la tabla (recibirlo como campo) (paso 5) y un elemento ImageBox. Tanto el parámetro como el campo a recibir deben ser de tipo String.

 

Nos ubicamos en la ImageBox y lo declaramos con el tipo java.io.File.

En la expresión del mismo indicamos = new File($P{parmPath}, $F{ayuda_adjunto}).


Descargar o Imprimir


¿TE SIRVIÓ ESTE ARTÍCULO?