lunes, octubre 25

Como Recibir un array de Parametros en BIRT Reports

Hay ocasiones en que en BIRT, para una determinada consulta necesitamos una serie de valores para el mismo campo, por ejemplo para hacer una sentencia del tipo:

AND id_empleado in (1,2,4,7,8,9,50,78,52)

Se supone que podriamos enviar un parametro asi: 1,2,4,7,8,9,50,78,52, pero creo que en este formato no pasa hacia birt, por las comas, pero intentenlo.

Hay que destacar que para este caso los valores dentro de la sentencia IN van a ser dinamicos, puesto que si fueran fijos, no seria necesario recibirlos como parametro, simplemente se dejarian ya establecidos en la consulta.


Bueno,pues yo lo que hago para poder enviar como parametro una lista de valores dinamicos a birt, es lo siguiente:



Supongamos que tenemos una sentencia sql asi:


select nombre, edad, sexo, telefono from estudiante where id_estudiante in (1,8,7,9,85,78,41,52)

Al hacer nuestro dataSet en BIRT yo pongo asi mi consulta:

select nombre, edad, sexo, telefono from estudiante

Observen que falta el where con la sentencia in.

Ahora damos de alta un parametro con el nombre que deseen, yo le llamare cadenaParametros, esta cadena parametros debe recibirse mas o menos asi 1_2_3_66_88_90_22_26_19 ( Observese el caracter '_', podrian algun otro permitido ok.

Ahora viene el truco, hay que hacer click en el dataSet, para que nos aparezca del lado derecho, la pestaña de Script, justo despues de la de Master Page, en la pestaña de Script, del combo que aparece, seleccionamos la de Before Open, y ahi recibimos nuestro parametro.

// Leemos la cadena parametros, es decir en una variable recibimos el parametro cadenaParametros

cadenaTemporal=reportContext.getParameterValue("cadenaParametros");

//Ahora Reformatemos la cadena, cambiamos signo '_' y lo reemplazamos por una , (coma), para meterlo en un in() de sql

do
{
cadenaTemporal = cadenaTemporal.replace('_',',');
} while(cadenaTemporal.indexOf('_') >= 0);

// Finalmente terminamos de armar nuestro query, le concatenamos lo faltante.
this.queryText+=" where id_estudiante in ("+ cadenaTemporal +")";


Listo, ya recibimos nuestra cadena de parametros, originalmente formado como 1_4_7_9_....., y despues reemplazamos el caracter _ por una coma, esta cadena se queda en una variable temporal en BIRT en el evento BeforeOpen del DataSet.

Despues solo terminamos de armar nuestra sentencia sql y ahora el birt se encarga de lo demas.

En resumen, forma tu cadena de parámetros delimitados por algun caracter, este seria un string, y ese mandalo como parametro a Birt, ya sea desde php, java o tu lenguaje en uso..


Espero a alguien le sea de utilidad, y si alguien tiene una mejor alternativa, compartanla, sera bien recibida.
Vista previa

2 comentarios:

Anónimo dijo...

Mu bueno

Anónimo dijo...

Muy buen blog memo