Ejemplo Reporte
Paso a paso para crear un nuevo reporte.
Creación de reporte base
Abrimos Jaspersoft® Studio para comenzar a desarrollar el reporte.
Una vez abierto debemos crear un nuevo reporte.
New → Jasper Report
Seleccionamos el template "Blank A4" y a continuación hacemos clic en "Next".
Modificamos el nombre por defecto en el campo "File name" con el nombre que le queremos dar al archivo .jrxml que estamos a punto de generar.
Luego seleccionamos la carpeta en la que queremos almacenarlo y hacemos clic en "Next".
A continuación se deberá seleccionar el data adapter previamente creado (Creación del Repositorio) sobre el cual deseamos realizar la consulta de datos.
En este punto también se da la opción de ingresar la query deseada, pero en este caso no se ingresara ya que deseamos filtrar nuestro reporte de forma dinámica utilizando parámetros que se deben crear previo a su inserción en la misma. Por lo tanto obviamos este paso y hacemos clic en "Finish".
Luego de realizado estos pasos se crea el reporte vacío como se muestra a continuación.
Creación de parámetros
A continuación se procede a la creación de los parámetros necesarios para filtrar nuestro reporte.
Para crear los parámetros hacemos clic derecho sobre "Parameters" en la ventana "Outline" → Create Parameter.
En el momento en el cual se crea el parámetro, se selecciona automáticamente y se pueden visualizar sus propiedades en la ventana "Properties" como se muestra en la siguiente imagen.
Por defecto el parámetro se crea con el nombre "Parameter1", el cual se puede modificar accediendo a las properties en el campo "Name".
Por último seleccionamos el tipo de dato que va a recibir, esto se realiza de la siguiente manera:
Clic en el botón que se encuentra remarcado en rojo en la imagen.
Se abrirá la ventana "Open Type", la cual estará vacía, para acceder a los tipos de datos debemos buscar el tipo de datos deseado en el campo "Enter the name prefix or pattern".
Luego de filtrado el tipo de datos que queremos utilizar, debemos seleccionar el que diga java.sql (ver ejemplo en imagen).
Para este reporte vamos a crear 3 parámetros:
INITIAL_DATE (Timestamp)
FINAL_DATE (Timestamp)
CAMPANIA (String)
Estos se utilizaran para filtrar nuestro reporte por un periodo de tiempo determinado y por campaña/s.
Inserción de la query
Luego de creados todos los parámetros con sus nombres y tipos apropiados debemos ingresar la consulta.
Dentro de la ventana "Outline" hacemos clic derecho sobre el reporte → Datasets and Query.'
En la siguiente imagen se muestra la query ingresada por el usuario utilizando los parámetros previamente creados dentro de la misma.
En este caso el parámetro CAMPANIA lo escribimos con comillas ('$P!{CAMPANIA}') para que te deje leer los campos de la query.
Una vez leídos los campos de esta query (clic en botón Read Fields) se le deben quitar estas comillas ya que este parámetro va a contener una lista de valores que se le pasan entre comillas separados por coma ('valor1','valor2','valor3').
Esto aplica para todos los parámetros a los que les vayamos a pasar una lista de valores.
Es decir:
campaign in ('$P!{CAMPANIA}')
clic en botón Read Fields
campaign in ($P!{CAMPANIA})
clic en OK
Fields y Text Fields
Una vez leídos los fields, estos se reflejan en la ventana Outline desplegando el menú "Fields".
Para utilizar los fields deseados, simplemente se seleccionan y se realiza Drag&Drop hacia la banda "Detail" como se muestra en la siguiente imagen.
Nota: Importante finalizado este paso, completar el paso Internacionalización, agregando el archivo de lenguaje.
Otra manera de utilizar los fields que obtenemos de la query es la siguiente:
Ir a la sección "Palette" y hacer Drag&Drop un Text Field hacia la banda Detail.
Doble clic sobre el Text Field (se despliega ventana para seleccionar field).
Seleccionar field deseado y luego damos clic en "Finish".
En la siguiente imagen muestra como quedan los fields luego de ser seleccionados y arrastrados desde el menú "Fields".
Estos se ajustan automáticamente al largo de la banda "Detail" y generan por defecto un "Static Text" con el nombre del field, este se coloca automáticamente en la banda "Column Header" utilizada para colocar los títulos a las columnas.
Estos Static Text sirven para escribir texto, en este caso se borran porque se utilizaran Text Fields para internacionalizar los títulos (se explica mas adelante).
Luego de incorporado los fields a nuestro reporte, debemos ajustar las bandas (como indica la flecha roja) con el ancho de los Text Fields para que el reporte quede más prolijo a la hora de generarlo.
Al momento en el que tenemos las bandas ajustadas en relación a los text fields y luego de borrar los static texts generados automáticamente, procedemos a agregar los text fields (vacíos) en lugar de los static texts.
Para generar un reporte agradable podemos agregar propiedades a los text fields para que luzcan mejor como por ejemplo:
Borde
Color
Ajuste de ubicación del texto
Tamaño del texto
En la siguiente imagen se muestra como se agrega un borde a uno o varios text fields.
Para realizar esto:
Seleccionar los text fields a los que les queremos aplicar el borde.
En la sección properties, seleccionar "Borders" y luego modificar el campo "Pen Width" para setear el grosor del borde.
También se puede modificar el color y el tipo de línea que tendrá el borde de nuestro text field.
En la siguiente imagen se muestra como se ajusta la ubicación del texto u expresión utilizado en un text field.
Para realizar esto:
Seleccionar los text fields a los cuales les queremos aplicar un ajuste de texto/expresión.
En la sección properties, seleccionar "Text Field" y luego seleccionar la alineación deseada (Alignment).
En la siguiente imagen se muestra como se ajusta el tamaño del texto u expresión utilizado en un text field.
Para realizar esto:
Seleccionar los text fields a los cuales les queremos aplicar un ajuste de texto/expresión.
En la sección properties, seleccionar "Text Field" y luego seleccionar el tamaño deseado (Font).
En la siguiente imagen se muestra como se agrega color a un text field.
Para realizar esto:
Seleccionar los text fields a los cuales les queremos agregar color.
En la sección properties, seleccionar "Appearance" y luego seleccionar el color deseado (Forecolor es el color del texto y Backcolor es el color de fondo).
Por ultimo des-tildar el checkbox "Transparent".
Internacionalización
Para internacionalizar el reporte debemos colocar resources dentro de los fields que queremos tener en varios idiomas como por ejemplo los títulos del reporte o los títulos de las columnas.
Antes de llevar a cabo la internacionalización se deben crear tantos archivos PROPERTIES como idiomas queremos usar.
En este caso nosotros vamos a utilizar inglés y español por lo tanto se debe crear el archivo properties_en y properties_es.
Estos archivos SIEMPRE deben estar en la carpeta en la que se encuentra almacenado nuestro reporte.
Para realizar esto:
Debemos tener los archivos properties con los distintos idiomas que queremos utilizar dentro de la carpeta donde se encuentra nuestro reporte.
Modificar estos archivos agregando el resource junto con la descripción en el idioma correspondiente como lo indica la siguiente imagen.
Debemos incluir el resource creado en el editor de expresión de nuestro text field con la siguiente nomenclatura.
Por último, al momento de ejecutar nuestro reporte, dentro de las Properties generales de nuestro reporte debemos modificar el campo "Resource Boundle" indicándole el archivo properties al cual va a hacer referencia.
Para dirigirse a las properties de nuestro reporte debemos seleccionar nuestro reporte dentro de la sección Outline.
Luego dirigirse a Properties y seleccionar el tab Report.
Dar clic en el botón
del Resource Boundle.
Seleccionar el archivo deseado y dar clic en "OK".
Agregar parámetros al reporte
Dentro del reporte es bueno mostrar los parámetros por los cuales estamos filtrando la query.
Esto se realiza de la siguiente manera:
Dentro de la banda "Title" se agregan 2 Text Fields por parámetro a agregar (uno para almacenar la descripción y otro para almacenar el valor del parámetro).
Dentro del Text Field de la descripción colocamos los resources correspondientes.
Dentro del Text Field donde queremos almacenar el valor del parámetro debemos colocar el nombre del parámetro con la siguiente nomenclatura.
Agregar imagenes al reporte
Para agregar una imagen al reporte debemos hacer lo siguiente:
Dentro de la sección "Palette" seleccionar y hacer drag and drop del elemento "Image" en la banda deseada.
Se abre una ventana en la cual se presentan varias opciones para cargar nuestra imagen. En este caso nosotros tenemos la imagen en la misma carpeta donde se encuentra el reporte y los archivos properties por lo tanto seleccionamos "Workspace resource" y damos clic en "OK".
Seleccionamos la imagen y hacemos clic en el botón "OK".
NOTA: El formato de la imagen debe ser png.
Resultado:
Agregar gráficos al reporte
Para agregar gráficos al reporte debemos hacer los siguiente:
Dentro de la sección "Palette" seleccionar y hacer drag and drop del elemento "Chart" en la banda "Summary".
Al momento de soltar el chart se abrirá una ventana donde se muestran los distintos tipos de gráficos para utilizar como se muestra en la siguiente imagen.
Seleccionamos el chart "Bar3D Chart" y hacemos clic en "Next".
Luego se muestra la gráfica seleccionada junto con las propiedades a modificar.
Se debe agregar un field en el campo "Value" y otro en el campo "Category" precionando el boton
que se encuetra al costado de los campos mencionados.
Luego seleccionamos el field de acuerdo a lo que queremos representar en nuestro gráfico.
A continuación se agrega un nuevo valor de "Series" que sera la descripción de lo que muestra el gráfico y hacemos clic en "OK" como se indica a continuación.
Luego damos clic en "Finish".
LENGUAJE:
Agregar en el campo "resource boundle" dentro de las propiedades del reporte la palabra "language" como muestra la siguiente imagen.
Resultado diseño final:
Para generar el reporte y ver el resultado con datos debemos hacer lo siguiente:
Clic sobre el tab "Preview".
Seleccionar la base de datos.
Completar los parámetros para filtrar la query.
Run.
Resultado Final
IMPORTANTE: Para transformar un numero a un time dentro de un field se debe utilizar la siguiente expresion
EJEMPLO PRACTICO: De nuestra consulta SQL obtenemos la cantidad de segundos hablados (ejemplo: CANTIDAD_HABLADO = 120) y queremos que en el reporte se muestre de la siguiente manera 00:02:00 siendo estos las horas, minutos y segundos hablado.
IF(($F{fieldname}==null),"0",String.format("%d:%02d:%02d", ($F{fieldname})/3600, (($F{fieldname})%3600)/60, ($F{fieldname})%60)).
ERROR COMUN: En muchos reportes esta expresion es utilizada SIN el IF lo que hace que se genere un error ya que se evalua el field dentro de la expresion String.format y no se controla si este es NULL.