Foros del Web » Programación para mayores de 30 ;) » Java »

Subreport JRDataSource

Estas en el tema de Subreport JRDataSource en el foro de Java en Foros del Web. Hola a todos es mi primera consulta en este foro, aunque llevo unos dias leyendo respuestas. Primero gracias a todos los que colaboran en este ...
  #1 (permalink)  
Antiguo 30/11/2007, 06:16
 
Fecha de Ingreso: noviembre-2007
Mensajes: 7
Antigüedad: 16 años, 5 meses
Puntos: 0
Subreport JRDataSource

Hola a todos es mi primera consulta en este foro, aunque llevo unos dias leyendo respuestas. Primero gracias a todos los que colaboran en este foro.

Ahi va mi problema:

Necesito generar un informe con 3 subinfome utilizando JRDataSource.

Lo he conseguido hacer funcionar en el ireport. Pero cuando paso el desarrollo a mi aplicacion (una Webdynpro corriendo sobre un portal SAP) me genera el report principal pero sin los subreport.
Explicaré como lo he conseguido en el ireport, por si a alguien le sirve de algo:

Creo 4 informes separados 1 que me servira como reportMaster y 3 como Subreport.

La ruta a los subreport, se la paso como un "Field" mas de la clase principal o como parametro siempre de tipo "String" y de las dos formas funcionan, los datos para llenar los subinformes se los paso con un "Field" mas de la clase principal pero de tipo Object, donde a ese objeto le he cargado un "new JRBeanCollectionDataSource( ArrayList reportRows)" y de igual modo con el resto de subinformes. Ahi va el codigo de las clases java que he creado para hecerlo funcionar en el Ireport:


public static Object generaOperadores(){
Object operadores=null;
ArrayList ope=new ArrayList();
InputStream imagen=null;
try{
imagen=new BufferedInputStream(new FileInputStream("C:\\Documents and Settings\\jnunez\\Escritorio\\logo.jpg"));
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));
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=new BufferedInputStream(new FileInputStream("C:\\Documents and Settings\\jnunez\\Escritorio\\logo.jpg"));
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));
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=new BufferedInputStream(new FileInputStream("C:\\Documents and Settings\\jnunez\\Escritorio\\logo.jpg"));
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"));
servicios=new JRBeanCollectionDataSource(ser);

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


return servicios;
}

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;
String subOperadores="C:\\Documents and Settings\\jnunez\\Escritorio\\DOCU-SAP\\operadoresSubreport.jasper";
String subServicios=".\\serviciosSubreport.jasper";
String subAtipicos=".\\atipicosSubreport.jasper";
try{

imagen=new BufferedInputStream(new FileInputStream("C:\\Documents and Settings\\jnunez\\Escritorio\\logo.jpg"));
imagenn="C:\\Documents and Settings\\jnunez\\Escritorio\\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;

}[/HTML]

La conexion creada para que el ireport rellene el informe principal con lo 3 subinformes le indico que use la funcion "rellenaColeccion".

Las clases "Operadores", "Atipicos","Servicios" son unas clases normales en java con sus atributos y sus metodos getr y set y su contructor.

y la clase "CabeceraReSub" es lo mismo ahi va el constructor (no pongo los get y set y los atributos por falta de espacio).




public CabeceraReSub(
String nombre,
String direccion,
String cp,
String provincia,
String propietario,
String porcentaje,
String sociedad,
String responsable,
String tlf,
String fax,
String fechaApertura,
String superficieTotal,
String superficieBruta,
String parcelas,
String numComercio,
String mixComercial,
String numPlantComercial,
String numPlantAparca,
String numPlantAparcaInt,
String numPlantAparcaExt,
String conUtil,
String afluencia,
String presupuesto,
String horarioSemana,
String horarioFin,
String presupuestoTotal,
String superficieAlqui,
String gerente,
String imagen,
Object operadores,
Object atipicos,
Object servicios,
String subOperadores,
String subAtipicos,
String subServicios){

setNombre(nombre);
setDireccion(direccion);
setCp(cp);
setProvincia(provincia);
setPropietario(propietario);
setPorcentaje(porcentaje);
setSociedad(sociedad);
setResponsable(responsable);
setTlf(tlf);
setFax(fax);
setFechaApertura(fechaApertura);
setSuperficieTotal(superficieTotal);
setSuperficieBruta(superficieBruta);
setParcelas(parcelas);
setNumComercio(numComercio);
setMixComercial(mixComercial);
setNumPlantComercial(numPlantComercial);
setNumPlantAparca(numPlantAparca);
setNumPlantAparcaInt(numPlantAparcaInt);
setNumPlantAparcaExt(numPlantAparcaExt);
setConUtil(conUtil);
setAfluencia(afluencia);
setPresupuesto(presupuesto);
setHorarioSemana(horarioSemana);
setHorarioFin(horarioFin);
setPresupuestoTotal(presupuestoTotal);
setSuperficieAlqui(superficieAlqui);
setGerente(gerente);
setImagen(imagen);
setOperadores(operadores);
setAtipicos(atipicos);
setServicios(servicios);
setSubOperadores(subOperadores);
setSubAtipicos(subAtipicos);
setSubServicios(subServicios);

}[/HTML]



En el ireport Funciona de puta madre, muestra la imagen en todas las paginas( el elemento imagen esta puesto en la banda "page header" sino no se repite en todas las paginas y es de tipo String donde le cargo la ruta del fichero).


Pero luego cuando paso esto ami aplicacion no me rellena los subinformes, y el codigo es practicamentre igual:

Los metodo utilizados para rellenar los subinforme en mi aplicacion son dos (debido ami desesperacion he probado ya de todo);

1 metodo:

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");
parameters.put("SUBREPORT_OPERADORES",operadores);
parameters.put("SUBREPORT_ATIPICOS",atipicos);
parameters.put("SUBREPORT_SERVICIOS",servicios);


JasperRunManager.runReportToPdfStream(InputFile,OU TputFile ,parameters, JRDataSource);


2 metodo:

InputStream master=new FileInputStream("H:\\RecursosPortal\\Informes\\fic haExplotacion.jasper");


JasperReport reportMaster=JasperManager.loadReport(master);


JasperPrint impressao = JasperFillManager.fillReport(reportMaster, parameters, dataSource);


JasperExportManager.exportReportToPdfFile(impressa o, "H:\\RecursosPortal\\Informes\\fichaExplotacion.pd f");

Y nada me enseña el pdf pero solo con los datos del report Principal..


Si alguien tiene alguna idea de lo puede estar pasando, se lo agredecere mil:


Gracias de antemano y si alguien quiere hacer funcionar este ejemplo en el ireport, que me de su direccion y le mando todo los archivos(jrxml, jasper , java,class, y demas mierda codificada).


Saludos
  #2 (permalink)  
Antiguo 04/12/2007, 05:38
 
Fecha de Ingreso: noviembre-2007
Mensajes: 7
Antigüedad: 16 años, 5 meses
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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:09.