Jasper: Sub relatório com dados de mais de uma tabela

4 respostas
T

Oi gente,

estou com um problema na geração de um relatorio com subrelatorio.

Eu estou seguindo o tutorial do Furutani (http://br.geocities.com/robertofurutani/java/Tutorial_JasperReports/index.htm) para fazer meu relatorio, mas nao to conseguindo.

Antes de dizer o problema vou explicar meu relatorio. Tenho a tabela Grupo, Item e ItemCardapio. A tabela Item tem uma relação de 1…n com Item Cardapio e ItemCardapio tem relação de 1…1 com Item
Eu quero listar todos os grupos e, para cada grupo, um subrelatorio lista as propriedades de item e ItemCardapio.

Bom, a ligação entre o relatorio e o subrelatorio se da atraves do campo ListaItens.

No método getFieldValue da classe ItemDataSource, qdo ele encontra o campo ListaItens, eu digo que o valorAtual é uma lista de Object que eu pego de um DAO. Essa lista contem informações sobre o item e o itemCardapio relacionados ao grupo atual. Por conter informações sobre duas tabelas diferentes o tipo dessa lista é Object.

Um trecho da classe ItemDataSource é mostrada abaixo:

public Object getFieldValue(JRField campo) throws JRException {
		Object valor = null;
		Grupo grupo = (Grupo) valorAtual;		
		
		if ("id".equals(campo.getName())) {
			valor = grupo.getId();
			
		} else if ("ListaItens".equals(campo.getName())) {
			List<Object> lista= null;
			try{
				lista = dao.findItemItemCardapioByGrupo(grupo.getId());	
			}
			catch(Exception e){
				e.printStackTrace();
			}
	
			valor = new JRBeanCollectionDataSource(lista);
			
	
		} else if ("descricao".equals(campo.getName())) {
			valor = grupo.getDescricao();
		}
		return valor;	
	}

Porém ta dando a excecao:

Onde preco é um atributo da classe Item.

Quando eu testei com uma lista so de objetos Item, por exemplo, deu certo. Mas quando essa lista tem informações de mais de uma tabela nao da certo!!

Entao como é que eu posso fazer um subrelatorio que tem informações de mais de uma classe???

Agradeço qq ajuda!

4 Respostas

D

Ola.
Você conseguiu resolver seu problema?
Estou com o mesmo erro aqui…

M

Alguem ja conseguiu resolver este problema

Estou com o mesmo problema e não sei mais o que fazer
vlw!!!

psico.indie

Aew estou com o mesmo problema, alguém conseguio resolver?

Ironlynx
Isso é algum tipo de erro padrão do IReport? Só que meu report é java beans, não acessa a base:
ResultadoFormula rf=new ResultadoFormula("100.00","200.00",null,null,null,
					"200.00","400.00",null,null,null,100.0,"Fa: 74.5","T: 25.5",null,null,null,null,null,
					2.6451,1.789016,1.009,"Lorem ipsum dolor sit amet, consectetuer adipiscing elit,Ut pulvinar mattis lacus. Vestibulum tellus tortor, lacinia sit amet, pretium eu, facilisis quis, ligula. Proin dictum sollicitudin dolor. Phasellus posuere.Nunc consectetuer dolor ut pede. Phasellus odio urna, lobortis non, adipiscing non, ullamcorper sit amet, arcu. Phasellus tellus dui, ultrices at, suscipit eu, venenatis sit amet, eros. Sed ac odio. Donec pretium. ",
					"Caio Rolando da Serra-09/01/2009 16:59:59-Nº1234589");
			ArrayList&lt;ResultadoFormula&gt; rfs = new ArrayList&lt;ResultadoFormula&gt;();		
					 rfs.add(rf);
					
		DadosGerais d=new DadosGerais("IBM","09/01/2009","Caio Rolando da Serra",
					"F3021","P123456/90-S","0.5 X Fa+ 0.5 X T","Fórmula do Pão","08/2001","12/2008",rfs); 
					ArrayList&lt;DadosGerais&gt; dg=new ArrayList&lt;DadosGerais&gt;();
					dg.add(d);
					
					JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(dg);            			
	JasperPrint impressao =JasperFillManager.fillReport(caminhoRelatorio, parameters, datasource);	
	
	byte[] saida = JasperExportManager.exportReportToPdf(impressao); //recupera os bytes do relatório criado
Mas dá o mesmo erro:
net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : resultadoFormula
 	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:127)
 	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:100)
 	at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:104)
 	at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:787)
 	at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:751)
 	at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1422)
 	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:111)
 	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:879)
 	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:801)
 	at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)
 	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)
 	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:517)
 	at com.fc.action.RelatorioAction.getRelatorio(RelatorioAction.java:65)
 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 	at java.lang.reflect.Method.invoke(Method.java:597)
 	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:299)
 	at org.mentawai.filter.InjectionFilter.filter(InjectionFilter.java:154)
 	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
 	at org.mentawai.filter.VOFilter.filter(VOFilter.java:133)
 	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
 	at org.mentawai.filter.ValidatorFilter.filter(ValidatorFilter.java:154)
 	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
 	at org.mentawai.filter.AuthenticationFilter.filter(AuthenticationFilter.java:125)
 	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
 	at org.mentawai.filter.AutoWiringFilter.filter(AutoWiringFilter.java:110)
 	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
 	at org.mentawai.filter.IoCFilter.filter(IoCFilter.java:83)
 	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
 	at org.mentawai.filter.ConnectionFilter.filter(ConnectionFilter.java:80)
 	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
 	at org.mentawai.filter.ExceptionFilter.filter(ExceptionFilter.java:83)
 	at org.mentawai.core.InvocationChain.invoke(InvocationChain.java:139)
 	at org.mentawai.core.Controller.invokeAction(Controller.java:759)
 	at org.mentawai.core.Controller.service(Controller.java:624)
 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
 	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
 	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
 	at java.lang.Thread.run(Thread.java:619)
 Caused by: java.lang.NoSuchMethodException: Unknown property 'resultadoFormula'
 	at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1122)
 	at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
 	at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
 	at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
 	at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource

Detalhe: da forma desktop(com um método main de testes) FUNCIONA! :shock:

Criado 6 de junho de 2007
Ultima resposta 27 de jan. de 2009
Respostas 4
Participantes 5