Академический Документы
Профессиональный Документы
Культура Документы
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".
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)
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