Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/12/2007, 05:38
gitano79
 
Fecha de Ingreso: noviembre-2007
Mensajes: 7
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Subreport JRDataSource

Hola a todos, ya he conseguido hacer funcionar mi report con 3 subreport utilizando como conexion una JRDataSource. Me a costado mucho, pues la documentacion del ireport es una grandisima mierda. Para todo aquel que necesite hacer lo mismo, ahi va el codigo de mi aplicacion, para uso y beneficio de todos.
Los datos son inventados,pero sustituyendo los inventados por reales tiene que funcionar.
Los archivos .jasper los almacene en la maquina del servidor de la aplicacion. y la foto tambien.


No entro con mucho en este foro, pero con gusto respondere a las posibles dudas en "[email protected]".

Ahi va el codigo:

esta la clase que hace de "Action" para los que trabajen con java Strut:

FileInputStream fis=null; File fe=null;
FileOutputStream fos=null; File fs=null;

FileInputStream fisope=null;


String inf_fi_entrada="H:\\RecursosPortal\\Informes\\fich aExplotacion.jasper";

String inf_fi_salida="H:\\RecursosPortal\\Informes\\ficha Explotacion.pdf";




try {
fis = new FileInputStream(inf_fi_entrada);
fos = new FileOutputStream(inf_fi_salida);


} catch (Exception e1) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e1.printStackTrace(printWriter);

}

JRDataSource dataSource = Informe.createReportDataSource();

String subOperadores="H:\\RecursosPortal\\Informes\\opera doresSubreport.jasper";
String subServicios="H:\\RecursosPortal\\Informes\\atipic osSubreport.jasper";
String subAtipicos="H:\\RecursosPortal\\Informes\\servici osSubreport.jasper";

Object operadores=generaOperadores();
Object atipicos=generaAtipicos();
Object servicios=generaServicios();



Map parameters = new HashMap();

parameters.put("OPERADORES","H:\\RecursosPortal\\I nformes\\operadoresSubreport.jasper");
parameters.put("ATIPICOS","H:\\RecursosPortal\\Inf ormes\\atipicosSubreport.jasper");
parameters.put("SERVICIOS","H:\\RecursosPortal\\In formes\\serviciosSubreport.jasper");
parameters.put("IMAGEN","H:\\RecursosPortal\\Infor mes\\logo.jpg");





try{
JasperRunManager.runReportToPdfStream(fis,fos ,parameters, dataSource);
}catch (JRException e){
mmanager.reportWarning(e.getMessage());
}
fos.close();


La clase Informe que genera los datos debidamente ordenados, es :
public class Informe {
public static JRDataSource createReportDataSource()
{
JRBeanCollectionDataSource dataSource;
Collection reportRows = rellenaColeccion();
dataSource = new JRBeanCollectionDataSource(reportRows);
return dataSource;
}




public static Collection rellenaColeccion()
{
ArrayList reportRows = new ArrayList();
InputStream imagen=null;
String imagenn="";

Object operadores=generaOperadores();
Object atipicos=generaAtipicos();
// Object atipicos=null;
// Object operadores=null;
Object servicios=generaServicios();
// Object servicios=null; "C:\\Documents and Settings\\jnunez\\Escritorio\\DOCU-SAP\\operadoresSubreport.jasper";

String subOperadores="H:\\RecursosPortal\\Informes\\opera doresSubreport.jasper";
String subAtipicos="H:\\RecursosPortal\\Informes\\atipico sSubreport.jasper";
String subServicios="H:\\RecursosPortal\\Informes\\servic iosSubreport.jasper";
try{

imagen=null;
imagenn="H:\\RecursosPortal\\Informes\\logo.jpg";
}catch(Exception e){
e.printStackTrace();
}
reportRows.add(new CabeceraReSub("nombre","direccion","cp","provincia ","propietario","porcentaje","sociedad","responsab le","tlf","fax","fechaApertura","superficieTotal", "superficieBruta","parcelas","numComercio","mixCom ercial","numPlantComercial","numPlantAparca","numP lantAparcaInt","numPlantAparcaExt","conUtil","aflu encia","presupuesto","horarioSemana","horarioFin", "presupuestoTotal","superficieAlqui","gerente",ima genn, operadores,atipicos,servicios,subOperadores,subAti picos,subServicios));


return reportRows;



}
public static Object generaOperadores(){
Object operadores=null;
ArrayList ope=new ArrayList();
InputStream imagen=null;
try{
imagen=null;
ope.add(new Operadores("empresa1","rotulo1","actividad1","supe rficie1","renta1",imagen));
ope.add(new Operadores("empresa22","rotulo22","actividad22","s uperficie22","renta2",imagen));
ope.add(new Operadores("empresa3","rotulo22","actividad22","su perficie22","renta2",imagen));
ope.add(new Operadores("empresa4","rotulo224","actividad22","s uperficie22","renta2",imagen));
ope.add(new Operadores("empresa5","rotulo22","actividad22","su perficie22","renta2",imagen));
ope.add(new Operadores("empresa6","rotulo22","actividad22","su perficie22","renta2",imagen));
ope.add(new Operadores("empresa112","rotulo1","actividad1","su perficie1","renta1",imagen));
ope.add(new Operadores("empresa221234","rotulo2234t5","activid ad24682","superficie2356832","renta46782",imagen)) ;
ope.add(new Operadores("empresa3134513","rotulo22134","activid ad24682","superficie86722","renta4682",imagen));
ope.add(new Operadores("empresa4345","rotulo22134t4","activida d24682","superficie246782","renta4682",imagen));
ope.add(new Operadores("empresa51345","rotulo22134t","activida d2567842","superficie46784622","renta46782",imagen ));
ope.add(new Operadores("empresa61345","rotulo21348u67582","act ividad246782","superficie467822","renta46782",imag en));
operadores=new JRBeanCollectionDataSource(ope);

}catch(Exception e){
e.printStackTrace();
}


return operadores;
}
public static Object generaAtipicos(){
Object atipicos=null;
ArrayList ati=new ArrayList();
InputStream imagen=null;
try{
imagen=null;
ati.add(new Atipicos("maquinas","secur","julian mengano","123123","09870987",imagen));
ati.add(new Atipicos("maquinas22","secur22","julian22 mengano","222123123","22209870987",imagen));
ati.add(new Atipicos("maquinas33","secur33","julian mengano33","12312334","09870987",imagen));
ati.add(new Atipicos("maquinas44","secur44","julian22 mengano44","222123123","22209870987",imagen));
ati.add(new Atipicos("maquinas72457","secur456835","julian mengano3567","1231233567","09870987",imagen));
ati.add(new Atipicos("maquinas22287257","secur223586275","juli an22 mengano","222123123","22209870987",imagen));
ati.add(new Atipicos("maquinas33268257","secur25724533","julia n mengano324753","12312334","09870987",imagen));
ati.add(new Atipicos("maquinas442472457","secur24724744","juli an22 mengano4247245","222123123","22209870987",imagen)) ;
atipicos=new JRBeanCollectionDataSource(ati);

}catch(Exception e){
e.printStackTrace();
}


return atipicos;
}
public static Object generaServicios(){
Object servicios=null;
ArrayList ser=new ArrayList();
InputStream imagen=null;
try{
imagen=null;
ser.add(new Servicios("tipoServicio","empresa","912345678","90 1876234","perContac","fechaFin","perioPre","frecSe rvi","precio",imagen,"duracion"));
ser.add(new Servicios("tipoServicio23","empresa32","tlf23","fa x23","perContac32","fechaFin23","perioPre23","frec Servi23","precio32",imagen,"duracion"));
ser.add(new Servicios("tipoServicio2","empresa2","tlf2","fax2" ,"perContac2","fechaFin2","perioPre2","frecServi2" ,"precio2",imagen,"duracion"));
ser.add(new Servicios("tipoServicio22","empresa22","tlf22","fa x22","perContac22","fechaFin22","perioPre22","frec Servi22","precio22",imagen,"duracion"));
ser.add(new Servicios("tipoServicio72457","empresa458635","912 345678","901876234","perContac","fechaFin","perioP re","frecServi","precio",imagen,"duracion"));
ser.add(new Servicios("tipoServicio22712453","empresa34568232" ,"912736458","912736458","baltasar escribano","fechaFin23","perioPre23","frecServi23" ,"precio32",imagen,"duracion"));
ser.add(new Servicios("tipoServicio2725721457","empresa5356832 ","912736458","912736458","manuel rodrigurz","fechaFin2","perioPre2","frecServi2","p recio2",imagen,"duracion"));
ser.add(new Servicios("tipoServicio2265845672","empresa2535682 ","912736458","912736458","perContac22","fechaFin2 2","perioPre22","frecServi22","precio22",imagen,"d uracion"));

servicios=new JRBeanCollectionDataSource(ser);

}catch(Exception e){
e.printStackTrace();
}


return servicios;
}


}

Despues solo tienes que contruirte los javaBean con sus get(),set(), y constructor
Tienes que tener 4 javaBean.
uno generico para construir el objeto del report Master y otros 3 para los subreport.Tienes un ejemplo real de como hacerlo en el mensaje anterior.

Gracias a todos los que colaborais en este foro.
Un Saludo