sábado, 30 de septiembre de 2023

IReport query con where IN o creando un sql dinamico

Hola , de tiempo q escribo, pero me había olvidado estos super tips o funcionalidades en los parametros del query de ireport/jasperreeports, aqui vamos:

1) En SQL es muy util el operador de comparación IN en un where, por ejemplo:

select * from mitabla where campo1 IN ('a','x','z')

en ireport el SQL query con el parametro seria de la siguiente forma:

select * from mitabla where $X{IN,campo1,parLetras}

donde parLetras debe ser de tipo java.util.Collection, pongo el código jrxml `para un mejor ejemplo:

<parameter name="parLetras" class="java.util.Collection">
<defaultValueExpression><![CDATA[java.util.Arrays.asList("a")]]></defaultValueExpression>

2) Que sucedería si por algun motivo no puedes construir el IN de la forma anterior y lo unico que quieres/puedes es pasarle un String que contenga los valores del IN, por ejemplo:

String parLetras ="'a','x','z'";

entonces, jasperreports nos da el parametro $P!
en ireport el SQL query con el parametro seria de la siguiente forma:

select * from mitabla where campo1 IN ($P!{parLetras})

el $P! pone el texto tal cual en el query, no solo en where sino donde uds quieran,
tal es asi que se podria hacer lo siguiente:

String parMiQuery = "select * from mitabla where campo1 IN ('a','x','z')";

y en ireport el SQL query con el parametro seria:

$P!{parMiQuery}

sí!! solo eso, nada mas, porque usará el exto tal cual en el query de jasperreports.


Espero hayan entendido y les ayude

Mas info en: https://community.jaspersoft.com/questions/516502/x-and-p

Bytes