Tutorial de Jaspersoft iReport 5.6.0 utilizando Oracle PL-SQL y ejecutando el Reporte desde aplicación Java web con Primefaces. Parte 1.

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: Si ya posees una versión anterior te recuerda que puedes importar la configuración del diseñador anterior. Lo que deberíamos hacer ahora es seguir los pasos, el primer paso habla de la conexión a la base de datos, como dije anteriormente vamos a utilizar una base de datos de Oracle PL-SQL, así que necesitamos hacer la conexión mediante JDBC, para eso nos descargamos el driver de PL-SQL de la página oficial de Oracle, este es el .jar que tenemos que descargarnos: Una vez que ya descargamos el driver tenemos que importarlo en el iReport, para eso vamos a navegar hasta: Herramientas>Opciones Se nos va a desplegar una pantalla así y vamos a seleccionar la pestaña Classpath: Después vamos a presionar el botón Add JAR y vamos a buscar el driver que descargamos y lo agregamos y presionamos el botón Aceptar. Una vez hecho eso, vamos a configurar la conexión a la base de datos presionando sobre el icono en el paso numero 1. Como vemos en la imagen hay varias opciones, nosotros vamos a escoger la opción resaltada que es mediante JDBC y presionamos el botón Next. Y en JDBC Driver vamos a elegir la opción de Oracle. Para rellenar los datos que se nos piden vamos a ingresar los siguientes:
- 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: Después de eso presionamos el botón Test y si todo está bien nos saldrá un mensaje como este: Ya tenemos la conexión a la base de datos, ahora podemos pasar el paso número 2, en el cual vamos a crear nuestro primer reporte, vamos a crear algo sencillo para comenzar, un reporte con un Titulo y la información de una tabla que obtendremos desde un Stored Procedure de PL-SQL. Así que antes vamos a crear un Stored Procedure en PL-SQL el cual nos retornara los datos que vamos a insertar en el reporte.
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: Elegimos el reporte A4 y presionamos el botón Open this Template y le vamos a poner de nombre al reporte reporteAlumnosDatoJava y vamos a elegir la ubicación del mismo, siempre es bueno crear una carpeta en donde tengamos nuestros reportes de iReport. Después de eso presionamos el botón Siguiente y luego el botón Terminar. Ya tienes el reporte creado, ahora necesitamos cambiar el lenguaje del reporte a Java para evitar errores al ejecutarlo desde la aplicación, para cambiar el lenguaje desplegamos la ventana que está del lado superior izquierdo que tiene por nombre Report Inspector Seleccionamos el reporte "reporteAlumnosDatoJava" presionamos clic derecho y vamos a las propiedades, cambiamos el lenguaje actual Groovy por Java. Ahora vamos a comenzar a crear la estructura del mismo, hay una paleta del lado superior derecho en la cual podemos elegir varios componentes que con solo arrastrarlos al reporte ya se agregan. La pantalla que debería aparecerte es esta: Ahora explicare un poco mas como funciona este diseñador, vamos a mostrar los registros del Stored Procedure en PL-SQL que devuelve un cursor con los datos de los 3 alumnos, tenemos que crear un parámetro en el iReport que sea del tipo
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 Aquí hay que agregar la llamada al Stored Procedure, elegir el lenguaje y ver los resultados esperados:
- 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.
Para ver un preview del reporte tienes que compilar el mismo y después presionar en Preview:
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