Tutorial de Jaspersoft iReport 5.6.0 utilizando Oracle PL-SQL y ejecutando el Reporte desde aplicación Java web con Primefaces. Parte 1.
Para este Tutorial vamos a utilizar Jaspersoft iReport Designer v5.6.0, Oracle PL-SQL para la base de datos y obviamente Java para ejecutar nuestro reporte en formato PDF, dicho reporte lo vamos a ejecutar desde una aplicación web con Primefaces, vamos a explicar cómo funciona este asunto primero.
Jaspersoft iReport es un diseñador para JasperReports, como sabemos JasperReports es una librería escrita totalmente en Java con la cual podemos crear informes de diferentes tipos, puedes crear/construir un archivo y exportarlo, puedes exportar archivos en varios formatos como por ejemplo: excel, word, xml, pdf, etc. En este Tutorial nos vamos a centrar en la creación de un archivo en .pdf.
Por que deberías usar Jaspersoft iReport?? Primero si eres un programador Java te comento que está hecho 100% en código Java, es de fácil manejo, no tienes que instalar nada, solo se descarga y comienzas a usarlo, aparte de eso es poderoso y fácil de usar, posee múltiples funciones para agregar cuadros de texto, párrafos, separadores, imágenes, sub-reportes, tablas, etc, todo lo que puedas imaginar que lleva un informe en PDF con iReport puedes hacerlo y aparte de eso puedes hacer tu conexión a la base de datos con JDBC y hacerle consultas a la misma ya sea con sql o llamando a un Stored Procedure y los registros que retorne puedes mostrarlos en el reporte, ya quedaron atrás esas librerías en las que uno redactaba todo el contenido del informe dentro del mismo código Java.
Imagina que haces un reporte con esa librería utilitaria en código Java y quieras cambiar una pequeña parte del informe después que el sistema ya paso a producción, bueno tampoco es que es muy difícil, buscar de nuevo dentro del código la parte que quieres editar, hacer el cambio, las pruebas y después coordinar otro pase a producción, un poco fastidioso no?? En fin con iReport solo buscas el archivo que exportaste y lo editas directamente ahí sin tener que tocar tu código Java lo que es una mejor practica de programación.
Jaspersoft iReport es un diseñador para JasperReports, como sabemos JasperReports es una librería escrita totalmente en Java con la cual podemos crear informes de diferentes tipos, puedes crear/construir un archivo y exportarlo, puedes exportar archivos en varios formatos como por ejemplo: excel, word, xml, pdf, etc. En este Tutorial nos vamos a centrar en la creación de un archivo en .pdf.
Por que deberías usar Jaspersoft iReport?? Primero si eres un programador Java te comento que está hecho 100% en código Java, es de fácil manejo, no tienes que instalar nada, solo se descarga y comienzas a usarlo, aparte de eso es poderoso y fácil de usar, posee múltiples funciones para agregar cuadros de texto, párrafos, separadores, imágenes, sub-reportes, tablas, etc, todo lo que puedas imaginar que lleva un informe en PDF con iReport puedes hacerlo y aparte de eso puedes hacer tu conexión a la base de datos con JDBC y hacerle consultas a la misma ya sea con sql o llamando a un Stored Procedure y los registros que retorne puedes mostrarlos en el reporte, ya quedaron atrás esas librerías en las que uno redactaba todo el contenido del informe dentro del mismo código Java.
Imagina que haces un reporte con esa librería utilitaria en código Java y quieras cambiar una pequeña parte del informe después que el sistema ya paso a producción, bueno tampoco es que es muy difícil, buscar de nuevo dentro del código la parte que quieres editar, hacer el cambio, las pruebas y después coordinar otro pase a producción, un poco fastidioso no?? En fin con iReport solo buscas el archivo que exportaste y lo editas directamente ahí sin tener que tocar tu código Java lo que es una mejor practica de programación.
Ya que este Tutorial es un poco largo lo voy a dividir en 2 partes:
- Parte 1: Configuración y creación del reporte en Jaspersoft iReport y creación de la tabla y el Stored Procedure en Oracle PL-SQL.
- Parte 2: Creación de la aplicación Java web con Primefaces para ejecutar el reporte.
Una vez que tienes la carpeta descomprimida navegas hasta el archivo iReport.exe que esta en este directorio: iReport-5.6.0>bin>ireport.exe.
Si quieres creas tu acceso directo apuntando al .exe o simplemente ejecutas desde ahí mismo el iReport.
Al momento de iniciar iReport esta es la pantalla de bienvenida:
- Name: conexion-plsql.
- JDBC URL: aquí vamos a copiar nuestra cadena de conexión a Oracle.
- Username: el nombre de usuario para acceder a tu base de datos.
- Password: la clave para tu nombre de usuario.
Nota: para saber cuál es tu cadena de conexión ingresa a tu PL-SQL Developer y navega hasta: Help>Support Info>TNS names, buscas el tuyo y anotas el alias o descriptor, host o ip y el puerto. Así se escribe la cadena de conexión: jdbc:oracle:thin:host:puerto:alias, si la base de datos esta en tu maquina local puedes poner: @localhost.
Algo así tiene que quedar:
Para este Tutorial vamos a crear una tabla de alumnos que vamos a llamar
DATO_JAVA_ALUMNOS
con estos registros: id_alumno, dni y nombre. Asi creamos la tabla en PL-SQL:
create table DATO_JAVA_ALUMNOS ( id_alumno NUMBER, dni INTEGER not null, nombre VARCHAR2(20) )Ahora vamos a insertar unos cuantos alumnos en esa tabla, 3 registros:
insert into DATO_JAVA_ALUMNOS DJA (DJA.ID_ALUMNO, DJA.DNI, DJA.NOMBRE) values (1, 12345678, 'JOSE'); insert into DATO_JAVA_ALUMNOS DJA (DJA.ID_ALUMNO, DJA.DNI, DJA.NOMBRE) values (2, 21158225, 'JULIANA'); insert into DATO_JAVA_ALUMNOS DJA (DJA.ID_ALUMNO, DJA.DNI, DJA.NOMBRE) values (3, 85285269, 'MANUEL');Una vez que tenemos 3 alumnos en la base de datos podemos hacer un Stored Procedure básico para traernos a todos los alumnos y así poder ejecutar el mismo desde iReport. Recuerda que una buena práctica de programación es crear el Stored Procedure dentro de un package y su especificación. El package lo vamos a llamar
PKG_DJ_ALUMNOS
. Así creamos el package body, su especificación y el Stored Procedure:
/*Creamos la especificacion*/ CREATE OR REPLACE PACKAGE PKG_DJ_ALUMNOS AS /*Declaramos un cursor para devolver los datos*/ TYPE RESULT_SET IS REF CURSOR; PROCEDURE BUSCAR_TODOS_ALUMNOS(o_result_set OUT RESULT_SET); END PKG_DJ_ALUMNOS; /*-----------------------------------------------*/ /*Creamos el body*/ CREATE OR REPLACE PACKAGE BODY PKG_DJ_ALUMNOS IS PROCEDURE BUSCAR_TODOS_ALUMNOS( o_result_set OUT RESULT_SET ) AS BEGIN OPEN o_result_set FOR SELECT * FROM DATO_JAVA_ALUMNOS ORDER BY NOMBRE; END BUSCAR_TODOS_ALUMNOS; END PKG_DJ_ALUMNOS;Una vez que tenemos hecho todo esto en PL-SQL vamos crear el reporte, como dije anteriormente vamos hacer algo básico, un titulo y los datos de los alumnos que tenemos en la base de datos que acabamos de crear. Al momento de presionar el icono en el paso 2 nos aparece esta pantalla:
ResultSet
y así cuando hagamos la llamada al Stored Procedure podamos pasar este parámetro creado del mismo tipo. Para crear el parámetro en iReport vamos a la ventana Report Inspector
en la opción de Parameters presionamos clic derecho y elegimos la opción Agregar Parameter, seleccionamos el parámetro creado y presionamos la opción Propiedades ubicada en el lado superior derecho, o desde el menú Ventana, ahí vamos a cambiar las propiedades del mismo por:
- Name: P_CURSOR.
- Parameter Class: java.sql.ResultSet.
- Use as a prompt: desactivado.
Nota: por cada parámetro que reciba un Stored Procedure o un query normal tienes que crear un parámetro en el iReport del mismo tipo.
Ahora hay que crear los campos que están en el cursor, el cursor devuelve los campos ID_ALUMNO, DNI y NOMBRE, vamos a crear los campos en el iReport con el mismo nombre para poder mostrarlo en el reporte. Para agregar un campo vamos a la ventana Report Inspector, en la opción Fields presionamos el clic derecho y elegimos la opción Agregar Field, seleccionamos el campo creado y vamos a sus propiedades y le cambiamos el nombre, la clase no hace falta cambiarla en esta ocasión, tienes que crear 3 campos que se llamen igual que los campos que están en el cursor:
- ID_ALUMNO.
- DNI.
- NOMBRE.
Ahora en la misma ventana Report Inspector seleccionamos el reporte reporteAlumnosdatoJava y presionamos el clic derecho y seleccionamos la opción Edit Query
- Query language: aquí vamos a elegir la opción plsql ya que es el lenguaje que estamos utilizando.
- Llamada al SP: "{call usuario.pkg_dj_alumnos.buscar_todos_alumnos($P{P_CURSOR})}", usuario es tu nombre de usuario en Oracle PL-SQL, hacemos la llamada pasando el parámetro que creamos antes P_CURSOR.
- Resultados Esperados: presionamos el botón Preview Data.
Nota: cuando agregamos los campos que devuelve el cursos automáticamente se agrega un label con el nombre del campo, ese label lo situamos en el espacio que dice Column Header, tenemos que acomodar el reporte para que queden bien situados los campos, al título le cambie el tamaño de la letra. El espacio Detail 1 lo puse más pequeño para que a la hora de imprimir el reporte se vea mejor.
Cada vez que compilas el reporte de iReport se crean dos archivos, en el directorio que elegimos antes, si ya están creados se reemplazan. Con esto ya tenemos el reporte listo en iReport, ahora solo nos falta ejecutar dicho reporte desde Java que es lo que viene en la parte 2 de este Tutorial. Seguir con el Tutorial
me sale error tipo de columna no valido
ResponderEliminarAmigo Jose, ese es un error de la base de datos. Si explica un poco mas el error podría ayudarlo mejor.
EliminarSuerte.
es problema de la sentencia create en el procedimiento, yo no perdi tiempor en resolverlo, pero puedes selecionar SQL en lugar de plsql y armas tu query que al final lo que deseas ver es como te arma el reporte no?
ResponderEliminarya luego haces tu pl real y lo corres en la bd si te funciona alli ya lo manejas como este ejemplo plsql
Hola jmariom,
EliminarTienes razón, ese podría ser uno de los problemas, como no especifica como ocurre el error, que motor de BD utiliza, etc... Puede ser por varios motivos.
Gracias por comentar,
Suerte.
Muy buena explicación y excelente página, muchas gracias.
ResponderEliminarExcelente Victor, gracias por comentar!
Eliminar