You are on page 1of 10

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte3:ParmetrosyVariables
4

Ms Siguienteblog

TutorialesdeProgramacionJava
BlogdedicadoatemasdeprogramacinactualesusandoellenguajedeprogramacinJavaylasltimasversionesdesusAPIsyHerramientas.
Pginaprincipal

PginadeConcursos

TutorialesUPAO2010

PresentacionesCapacitacin

LUNES,30DEMARZODE2009

CreacindeReportesconJasperRepotsyiReportsParte3:Parmetrosy
Variables

DONACIONES

EneltutorialanteriorvimoscomohacerusodelosFieldsparaindicarlaposicindentrodenuestroreporteenlaquedebenquedarlos
valoresqueobtenemosdenuestraaplicacinJava.
JAVATUTORIALESENFACEBOOK

Ahora hablar de los otros dos tipos de expresiones que proporciona JasperReports: Parameters y Variables. Y la forma en la
quepodemosusarlosparahacermsdinmicosnuestrosreportes.

JavaTutoriales
Megusta

Paraelloseguiremosusandoelejemplodelsegundotutorial,asquesinolohanledolesrecomiendoquelohaganenestapgina.
Abrimos iReport y el reporte del tutorial anterior ("reporte2.jrxml"). En este momento nuestro reporte debe verse como en la
siguienteimagen:

JavaTutorialesha
aadidounafotonueva.
13demarzo

16MegustaSehacompartido1vez

Megusta

En donde solo tenemos textos estticos y "fields" para mostrar un reporte bsico de los datos de ciertos participantes. Si lo
recuerdan,lasalidadelreportealgenerarlodesdenuestraaplicacinJava,eralasiguiente:

Comentar

A24386personaslesgustaJavaTutoriales

PluginsocialdeFacebook

Ahorapasaremosaagregar"Parameters"aestereporte.Comodijeeneltutorialanterior:losparmetrossonvaloresqueusualmente
se pasan al reporte desde el programa que crea el "JasperPrint" del reporte (nuestra aplicacin Java) haciendo uso de un
"java.util.Map".
Enestecasopasaremosdosparmetros:elttulodelreporte,yelnombredelautordelmismo.
AligualqueconlosFields,parapoderhacerusodeunparmetroprimerohayquedeclararloenel"ReportInspector" (situado en
elpanelizquierdodeliReport),porloquenosdirigimosaestaventanayhacemosclicderechosobreelnodo"Parameters".Alhacer
estoseabrirunmencontextual.Seleccionamoslaopcin"AddParameter"(lanicahabilitada).

http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy_30.html

1/20

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte3:ParmetrosyVariables

Conestoseagregarunnuevoparmetrollamado"parameter1"detipo"java.lang.String".Cambiamosennombredelparmetro
en la ventana de propiedades a "titulo" (recuerden que este nombre es el que deberemos usar desde nuestra aplicacin Java para
establecerelvalordelparmetro).

Agregamosotroparmetrollamado"autor"delamismaformaqueagregamoselde"titulo".

SEGUIDORES

Participarenestesitio

Ahoraeliminamoselelementoquetenamoscomottulodelreporte(elquecontieneeltextoesttico"ReportedeParticipantes")
yloreemplazamosporelparmetro"titulo"arrastrndolodesdelaventanadel"ReportInspector"alabanda"Title".

GoogleFriendConnect

Miembros(195) Ms

Yaeresmiembro?Iniciarsesin

ARCHIVODELBLOG

2015(1)

Ajustamosesteelementoparaquetengaelmismoformatoqueelttuloquetenamosanteriormente.
Ahoraagregamoselsegundoparmetro("autor")enlabanda"PageHeader",lacualserepiteenlapartesuperiordecadaunadelas
pginas(enlaprimerpginaaparecedespusdelttulo),arrastrndoloaestabanda.

2013(1)
2012(2)
2011(11)
2010(10)
2009(22)
septiembre(2)
agosto(2)
julio(1)
junio(3)
mayo(2)
abril(5)
marzo(2)

CreacindeReportesconJasperRe
yiReports...

CreacindeReportesconJasperRe
yiReports...

Sidejamosestaexpresintalycomoest("$P{autor}")solosemostrarennombredelautorenlapartesuperiordecadaunadelas
pginas(porejemplosielautordelreportees"Juan",soloveremoslapalabra"Juan"enlapartesuperiordelosreportes).Estopodra
no ser claro para quienes revisen este reporte, por lo que queremos indicar de forma explcita que a lo que se refiere el valor de este
parmetroeselnombredelautor.Parahacerestonosdirigimosalaventanadepropiedadesdeesteparmetro(paralocualdebemos
tenerlo seleccionado) y buscamos la categora "Textfieldproperties". Ahi se encuentra una propiedad llamada "Text Field
Expression"cuyovalores"$P{autor}".

http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy_30.html

febrero(2)
enero(3)

2/20

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte3:ParmetrosyVariables

Loqueharemoseseditarestaexpresinparaanteponerlapalabra"Autor:".Parahacerestopresionamoselbotn"...",conloque
se abrir una ventana que nos permitir editar la expresin. En esta ventana modificamos la expresin "$P{autor}" para que quede
"Autor:"+$P{autor}.Conestoloquelogramosesquealacadenaesttica"Autor:"seleconcateneelvalordelaexpresin
dinmica "$P{autor}". Por lo que ahora el lo que aparecer en la parte superior de cada pgina del reporte ser la cadena "Autor:
Juan".

DATOSPERSONALES

Alex

Ahorapresionamoselbotn"CompileReport"paraquesegenereelreportecompilado"reporte2.jasper".

Programador Java con algunos ao


experiencia en mltiples poyectos y
mltiples APIs y herramientas deseos
compartir experiencias con el rest
programadores.
Vertodomiperfil

Veamosunavistapreviadelreporte,paraestohacemosclicenlapestaa"Preview".Nospedirlosvaloresdelosdosparmetros.Si
colocamosparaelparmetro"titulo"elvalor"Reporte"yparaelparmetro"autor"elvalor"Alex"elpreviewqueveremosserel
siguiente:

AhoraveremoscmopasarleestosvaloresdesdenuestraaplicacinJava,porloqueabrimosnuestroIDEdetrabajo,NetBeans.
Ahnosdirigimosalaclase"Main"quecreamoslaltimavezybuscamoslalneaendondecreamosnuestroobjeto"JasperPrint":

JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,null,newJRBeanCollectionDataSource(listaPa
riticipantes));

Y antes de esta lnea crearemos un objeto "java.util.Map" que contendr nuestros parmetros. Colocaremos el nombre de los
parmetros (en este caso "autor" y "titulo") como llave y sus respectivos valores, "Juan" para el autor y "Reporte
Participantes"paraelttulo,comovalores.

http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy_30.html

3/20

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte3:ParmetrosyVariables

Map<String,String>parametros=newHashMap<String,String>();
parametros.put("autor","Juan");
parametros.put("titulo","ReporteParticipantes");

Ypasamoseste"Map"comoelsegundoparmetrodelmtodo"fillReport",alquehastaahoralehemospasado"null":

JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,parametros,newJRBeanCollectionDataSource(l
istaPariticipantes));

Elcdigodenuestromtodo"main"quedaas:

publicstaticvoidmain(String[]args)throwsException
{
List<Participante>listaPariticipantes=newArrayList<Participante>();

for(inti=1;i<=10;i++)
{
Participantep=newParticipante(i,"Particpante"+i,"Usuario"+i,"Pass"+i,"Comentariosp
ara"+i);
listaPariticipantes.add(p);
}
JasperReportreporte=(JasperReport)JRLoader.loadObject("reporte2.jasper");
Map<String,String>parametros=newHashMap<String,String>();
parametros.put("autor","Juan");
parametros.put("titulo","ReporteParticipantes");
JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,parametros,newJRBeanCollectionDataSour
ce(listaPariticipantes));
JRExporterexporter=newJRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,newjava.io.File("reporte3PDF.pdf"));
exporter.exportReport();
}

Siejecutamosnuestroreporteobtendremosunarchivoconelsiguientecontenido:

Comopodemosverlosparmetros"titulo"y"autor"hansidoreemplazadosporlosvalores"ReporteParticipantes"y"Juan"
respectivamente.
Gracias a los parmetros podemos pasar valores (como en este caso cadenas, pero podemos pasar prcticamente cualquier tipo de
objeto)anuestroreportedirectamentedesdenuestraaplicacinJava.

http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy_30.html

4/20

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte3:ParmetrosyVariables
AhoraveremoselltimotipodeexpresinqueJasperReportsnosproporciona,lasVariables.
Comodijeenelpostanterior:lasvariablessonobjetosusadosparaalmacenarvalorescomolosresultadosdeclculos.
En este caso usaremos dos variables. La primera ser una de las variables internas que ya proporciona JasperReports:
PAGE_NUMBER, que nos dice el nmero de la pgina actual. En este caso como el reporte solo tendr una pgina solo aparecer el
nmero1,peropuedenextenderelejemploparaquesegenerenmspginas.
La segunda variable que usaremos ser una variable creada por nosotros mismos y nos mostrar la suma de los puntos de los
Participantes(enestemomentolosParticipantesnotienenpuntos,porloquetendremosqueagregarlos).
Loprimeroqueharemosesmodificarlaclase"Participante"agregandoelatributo"puntos"detipo"int"consuscorrespondientes
settersygetters:

privateintpuntos;
publicintgetPuntos()
{
returnpuntos;
}
publicvoidsetPuntos(intpuntos)
{
this.puntos=puntos;
}

y en nuestro mtodo "main" agregamos, en el ciclo que crea los objetos "Participante", el siguiente cdigo para establecer los
puntosdecadaunodelosParticipantes:

p.setPuntos(i);

Ahora regresamos a iReport y agregamos un nuevo Field en la ventana "Report Inspector" llamado "puntos" de tipo
"java.lang.Integer".EstefieldserusadoparamostrarlospuntosquetienecadaunodelosParticipantes.

Agregamosunacolumna,dentrodelabanda"Details1",paramostrarestefield:

http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy_30.html

5/20

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte3:ParmetrosyVariables
SicompilamosnuestroreporteyejecutamosnuestraaplicacinJavadebemosverunreporteconelsiguientecontenido:

Ahora agregaremos la variable que realizar la suma de los puntos de todos los Participantes. Para esto agregamos una nueva
variableenelnodo"Variables"delaventana"ReportInspector"haciendoclicderechosobreestenodoyseleccionandolaopcin
"AddVariable"delmencontextualqueseabre.

Modificamos sus propiedades en la ventana "Properties" cambiando su nombre a "sumaPuntos", su "Variable Class" a
"java.lang.Integer", y "Calculation" a "Sum" (con esto indicamos que la variable mantendr la suma de los valores que
indicaremosmsadelante,otrasopcionesincluyenuncontador,elpromedio,elvalormsalto,etc.).
Ahora indicaremos la suma de cules valores son los que queremos que se almacene en este variable. Para eso hacemos clic en el
botn"..."delapropiedad"VariableExpression",conloqueseabrirunanuevaventana.Esestanuevaventanaindicaremosde
dnde se tomarn los valores para la suma. Podemos usar una expresin tan compleja como necesitemos. Como en este caso solo
queremosrealizarlasumadelospuntosescribimos"F{puntos}".Ypresionamoselbotn"OK"paraconfirmar.

Alfinallaspropiedadesdenuestravariabledebenquedaras:

http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy_30.html

6/20

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte3:ParmetrosyVariables

Ahora solo arrastramos nuestra variable "sumaPuntos" desde el "ReportInspector" hasta la banda "Summary". Esta banda se
muestracuandoyasehanmostradotodoslosdatosdelabanda"Details1"ysemuestrajustoabajodeella.
Agregaruntextoestticoyunalneaenestabandasoloparaqueseveaunpocomejor.Nuestroreportehastaahoradebeverseas:

Ahora para terminar agregaremos la variable "PAGE_NUMBER" que nos dice el nmero de pgina actual en el reporte. Arrastramos esta
variabledesdeel"ReportInspector"hastalabanda"PageFooter",lacualsemuestraenlaparteinferiordecadapgina.
Podra parecer un poco extrao que la banda "Summary" que se encuentra abajo de la banda "PageFooter" en el designer vaya a
aparecerantesenelreportefinal,peroconfenenmi,asser^_^.
Agregar tambin un texto esttico solo para indicar que el valor que estamos mostrando corresponde al nmero de pgina. Al final el
reportequedaas:

Ahora guardamos y compilamos nuestro reporte y ejecutamos nuestra aplicacin desde el NetBeans. El reporte generado debe verse
as:

http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy_30.html

7/20

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte3:ParmetrosyVariables
Comopodemosver,lavariable"sumaPuntos"contienelasumadelospuntosdetodoslosparticipantes(55).
Nuestraclase"Participante"quedadelasiguienteforma:

publicclassParticipante
{
privateintid;
privateStringnombre;
privateStringusername;
privateStringpassword;
privateStringcomentarios;
privateintpuntos;

publicParticipante()
{
}

publicParticipante(intid,Stringnombre,Stringusername,Stringpassword,Stringcomentarios)
{
this.id=id;
this.nombre=nombre;
this.username=username;
this.password=password;
this.comentarios=comentarios;
}
publicStringgetComentarios()
{
returncomentarios;
}
publicvoidsetComentarios(Stringcomentarios)
{
this.comentarios=comentarios;
}
publicintgetId()
{
returnid;
}
publicvoidsetId(intid)
{
this.id=id;
}
publicStringgetNombre()
{
returnnombre;
}
publicvoidsetNombre(Stringnombre)
{
this.nombre=nombre;
}
publicStringgetPassword()
{
returnpassword;
}
publicvoidsetPassword(Stringpassword)
{
this.password=password;
}
publicStringgetUsername()
{
returnusername;
}
publicvoidsetUsername(Stringusername)
{
this.username=username;
}

http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy_30.html

8/20

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte3:ParmetrosyVariables
publicintgetPuntos()
{
returnpuntos;
}
publicvoidsetPuntos(intpuntos)
{
this.puntos=puntos;
}
}

ynuestraclase"Main"delasiguienteforma(omitiendolosimports):

publicclassMain
{
publicstaticvoidmain(String[]args)throwsException
{
List<Participante>listaPariticipantes=newArrayList<Participante>();
for(inti=1;i<=10;i++)
{
Participantep=newParticipante(i,"Particpante"+i,"Usuario"+i,"Pass"+i,"Comentari
ospara"+i);
p.setPuntos(i);

listaPariticipantes.add(p);
}
JasperReportreporte=(JasperReport)JRLoader.loadObject("reporte2.jasper");
Map<String,String>parametros=newHashMap<String,String>();
parametros.put("autor","Juan");
parametros.put("titulo","ReporteParticipantes");
JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,parametros,newJRBeanCollectionData
Source(listaPariticipantes));
JRExporterexporter=newJRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,newjava.io.File("reporte3PDF.pdf"));
exporter.exportReport();
}
}

Para terminar solo recuerden: los parmetros son expresiones que nos permiten pasar valores, desde nuestra aplicacin Java, a los
reportes generador por JasperReports. Y las variables almacenan valores que son el resultado de clculos de distinta naturaleza
sobrelosvaloresquerecibimosennuestroreporte.
Bien, este es el final de este tercer tutorial sobre JasperReports. Espero que les sea de utilidad. No olviden dejar sus comentarios,
dudasysugerencias.
Enelsiguientetutorialveremoscmomostrarlosreportesgeneradosdesdeunaaplicacinweb.
Saludos.
Descargalosarchivosdeestetutorialdesdeaqu:
ReporteconParmetrosyVariables

EntradasRelacionadas:
Parte1:ReportesconConexinaBasesdeDatos
Parte2:UsodeDataSourcesPersonalizados
Parte4:Reportesenaplicacionesweb
Parte5:GrficasenReportes
Parte6:Grupos
Parte7:Subreportes
PublicadoporAlexen7:28
Reacciones:

divertido (0)

interesante (2)

increible (1)

no me gusta (0)

+4 Recomendar esto en Google


Etiquetas:ireports,jasperreports,java,parametros,reportes,variables

http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy_30.html

9/20

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte3:ParmetrosyVariables

71comentarios:
Annimo 1deabrilde2009,8:40
Muybuentutorial,creoqemavaaservirenelproyectoquereciencomienzp,gracias.
Esperoelsiguientearticulo
Responder

Annimo 16deabrilde2009,17:10
muybien:)
Responder

Annimo 12demayode2009,17:35
holasaludos,oyeenmireporteyomanejocantidadesmonetariasyestabatratandodemeterleelformatodemonedaconunavariabley
conlaclasejava.text.FormatperopsmesaleunerroreniReportyenprogramitadejavanormalno,nosesitengaqueserconvariableso
conunscriptletysiesconunscriptletcomolopuedohacer???muchasgracias
PD.estaexcelenteeltutorial
Responder

Luna 8dejuliode2009,10:47
Unaduda,sitengounparametrocomostring,cualeslasintaxisparapasarloatipodatecuandolollamo.Yaquecuandolollamoenel
querylonecesitotipostring,peroparaeltitulodelreportecomodate.
Graxias
Responder

Alex

9dejuliode2009,7:59

HolaLuna
Todoloquequierasmostrarenlosreportesdebeserunacadena.Loquepodrashaceres,pasarelparmetrodosveces(unapara
usarlo en el query y otro para usarlo en el ttulo) o pasar el objeto Date como parmetro y posteriormente usar (dependiendo de los
formatosqueusesenamboscasos)elmtodoString.formatparaformatearlocomolonecesitasencadalugar.

http://www.j2ee.me/javase/6/docs/api/java/lang/String.html#format(java.lang.String,%20java.lang.Object...)
Esperoqueestotesirva,sinovemoscmosolucionarlo.
Saludos
Responder

FranklinGiovanni 10dejuliode2009,9:58
ComofuncionanlosparametrosList,oparametrosCollection?????
Sepodrianenviar3parametrosloscualessean3listas?
Responder

Alex

5deagostode2009,9:09

HolaFranklin,losparametrosquesonCollection(incluyendoList)funcionancomoelrestodelosparmetros,y,enteora,sideberias
poderpasarvariosparmetrosdeestetipo.
Saludosyperdonalademoraenlacontestacin.
Responder

Ral 17deagostode2009,21:38
Hola,muybuenmanual=)
Peronoscomohaceralgo.
Miraquierohacerquemeaparezcaunencabezado(porejemploprofesormateria)yquedespusenelDetailsedesplieguenlosdatos
queleenvodeunaList.
Pero inmediatamente despus de desplegar lo anterior quiero que aparezca otro encabezado(por ejemplo alumno calificacion) y
tambinquesedesplieguenlosdatosqueleenviodeotraList.
Miproblemaesquenoentiendocomopoderhacerlo,yaquesolotengounabanda"ColumHeader"yunabanda"Detail".
Cmopodrahacerlo?Algunaidea?DeantemanoGracias!
Responder

Ral 19deagostode2009,4:25

http://www.javatutoriales.com/2009/03/creaciondereportesconjasperrepotsy_30.html

10/20