Parámetros en una query de Jasper reports

De ChuWiki


Para poner un parámetro en una consulta de Jaspersoft Studio, debemos seguir los siguientes pasos

  1. Crear un parámetro en el informe de Jasper Report
  2. Crear un parámetro en el Sub DataSet
  3. Ligar ambos parámetros
  4. Usar el parámetro del dataset en la query.

Crear un parámetro en el informe de Jasper[editar]

Antes de nada, dejar claro cual es el entorno, es el del tutorial del enlace anterior. En él verás qué tabla estamos manejando en base de dato y sus valores, así como la consulta que estamos haciendo. En él comentábamos:

  • Hay un Main DataSet, con la consulta principal del informe que NO podemos asociar a un componente Table. Así que ahí tenemos una consulta "SELECT 1", que no sirve para nada, simplemente debe devolver un único resultado para que el Sub DataSet se ejecute una sola vez.
  • Hay un Sub DataSet, que sí está asociado a un componente Table y que es el que tiene la consulta real "SELECT * from films".

Si tu consulta real que devuelve datos está en el Main DataSet y quieres poner ahí el parámetro, puedes saltarte los pasos de "Crear parámetro en el DataSet" y "Ligar ambos parámetros". Puede realizar este paso e ir directamente al último.

Vamos a crear el parámetro, sólo pondremos qué valores ponerle.

Si no sabes crear parámetros en Jasper Studio, puedes ver cómo crear parámetros en Jasper Report

En la pestaña "Outline", nodo "Parámeters", botón derecho y "Create Parameter". En la pestaña "Properties" del paráemtro ponemos

  • Name. El que queramos, en nuestro ejemplo le pondremos "code"
  • Class. La que corresponda con la columna de base de datos para la que quieres crear el parámetro en la query. En mi ejemplo, será un "where campo = 'valor'" donde campo es un String. Así que la clase aquí será java.lang.String
  • Is For Prompting. Debe estar chequeado, de esta forma se nos pedirá este parámetro al generar el informe.
  • Default Value Expression. Podemos poner un valor por defecto en el caso de que no nos introduzcan el parámetro. En el ejemplo ponemos "UA502", que es un valor existente en nuestra base de datos, columna "code".

La imagen siguiente muestra cómo quedaría.

Crear un parámetro en el DataSet[editar]

Ahora repetimos el proceso con el Sub DataSet. En nuestro ejemplo, este Sub DataSet tiene el nombre "Películas". En la pestaña "Outline", buscamos el nodo del Sub DataSet, "Películas" en mi ejemplo y debajo de él buscamos el nodo "Parameters". Botón derecho sobre él y "Create Parameter". Rellenamos de la siguiente forma

  • Name. Le puedes poner el nombre que quieras, en el ejemplo, "query_code", para distinguirlo de el del Main DataSet anterior, que hemos llamado "code" a secas.
  • Class. El mismo que hayamos elegido antes, en el ejemplo, java.lang.String.

No necesitamos rellenar más. No tiene opción "Is For Prompting" y como vamos a ligarlo al parámetro "code", tampoco necesitamos un "Default Value Expression".

Las siguientes imágenes muestra como queda.

Ligar el parámetro del informe Jasper con el parámetro del DataSet[editar]

Ahora nos queda ligar ambos parámetros. Que lo que el usuario introduzca en "code" se rellene en "query_code". Para esto, abrimos las properties del componente Table que hemos asociado al Sub DataSet. Dentro de las properties, la pestaña "DataSet", como se indica en las siguientes figuras

Pulsamos el botón "Parameters", se abre la siguiente ventana

Pulsamos el botón "Add" para añadir un parámetro. Aparece la siguiente ventana

En el combo, seleccionamos nuestro parámetro "query_code". En "Parameter Expression" escribimos $P{code}, siendo "code" el parámetro definido en el primer paso.

Si en "Parameter Expression" pulsas el botón que hay a la derecha, se abrirá una ventana con varias columnas. En la primera seleccionas "Parameters", en la del medio buschas y haces doble click en "code" y la expresión se escribirá sola en la parte superior. Cierras la ventana y así evitas escribir manualmente la expresión

Pulsa "Finsih" para cerra la ventana y ya tenemos ligados los dos parámetros.

Usar el parámetro en la query[editar]

En "outline", sobre el Sub DataSet que en este ejemplo se llama películas, botón derecho y selecciona "DataSet and Query...". Se abrirá la ventana donde está nuestra query SQL. En el ejemplo del tutorial teníamos

SELECT * from films

Ahora ponemos

SELECT * from films WHERE code=$P{query_code}

En el where, el primer "code" es el nombre de nuestra columna en base de datos, de tipo String. Hacemos que sea igual al valor de "$P{query_code}", que es el parámetro que hemos definido en nuestro Sub DataSet y que está ligado al parámetro $P{code} del informe principal. Dos detalles a tener en cuenta:

  • Es String, pero no necesitamos poner las comillas ... WHERE code = '$P{query_code}'. Jasper es listo y las pone por nosotros a la hora de hacer la consulta. Si ponemos $P!{query_code}, con una ! detrás de la P, entonces si tendríamos que ponerlas.
  • Como estamos en el Sub DataSet, tenemos que poner un parámetro del Sub DataSet. Si ponemos aquí un parámetro del informe principal, tendremos un error "jasper report query parameter not found" cuando lo ejecutemos.

Pulsa OK para cerrar la ventana y ya está todo listo.

Si previsualizamos el informe, nos pedirá el parámetro "code". Lo rellenamos y le damos al botón con un triángulo verde para ver el resultado