JasperReports com base de dados XML

Olá pessoal

estou tentando montar um relatorio com dados a partir de um XML
crio um xmldatasource com o documento xml e o recoPath para pegar os valores no xml
exemplo:

String reportFileName = "D:/Projetos/Patric/GerarRelatorio/web/recursos/Nf-e_Retrato.jasper";
doc = db.parse("D:/Projetos/TJSistemas/TJNfe/Implementacao/ServletNFe/web/xmls/testeNFe.xml");  
String recordPath = "/NFe/infNFe/ide";
xmldatasource = new JRXmlDataSource(doc, recordPath);

Aqui eu crio um HashMap para setar os valores que eu pego do xml
e uso o put do hasmap para inserir o valor
no iReport onde eu criei paremeters ele recebe os valores
mais onde eu preciso q a variavel seja dinamica para agregar
varios tipos de produtos, eu não consigo fazer ele receber esses valores dinamicos
ou seja mostrar varios produtos na aba Details;

parameters = new HashMap();
field = new JRDesignField();
xmldatasource.next();

field.setDescription("xProd");
field.setValueClass(String.class);
strProd = (String) xmldatasource.getFieldValue(field);
System.out.println(field.getDescription() + "=" + strProd);
parameters.put("teste", strProd);

impressao = JasperFillManager.fillReport(reportFileName, parameters, xmldatasource);

espero que tenham entendido o problema

Eu estou trabalhando num projeto que cria um xml a partir do iReport …

e para resolver o problema dos produtos eu resolvi através da query

Exemplo:

No meu projeto eu tenho um relatorio mãe e chama um subrelatorio itens , neste subrelatorio eu tenho uma tabela na banda detail , e na query o select dos itens , na banda detail ja faz o FOR por default , entao com isso retorna a lista de produtos de uma determinado codigo que eu passo por parametro para este subrelatorio.

Acho q não consegui ajudar muito , mas é um começo , responde oq vc conseguiu entender e eu vo tentando te ajudar :slight_smile:

[]'s

Voce não teria alguns detalhes em codigo
ou algum print para eu ter uma ideia de como vc esta fazendo??

vamos fazer o contrario faz um print ae do teu relatorio no ireport e da query dele q eu posso tentar entender e ver onde esta o erro …

fico aguardando :slight_smile:

[]'s

Bom aqui esta a imagem do desenho no IReport
sobre a query eu não estou utilizando, eu apenas monto o a estrutura
gero o arquivo JRXML e o .jasper e utilizo o HashMap para inserir os dados

Aqui o exemplo do codigo para inserir os valores no relatorio

db = dbf.newDocumentBuilder();
doc = db.parse("D:/Projetos/TJSistemas/TJNfe/Implementacao/ServletNFe/web/xmls/testeNFe.xml");  
String reportFileName = "D:/Projetos/Patric/GerarRelatorio/web/recursos/Nf-e_Retrato.jasper";
String xmlFileName = "D:/Projetos/TJSistemas/TJNfe/Implementacao/ServletNFe/web/xmls/testeNFe.xml";
parameters = new HashMap();
field = new JRDesignField();
recordPath = "/NFe/infNFe/det/prod";
xmldatasource = new JRXmlDataSource(doc, recordPath);
xmldatasource.next();
field.setDescription("xProd");//Campo da xml que eu quero pegar valores
field.setValueClass(String.class);
strProd = (String) xmldatasource.getFieldValue(field);//passo resultado para uma string
System.out.println(field.getDescription() + "=" + strProd);
parameters.put("teste", strProd);// colocar valor da String no campo do IReport a ser mostrado
impressao = JasperFillManager.fillReport(reportFileName, parameters, xmldatasource);




Eu tbem estou trabalhando num projeto de DANFE hehe ,

assim vc ta colocando o field $F{produto} na banda detail??

Pq a detail te faz um FOR por default … e como nunca trabalhei com HashMap nao vou poder te ajudar mto , como disse eu pego minha informações através de um select que me retorna várias linhas…

Se vc tiver interesse em tentar fazer por select eu posso te ajudar :wink:

[]'s

entao eu naum tenho preferencia por usar select ou hashmap
eu estou usando pq foi os exemplos que eu havia encontrado
mais se por select resolver meu problema ta valendo

=D
se vc puder me mostrar como vc esta fazendo :smiley:

é façil !

vc tem o teu relatorio mãe ali neh , vc cria um subrelatorio “itens” e coloca la em baixo , dae vc cria a tua tabelinha de itens neste subrelatorio , vc vai na query deste subrelatorio e faz o teu select retornando varias linhas …

Ahh , nao esquece que o cabeçalho da tabela dos itens onde vai “codigo” “descriçao” “valor” … tem q ir numa banda em cima da banda “detail” e onde vai set setado os valores vai na banda detail para fazer o FOR

Desculpa a demora pra responde mas ta corrida a coisa aqui hj!

se ficou com duvida posta q eu respondo :slight_smile:

[]'s

estou tentando fazer direto a query pelo IReport

fiz um field com nome cNF

e criei um hyperlink com o data source com esse codigo

((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("NFe/infNFe/ide/cNF")

seguintes erros

Erros de compilação .\teste.jasper.
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 1. Cannot cast from JRXmlDataSource to String value = (java.lang.String)(((net.sf.jasperreports.engine.data.JRXmlDataSource)((net.sf.jasperreports.engine.JRDataSource)parameter_REPORT_DATA_SOURCE.getValue())).dataSource(“NFe/infNFe/ide/cNF”));//$JR_EXPR_ID=9$ <------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 2. Cannot cast from JRXmlDataSource to String value = (java.lang.String)(((net.sf.jasperreports.engine.data.JRXmlDataSource)((net.sf.jasperreports.engine.JRDataSource)parameter_REPORT_DATA_SOURCE.getValue())).dataSource(“NFe/infNFe/ide/cNF”));//$JR_EXPR_ID=9$ <------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 3. Cannot cast from JRXmlDataSource to String value = (java.lang.String)(((net.sf.jasperreports.engine.data.JRXmlDataSource)((net.sf.jasperreports.engine.JRDataSource)parameter_REPORT_DATA_SOURCE.getValue())).dataSource(“NFe/infNFe/ide/cNF”));//$JR_EXPR_ID=9$ <------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------> 3 errors at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:193) at it.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:587) at java.lang.Thread.run(Unknown Source)

os type dos fields estao corretos??

confesso que me perdi um pouco naquilo que vc ta querendo … :frowning:

pq teu problema nao era no itens? nao precisa de hyperlink para fazer os itens , só fazer um subrelatorio e na query do proprio ireport fazer o select , e criar os FIELDS no ireport para cada dado que vem da query , cuidando os types dos fields …

[]'s

Bomm sim, eh q eu estava jogando os valores manualmente com HashMap

da forma com que vc estava falando com query tinha q criar uma conexao com o xml direto no IReport
entao to começando la pelos primeiros valores do DANFE

ou seja voltei la no começo
criei um dataSource no IReport e estou tentando fazer a consulta

=///

isso , cria um relatorio “mãe” e la nesse relatorio mãe cria um subrelatorio itens , q dentro deste subrelatorio itens vai ter a query que busca do BD os itens da determinada danfe … a nao esqueca de colocar os itens na banda detail :wink:

qualquer duvida posta ae q se eu souber tento ajudar

[]'s

brotherr to saindo de ferias semana agora
qdo voltar vou fazer mais uns testes aqui
tem email para entrar em contato?

bleza …

pode postar aqui neste topico ou mandar e-mail para guilherme@tn3.com.br

e boas férias :wink:

[]'s

Alguém pode disponibilizar o arquivo jasper do DANFE ??? Ajudaria bastante ? Qq coisa entre em contato por mp !!!

Valeu

Fred

Cara

eu nao trabalho mais com danfe…mas qual a sua duvida em relação a ela?

[]'s

tenho um jrxml p/ impressão do DANFE!!

se precisarem manda um email ai!

gcoletaalves@gmail.com

Pessoal…

Montei um XML como exemplo no iReport… configurei o XML e tals…

Mas como executo pela minha aplicação usando diferentes arquivos XML como parâmetro ??

Sendo que os XML tem o memso layout… so as informações que mudam… so queria que ao executar o JASPER ele usasse um XML diferente… como posso chamar isso de dentro da minha aplicação ?

vlw

Opa…

Alguem mais teria esse XML ?? Porque o nosso amigo “gcoletaalves” parece estar offline ^^

Se alguém puder ajudar, por favor posta ai para dowload ou me manda MP…

Vlw!

Galera…

Quem já montouo DANFE ??

Bom… eh o seguinte… pretendo montar o DANFE a partir do XML criado… e usar esse XML coo fonte de dados para meu iReport…
Aí seria mapear os campos e pronto…

Mas me surgiu uma dúvida em relação aos campos do DANFE…
Percio que talvez terei que montar 2 relatórios… um para Produtos e outro para Serviços…

Mas mesmo considerando somente produtos… alguns campos do DANFE são opcionais… o que pode mudar minha fonte de dados (Arquivo XML).

Alguém passou por isso, ou coseguiu montar esse jasper em cima do XML ?

Essa idéia daria certo ou terei mesmo que passar os parâmetros para o jasper via aplicação ?

Vlw!