Sei sulla pagina 1di 13

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
8

Ms Siguienteblog

TutorialesdeProgramacionJava
BlogdedicadoatemasdeprogramacinactualesusandoellenguajedeprogramacinJavaylasltimasversionesdesusAPIsyHerramientas.
Pginaprincipal

PginadeConcursos

TutorialesUPAO2010

PresentacionesCapacitacin

LUNES,2DEMARZODE2009

Creacin de Reportes con JasperRepots y iReports Parte 2: Uso de


DataSourcesPersonalizados
EnelprimerpostdelaseriedeJasperReportshabldecmocrearunabibliotecaparatrabajarconJasperReports y cmo crear un
reporteenmltiplesformatos.AdemshicimosunejemplodecreacindereportesusandounaconexinJDBCdirectaanuestrabasede
datos.
Ahora veremos cmo generar nuestros reportes sin hacer uso de una conexin. Esto puede ser muy til en los casos en los que ya
tengamoslosdatosenmemoriaynonecesitemosrealizarunaconexinalabasededatosoenelcasoenque,poralgunaraznajena
anosotros,nopodamosobtenerlaconexin.
Para poder hacer esto se nos proporciona una interface: "net.sf.jasperreports.engine.JRDataSource". Esta interface tiene
solodosmtodos:

DONACIONES

JAVATUTORIALESENFACEBOOK

JavaTutoriales
Megusta

JavaTutorialesha
aadidounafotonueva.
13demarzo

getFieldValue(JRFieldjrField)
next()
Explicarestosmtodosunpocomsadelante,porahoracomencemosagenerartodolonecesarioparatenernuestroreporte.
CreamosunnuevoproyectoenNetBeans(men"File>NewProject...").Enlaventanadenuevosproyectosseleccionamosla
categora "Java" y como tipo de proyecto seleccionamos "JavaApplication" y hacemos clic en el botn "Next". En la siguiente
ventanaintroducimoselnombredenuestroproyectoydejamosseleccionadalasopciones"CreateMainClass" y "SetasMain
Project".
Para que podamos pasar datos a nuestro reporte es necesario que utilicemos un datasource. En el ejemplo anterior veamos que el
datasourcequeusbamoseralabasededatosylaconexinalamisma.Enestaocasineldatasourceserunadenuestrasclases.
Esta clase deber implementar la interface "JRDataSource" y contendr la lgica para pasar los datos correspondientes a nuestro
reporte.

16MegustaSehacompartido1vez

Megusta

Comentar

A24386personaslesgustaJavaTutoriales

Creamosunanuevaclasehaciendoclicderechosobreelnodo"SourcePackages"delaventana"Projects",osobreelpaqueteque
yatenemoscreado,yenelmencontextualqueseabreseleccionamoslaopcin"New>JavaClass...".

PluginsocialdeFacebook

Enlaventanaqueseabreescribimoscomoennombredelanuevaclase"Participante"ypresionamoselbotn"Finish".Conesto
veremosenlaventanadenuestroeditorlanuevaclase"Participante".
Esta clase "Partcipante" representar los datos que se mostrarn en el reporte, tal como en el ejemplo anterior cada uno de los
registrosdelatabla"participantes"representabaunafilaenelreportefinal,cadaobjetoparticipantequecreemosrepresentaruna
filaenelnuevoreporte.
Agreguemoslossiguientesatributosanuestraclase:

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

1/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados

privateintid;
privateStringnombre;
privateStringusername;
privateStringpassword;
privateStringcomentarios;

Ademsagregamossusgettersysussettersydosconstructores, uno sin argumentos y uno que reciba como argumentos todas
laspropiedadesdeclaradasanteriormente.
Si estn utilizando el NetBeans para seguir este tutorial pueden generar tanto los setters y los getters de forma automtica
presionandolasteclas"Alt+Insert",conlocualseabrirunmencontextualconlasopcionesnecesariasparahaceresto:

Alterminar,suclasedebeversemsomenosas:

SEGUIDORES

Participarenestesitio
GoogleFriendConnect

Miembros(195) Ms

Yaeresmiembro?Iniciarsesin

ARCHIVODELBLOG

2015(1)
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...
febrero(2)
enero(3)

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

2/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados

publicclassParticipante
{
privateintid;
privateStringnombre;
privateStringusername;
privateStringpassword;
privateStringcomentarios;
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;
}

DATOSPERSONALES

Alex

Programador Java con algunos ao


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

publicStringgetNombre()
{
returnnombre;
}
publicvoidsetNombre(Stringnombre)
{
this.nombre=nombre;
}
publicStringgetPassword()
{
returnpassword;
}
publicvoidsetPassword(Stringpassword)
{
this.password=password;
}
publicStringgetUsername()
{
returnusername;
}
publicvoidsetUsername(Stringusername)
{
this.username=username;
}
}

Ahora,antesdeseguirconnuestrocdigoJava,pasaremosacrearlaplantilladenuestroreporteconiReport,porloqueabrimosesta
herramienta.
En esta ocasin no haremos uso de un wizard para crear el reporte, sino que lo haremos desde cero, y aprovechar para explicar

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

3/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
algunosconceptosbsicossobrelosreportesconformelosvayamosnecesitando.
Paracrearelnuevoreportevamoselmen"File>New...".Enlaventanaqueseabreseleccionamosunodelosformatos"Blank"
ypresionamoselbotn"OpenthisTemplate":

Despus introducimos el nombre del reporte, yo lo llamar "reporte2.jrxml", y la ubicacin en la que se guardar. Les recomiendo
queenestaocasinguardenelreporteeneldirectoriorazdelproyectodeNetBeansqueacabamosdecrear.Hacemosclicenelbotn
"Next" y se nos mostrar un mensaje de felicitacin por haber creado un nuevo reporte (^_^!). Cuando presionen el botn "Finish"
vernunahojadivididaen7u8diferentesporcioneshorizontalesllamadasbandas.

Cuandogeneramosnuestroreportefinalcondatos,cadaunadeestasbandassecomportadeunaformadistinta.Algunasaparecensolo
alprincipiooalfinaldelreporte,otrasaparecenconcadanuevafilaqueseleagrega,otrassoloalfinaldelosdatos,etc.
Laplantilladereportesestdivididaen10bandaspredefinidas.Unabandasiempretieneelmismoanchoquelapgina.Sinembargoel
altodealgunasdelasbandaspuedevariardurantelafasedellenadodedatos,ansiestablecimosunaltoenelmomentodeldiseo.
Lasbandasexistentesson:
Background
Title
PageHeader
ColumnHeader
Detail1
ColumnFooter
PageFooter
LastPageFooter
Summary
NoData
Explicaralgunasdeestasbandasconformelasvayamosusandoenlostutorialescorrespondientes.
Lo primero que haremos es agregar texto a nuestro reporte. En iReport existen dos tipos de texto: texto esttico y texto dinmico
(tambin llamado expresiones). El texto esttico es aquel que no cambia, mientras que las expresiones son como etiquetas que le
indicanaJasperReportsquedebereemplazarlasporalgnvaloralmomentodegenerarelreportefinal.
Existen3tiposdeexpresiones:
Campos(fields)representadoscon"$F{nombre_campo}".
Variablesrepresentadaspor"$V{nombre_variable}".
Parmetrosrepresentadospor"$P{nombre_parmetro}".
Cadaunodeestostiposdeexpresionestieneunusoparticular:

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

4/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
Los campos ("$F{}") le dicen al reporte dnde colocar los valores obtenidos a travs del datasource. Por ejemplo, nuestro objeto
"Partcipante"tieneunatributollamado"username".Usandounaexpresindecampoindicamosenculparteoseccindelreporte
debeaparecerelvalordeeseatributousando"$F{username}".Estoquedarmsclarounpocomsadelante.
Losparmetros("$P{}")sonvaloresqueusualmentesepasanalreportedirectamentedesdeelprogramaquecreaelJasperPrint del
reporte (en nuestra aplicacin Java). Aunque tambin existen algunos parmetros internos que podemos leer pero no modificar. Para
hacer uso de estos parmetros simplemente indicamos el nombre del parmetro en el lugar que queremos colocarlo. Pueden encontrar
losnombresysignificadosdelosparmetrosinternosenladocumentacindeJasperReports.
Las variables ("$V{}") son objetos usados para almacenar valores como los resultados de clculos. Al igual que con los parmetros,
JasperReports tiene algunas variables internas que podemos leer. Pueden encontrar los nombres y significados de las variables la
documentacindeJasperReports.
Cada uno de estos elementos tiene un nombre, un tipo (que debe corresponder con un tipo de objeto Java como String o
Integer), y una descripcin opcional. Adems deben ser registrados para poder ser usados en tiempo de diseo y que puedan ser
entendidos al momento de compilar el reporte, y por lo tanto para que nuestro reporte funcione correctamente en tiempo de ejecucin.
Estoloveremosunpocomsadelante.
Regresemosadondenosquedamos.Queremosagregaruntextoestticoanuestroreporteamododettulo.Paraestodebemosagregar
un elemento llamado "Static Text". Los elementos que podemos agregar a nuestros reportes estn en una ventana llamada
"Palette", que se encuentra en la parte derecha de iReport, bajo la categora "ReportElements". Si no pueden ver la ventana
"Palette"presionenlasteclas"Ctrl+Shift+8":

De esta ventana arrastramos el elemento "StaticText" a la banda "Title". "Title" es una banda que solo aparece en la parte
superiordelaprimerpgina.Porloquenossirveparacolocarelttulodelreportey/oelnombreylogodenuestraempresa.
Una vez que hayamos colocado el texto esttico en la banda correspondiente y mientras an est seleccionado, modificamos sus
propiedadesusandolaventanadepropiedadesdelelementoylabarradeformatodetexto.Tambinpodemosabrirotraventanaquenos
ayudeaalinearycontrolarelaltoyelanchodeloselementosyendoalmen"Window>FormattingTools".

Ahora agregamos los encabezados de las columnas en las que se mostrarn los datos que pasaremos al reporte. Agregamos estos
nombresenlabanda"ColumnHeader",lacualserepetirencadapginaantesdemostrarlosdatosdelascolumnas.
Agregaremos las columnas "Nombre", "Usuario", "Contrasea", y "Comentarios". Por lo que nuevamente arrastramos un
elemento "StaticText" para cada una de las columnas. Tambin podemos ajustar el alto de esta banda para que se ajuste al de
nuestrotexto,yaseamovindoladirectamenteeneldiseador,odesdelaventanadepropiedades:

Nuestroreporteyacasiestterminado,ahorasolonosquedaagregarloscamposenlosquesemostrarnlosdatosquepasaremosal
reporte en un momento. Para que estos campos puedan ser reemplazados por el valor real es necesario que usemos las expresiones

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

5/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
(textodinmico)delasquehablanteriormente.Paraestodefiniremosun"field"paracadaunodeloscamposquequeramosmostrar
(enestecasosernlosmismoscamposparalosquedefinimoslascabecerasdelascolumnas).
Losfieldsdebendefinirseantesdepoderserusados.Estadefinicinincluyeelnombredelfieldysutipo.Losfields(ascomoel
resto de las expresiones) se definen en la ventana "ReportInspector" a la izquierda del diseador del reporte. Ah existe un nodo
llamado"Fields"queesdondeseencuentranlosfieldsquehemosdefinidoyqueporlotantopodemosusar^^.
Hacemos clic derecho en el nodo "Fields" de la ventana "Report Inspector". Con esto se abre un men contextual.
Seleccionamoslaopcin"AddField"(lanicahabilitada).

Con esto se agregar un field llamado "field1" que por default es de tipo "java.lang.String". Cambiamos el nombre de este
campo por "nombre" usando la ventana de propiedades. Esto es importante porque donde pongamos este campo ser en donde se
muestreelvalordelcamponombredenuestrosobjetosParticipantes.

Hacemos lo mismo para el resto de los campos ("username", "password", "comentarios", "id"). Hay que tener cuidado cuando
agreguemos el field "id". Si recuerdan, en la definicin de la clase "Participante" la propiedad "id" est definida como "int". Sin
embargo,aJasperReportssolopodemospasarleobjetosparaserusadoscomovalores,porloquesernecesariocambiareltipode
laclase("FieldClassenlaventanadepropiedades)a"java.lang.Integer"(aunqueenrealidadnomostraremosel"id" en este
ejemplo).

Ahora debemos indicar en qu parte de nuestro reporte queremos que se muestren los valores correspondientes a los atributos de los
objetos"Participante"quelepasemos.Paraesosimplementearrastramoslosfieldscorrespondientesallugarenelquequeremos
que se muestren (arrastramos el field "nombre" a donde queremos que se muestre el atributo "nombre", el campo "username" en
donde queremos que se muestre el atributo "username", etc.) desde el "Report Inspector". Al arrastrar los fields, iReport
agregarautomticamenteunencabezadoparaestefield,soloborrenelencabezadoagregado=).
Estosfieldsloscolocaremosenlabanda"Detail1"lacualserepitecadavezquerecibeunnuevoobjetoycolocasusvaloresenla
mismafila(quedarmsclarocuandoejecutemoselejemplo).Alfinal,elreportedebequedardelasiguienteforma:

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

6/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados

Por el momento esto es todo lo que necesitamos hacer en iReport para mostrar este reporte bsico. Hacemos clic en el botn
"CompileReport"paracompilarelreporteygenerarsuarchivo".jasper"respectivo.
Podemosverunavistapreviadelreportehaciendoclicenlapestaa"Preview".Asegrensedeseleccionarel"Emptydatasource"
antesdeverelpreview,delocontrariolesaparecerunerrorindicadoqueeldocumentonotienepginas.Alfinaldebenveralgocomo
esto:

Los"nulls"aparecenporquenoserecuperningnvalorquecoincidieraconelnombredeesefieldusandonuestrodatasource(que
enestecasoestvaco,locualsolucionaremosacontinuacin).
RegresamosalNetBeansyahoracrearemosunaclasequeimplementelainterface"JRDataSource"delaquehablantes.Estaclase
serlaqueusaremoscomodatasourceparanuestroreporte,ylaqueregresarlosvalorescorrespondientesacadaunodelosfieldsque
creamosantes.
Primeroagregamosanuestroproyectolalibreria"JasperReports"quecreamosenelprimertutorialdelaseriedeJasperReports. En
estaocasinnonecesitaremosagregareljarconelDriverdelabasededatos,yaquenousaremosninguna^_^.
Creamos una nueva clase llamada "ParticipantesDatasource" y hacemos que esta nueva clase implemente la interface
"JRDataSource".PodemoshacerqueNetBeansimplementedeformaautomticalosmtodosdeestainterface(proporcionandouna
implementacin vaca) presionando las teclas "Alt + Insert" y seleccionando la opcin "Implement Method" en el men
contextualqueseabre.

Con esto se abrir una ventana llamada "GenerateImplementMethods" en la cual seleccionamos la interface "JRDataSource"
paraqueseseleccionendeformaautomticatodossusmtodosyhacemosclicenelbotn"Generate".

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

7/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
Conestotendremoslosdosmtodosimplementadosyencuyoscuerpossolohabr:

thrownewUnsupportedOperationException("Notsupportedyet.");

Ahora agregaremos a nuestra clase un atributo de tipo "java.util.List" llamado "listaParticipantes" que mantendr
justamenteeso:lalistadelosparticipantesdeloscualesmostraremoslosdatosenelreporte.Inicializamosestalistaaunobjetodetipo
"java.util.ArrayList",deestaforma:

privateList<Participante>listaParticipantes=newArrayList<Participante>();

Tambinagregamosuncontadorllamado"indiceParticipanteActual"detipo"int",queusaremosenseguida,yloinicializamosa
"1"unpocomsadelanteexplicarporquestevalor:

privateintindiceParticipanteActual=1;

Hastaahoranuestraclasedebeverseas:

publicclassParticipantesDatasourceimplementsJRDataSource
{
privateList<Participante>listaParticipantes=newArrayList<Participante>();
privateintindiceParticipanteActual=1;

publicObjectgetFieldValue(JRFieldjrf)throwsJRException
{
thrownewUnsupportedOperationException("Notsupportedyet.");
}
publicbooleannext()throwsJRException
{
thrownewUnsupportedOperationException("Notsupportedyet.");
}
}

AhoraimplementaremoselmtodogetFieldValue.EstemtodorecibeunargumentodetipoJRField.Esteparmetronosindicar
porculdelos"fields"nosestpreguntandoelreporte.
En la implementacin de este mtodo regresaremos los valores correspondientes a cada uno de los atributos de nuestros objetos
"Participante"conformesevayanpidiendo.Porloqueelmtodoquedaas:

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

8/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados

publicObjectgetFieldValue(JRFieldjrField)throwsJRException
{
Objectvalor=null;
if("nombre".equals(jrField.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getNombre();
}
elseif("username".equals(jrField.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getUsername();
}
elseif("password".equals(jrField.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getPassword();
}
elseif("comentarios".equals(jrField.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getComentarios();
}

returnvalor;
}

Donde bsicamente ocurre lo que dije anteriormente: cada vez que el reporte pregunta por el valor de un atributo del objeto
"Participante" actual (al que hace referencia el contador "indiceParticipanteActual") se regresa el valor correspondiente.
EstapeticinsehaceenbasealnombredelfieldquecreamosdesdeiReport.
Ahoratalvezseestnpreguntandoenqumomentoseincrementaelcontador?,ocmosabeJasperReportcuntosparticipantes
existen?Puesbien,ambascosasocurrengraciasalaimplementacindelmtodo"next()".

publicbooleannext()throwsJRException
{
return++indiceParticipanteActual<listaParticipantes.size();
}

JasperReportpreguntaaestemtodoparasabersiexisteotro"Participante"enlalista.Estemtodoeselprimeroquesellama
algenerarelreporte.Porloqueelcontadordebecomenzaren"1",ascuandoestemtodosellamalaprimeravezelcontadorqueda
en"0",ycuandoseinvocaalmtodo"getFieldValue"seregresaelobjetoParticipantedelndiceadecuado.
Esto es todo lo que necesitamos para que nuestro datasource funcione para generar reportes. Agregar un mtodo de utilidad a esta
clase,llamado"addParticipante",quemepermitaagregarunnuevoparticipantealalista(aunquesiloprefierenpuedenagregarel
setterde"listaParticipantes"):

publicvoidaddParticipante(Participanteparticipante)
{
this.listaParticipantes.add(participante);
}

Laclase"ParticipantesDatasource"quedadeestaforma(omitiendolosimports):

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

9/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados

publicclassParticipantesDatasourceimplementsJRDataSource
{
privateList<Participante>listaParticipantes=newArrayList<Participante>();
privateintindiceParticipanteActual=1;
publicObjectgetFieldValue(JRFieldjrf)throwsJRException
{
Objectvalor=null;
if("nombre".equals(jrf.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getNombre();
}
elseif("username".equals(jrf.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getUsername();
}
elseif("password".equals(jrf.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getPassword();
}
elseif("comentarios".equals(jrf.getName()))
{
valor=listaParticipantes.get(indiceParticipanteActual).getComentarios();
}
returnvalor;
}
publicbooleannext()throwsJRException
{
return++indiceParticipanteActual<listaParticipantes.size();
}
publicvoidaddParticipante(Participanteparticipante)
{
this.listaParticipantes.add(participante);
}
}

Parafinalizaragregaremosennuestraclase"Main"unciclodentrodelcualcrearemos10objetos"Participante", los cuales iremos


agregandounoaunoaunobjetodetipo"ParticipantesDatasource":

ParticipantesDatasourcedatasource=newParticipantesDatasource();
for(inti=1;i<=10;i++)
{
Participantep=newParticipante(i,"Particpante"+i,"Usuario"+i,"Pass"+i,"Comentariospara
"+i);
datasource.addParticipante(p);
}

El resto del cdigo para generar el reporte es similar al del primer tutorial de JasperReports, solo que en esta ocasin en lugar de
pasar un objeto de tipo "Connection" al mtodo "fillReport" del "JasperFillManager" pasamos nuestro objeto
"ParticipantesDatasource"deestaforma:

JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,null,datasource);

Alfinalelcdigodenuestraclase"Main"quedaas:

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

10/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados

publicclassMain
{
publicstaticvoidmain(String[]args)throwsException
{
ParticipantesDatasourcedatasource=newParticipantesDatasource();
for(inti=1;i<=10;i++)
{
Participantep=newParticipante(i,"Particpante"+i,"Usuario"+i,"Pass"+i,"Comentari
ospara"+i);
datasource.addParticipante(p);
}
JasperReportreporte=(JasperReport)JRLoader.loadObject("reporte2.jasper");
JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,null,datasource);
JRExporterexporter=newJRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,newjava.io.File("reporte2PDF.pdf"));
exporter.exportReport();
}
}

Alejecutarestecdigodebemosterminarconunarchivollamado"reporte2PDF.pdf" en el directorio raz de nuestro proyecto y que


tieneelsiguientecontenido:

Podrnoserelreportemsbelloomstildelmundo,peroesnuestro=D.
Podemosverquelosdatosimportantes(losdatosdelos"Participantes")aparecenenlabanda"Details1"(dondecolocamoslos
fields)yqueestabandaserepiteporcadaunodelosparticipantesdelalista.
Bien, con esto vemos que podemos crear nuestros propios datasources y pasar datos para generar reportes sin la necesidad de una
conexin a base de datos. Es bastante sencillo, solamente debemos proporcionar una clase que implemente la interface
"JRDataSource"yqueregreselosvalorescorrespondientesalosfieldsdelreporte.
Aunqueestoyaesbastantefcilytil,existeunaformaanmssimpleparacrearundatasource,sinlanecesitaddeimplementarla
interface"JRDataSource".EstoesgraciasaunconjuntodeclasesqueJasperReportsyanosproporcionayrealizanbsicamentela
mismafuncinquelaclase"ParticipantesDatasource"queacabamosdecrear.Estasclasesson:
JRBeanCollectionDataSource
JRJpaDataSource
JRBeanArrayDataSource
Lascualesyaimplementanlainterface"JRDataSource".Cadaunafuncionacondistintostiposdedatos,peroenquenosinteresaen
este momento es "JRBeanCollectionDataSource" que puede convertir una "java.util.Collection" en un DataSource de
formaautomtica.Modificaremosnuestromtodo"main"parahacerusodeestaclase.
Ahora,envezdellenarnuestro"ParticipantesDatasource"enelciclosimplementellenaremosun"java.util.List":

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

11/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados

ListlistaPariticipantes=newArrayList();
for(inti=1;i<=10;i++)
{
Participantep=newParticipante(i,"Particpante"+i,"Usuario"+i,"Pass"+i,"Comentariospara
"+i);
listaPariticipantes.add(p);
}

Yenlugardepasarunobjetodetipo"Connection"almtodo"fillReport"del"JasperFillManager" pasamos un nuevo objeto


"JRBeanCollectionDataSource"construidoconlalista"listaPariticipantes":

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

Alfinalnuestraclase"Main"quedaas:

publicclassMain
{
publicstaticvoidmain(String[]args)throwsException
{
ListlistaPariticipantes=newArrayList();
for(inti=1;i<=10;i++)
{
Participantep=newParticipante(i,"Particpante"+i,"Usuario"+i,"Pass"+i,"Comentari
ospara"+i);
listaPariticipantes.add(p);
}
JasperReportreporte=(JasperReport)JRLoader.loadObject("reporte2.jasper");
JasperPrintjasperPrint=JasperFillManager.fillReport(reporte,null,newJRBeanCollectionDataSource
(listaPariticipantes));
JRExporterexporter=newJRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,newjava.io.File("reporte2PDF_2.pdf"));
exporter.exportReport();
}
}

Al ejecutar este cdigo se genera el archivo "reporte2PDF_2.pdf" en el directorio raz de nuestro proyecto, con el siguiente
contenido:

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

12/26

14/4/2015

TutorialesdeProgramacionJava:CreacindeReportesconJasperRepotsyiReportsParte2:UsodeDataSourcesPersonalizados
Elcualesidnticoalreportegeneradoconlaclase"ParticipantesDatasource".
Yconestovemosquegraciasalaclase"JRBeanCollectionDataSource"noesnecesarioqueproporcionemosnuestrapropiaclase
queimplementelainterface"JRDataSource",porloquelageneracindereportesesanmssimple^^.
Bien,estoestodoporahora.Esperoqueestepostlesseadeutilidad.
En el siguiente tutorial hablar de cmo funcionan los parmetros y las variables en JasperReport, para lo cual haremos uso del
reportequeacabamosdecrear.
Graciasatodosynoolvidendejarsusdudas,comentarios,ysugerencias.Todoesbienvenido.
Saludos.
Descargalosarchivosdeestetutorialdesdeaqu:
ReporteconDatasourcePropio

EntradasRelacionadas:
Parte1:ReportesconConexinaBasesdeDatos
Parte3:ParmetrosyVariables
Parte4:Reportesenaplicacionesweb
Parte5:GrficasenReportes
Parte6:Grupos
Parte7:Subreportes
PublicadoporAlexen20:57

divertido (0)

Reacciones:

interesante (2)

increible (0)

no me gusta (0)

+8 Recomendar esto en Google


Etiquetas:ireports,jasperreports,java,reportes

74comentarios:
anthe 12deabrilde2009,17:03
Amigomepodriasayudar,coneltemaderealizarunaconeccionconhibernate,larealizoynoconsigounbuenresultadosoloun"cannot
openconnection",agregeelconectorelpathdondeestaelmapeodelabaseperoparecequealgoestamal,soyneofitaeneltemayno
encuentrounasolucionhelp!!
Responder

ProgramadorJava 12deabrilde2009,18:03
HolaAnthe.
Claroquesi,puedoayudarteconmuchogusto.Solonecesitounpocomsdeinformacinsobrequeestshaciendo.Supongoqueestas
haciendo uso de un DataSource propio (ya sea implementando la interface JRDataSource o a travs de un
JRBeanCollectionDataSource), y que obtienes los datos a travs de Hibernate. Estoy en lo correcto?, o lo estas haciendo de otra
forma?
Podrasdecirmeenqulneatedaelerror?,ohayformadequesubastucdigoaalgnsitioparapoderrevisarlo?.
Saludos
Responder

Annimo 19deabrilde2009,10:40
Hola
Disculpaparaquesonlos"seters"ylos"geters"??
SAludos
Miguel.
Responder
Respuestas
AramSalinas 10deabrilde2013,10:24
mmmmhserefierealosmtodosrelacionadosalaspropiedades,comoasignarlesunvalor"SET"orecuperarunvalor"GET"
deellas.
saludos!
Responder

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

13/26

Potrebbero piacerti anche