Scriptlet no iReport: alguem já usou ?  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
brlima
Moderador
[Avatar]

Membro desde: 12/05/2003 14:03:38
Mensagens: 1537
Localização: São Paulo - SP
Offline

Alguem chegou a criar algum scriptlet no iReport sem problemas ? To recebendo um CLassNotFoundException só de tentar usar o editor ( experimental ) do iReport.
Estou usando o iReport 0.4.0. Qdo vou lá e clico pra iniciar o editor de scriptlet, ele pergunta se quru habilitar. Ok habilito. Dai qdo compilo o relatorio, ele ja começa a dar esse erro. Mesmo indo lá no scriptlet, nomeando tudo bonitinho os construtores e a classe, nada, continuar dando erro.....

Alguem sabe o que pode ser ?


Tks..

Bruno

Bruno R. Lima
-------------------------------------------
flickr :: twitter
[MSN]
marcioa1
Virtual Machine Man
[Avatar]

Membro desde: 29/11/2003 12:52:10
Mensagens: 736
Localização: Valinhos-SP
Offline

Você já tentou a versão 0.3.?

Tive alguns problemas com a versão 0.4 e passei a usar a 0.3.

Boa sorte

Márcio

SCJP 1.4,
[Email]
isildur
Entusiasta Java
[Avatar]

Membro desde: 04/12/2006 17:42:23
Mensagens: 18
Localização: Fortaleza
Offline

Estou na versao 1.3.1 e não consigo usar ainda...
e no tutorial do ireport...num tem simplesmnte nada sobre Scriptlets.
Alguem tem algum tutorial aeh?

---------------------------------
Cada um com o seu destino.
[MSN]
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Eu uso na versão 1.3.1.

No iReport, faça assim:

Edit > Report Properties

Vá na aba Scriptlet class e preencha:

Scriptlet class:
Use this scriptlet class...
jasper.scriptlet.MeuScriptlet

No último vc terá que colocar o caminho das pkgs onde está sua classe de scriptlet .JAVA. Sim! isso mesmo! .java! Eu uso scriptlet EXTERNO, o INTERNO do iReport como vc está usando eu achei muito ruim e não atendia minhas necessidades. Alias, nem tenho certeza se ele dá certo. Esse que acessa uma classe externa funciona perfeitamente, já uso faz um tempo.

Abaixo exemplo de uma classe de scriptlet num .java:



[]'s, Renata
[Email]
elwerle
Entusiasta Java
[Avatar]

Membro desde: 10/07/2007 16:39:40
Mensagens: 18
Offline

E ai Renata, estou tentando usar scriptlet com meu ireport 2.0 mas não tem jeito de dar certo, ele só da que não acha a classe java.lang.classNotFoundException não sei o que estou fazendo de errado, já tentei o scritlet interno gerado no próprio ireport e já segui este seu exemplo, mas nada adianta. Se você tiver um exemplo pronto para me enviar por email, edison@si.srv.br, ou podemos falar por msn tbm elwerle@hotmail.com .

Abraços
Edison
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Olá elwerle

Desculpe, só agora vi sua msg, o GUJ estava com as notificações desativadas e eu não consegui ver antes. Ainda tem o problema?

[]'s, Renata
[Email]
elwerle
Entusiasta Java
[Avatar]

Membro desde: 10/07/2007 16:39:40
Mensagens: 18
Offline

Sim ainda estou com o Problema. Se você tiver um exemplo pronto ai pra mim dar uma olhada. Eu estou usando a versão 2.0, onde ele da erro direto é só associar a classe que da erro ao compilar. Ai fiz usn testes na 1.3.1 que vocÊ falou que usa, não deu erro ao inserir a classe e compilar mas não consegui chamar os métodos dela. Não sei se você ainda esta usando a versão 1.3.1, se tiver um exemplo na 2.0 melhor pois tenho todos meus relatórios nesta versão senão não tiver pode ser na 1.3.1 mesmo.

Abraços
Edison
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Desculpe a demora, eu não tinha um ex pronto e tive que fazer. Estou cheia de trabalho essa semana, então acabou demorando. Estou te enviando o msm ex que mandei pra um outro colega que me perguntou sobre o assunto, espero que te ajude.

Enfim, vamos lá, algumas dicas:

Na época que eu comecei a usar Scriptlets, não consegui fazer funcionar usando Scriptlets interno ao relatório. Não sei se se trata de algum bug, mas como não consegui tentei o externo e funcionou perfeitamente, então, pra mim já estava ótimo e foi assim que deixei.

Eu uso iReport 1.3.0, não sei se isso pode ter alguma diferença, mas eu já usava scriptlets desde versões anteriores do iReport e depois que atualizei não tive problemas. O ex que fiz obviamente está nesta versão, mas tenho quase certeza de que vc pode abrir na versão que usa e rodar que não terá problemas.

Abaixo tem para download um exemplo funcionando. Dentro do fonte eu deixei alguns comentários que devem te ajudar.

Por experiência própria te digo que sempre que alterar a classe scriptlet, vc deve recompilar o .jrxml para gerar o .jasper. Não li isso e não tenho nenhuma comprovação teórica sobre o assunto. Mas o que senti é que qdo vc gera o .jasper ele busca o conteúdo da classe de scriptlet e compila junto. Por isso, sempre que fizer alterações nesta classe, o correto é recompilar o .jrxml.

Com scriptlets vc só altera VARIÁVEIS do seu relatório. Então vai da sua criatividade de forma a montar seu relatório para usar determinadas variáveis que vc vai estar alterando através dos scriptlets em tempo de execução.

No seu arquivo .jrxml:

- não use um texto estático, mas sim um campo texto com a sua variável
- a variável vc deve criar com o Calculation Type = System, senão ela não permite assumir os valores passados pelo scriptlet
- nas propriedades do relatório vc coloca a classe de scriptlet como sendo as packages até chegar no lugar onde está o .java. Como eu fiz colocando "teste.Teste_scriptlet"
- ainda nas propriedades do relatório vc especifica que quando não tiver informações para listar (aba More...), vc quer que mostre todas as seções, exceto o detail. Se não fizer isso, ele não vai mostrar nada já que estamos tentando imprimir algo sem consultar registro no BD

Bem, é isso, acho que o resto é vc olhando no exemplo msm.

Boa sorte, qq coisa vc "grita".

[]'s
Renata

 Nome do arquivo TesteScriptlet.rar [Disk] Download
 Descrição Exemplo simples com scriptlet
 Tamanho 9 Kbytes
 Baixado:  719 vez(es)


[]'s, Renata
[Email]
elwerle
Entusiasta Java
[Avatar]

Membro desde: 10/07/2007 16:39:40
Mensagens: 18
Offline

Ok Renata, acho que vi alguns errinhos que estava cometento.
Mais uma dúvida. E se eu quizer criar um método meu, que não seja estes que já existem. Posso cria-los? E como chamaria estes métodos no ireport?
O que preciso fazer na realidade é salvar no banco de dados o total de páginas do relatório. E pelo que percebi não tem como retornar valores ao programa que chama o relatório então gostaria de usar os scriptlets para salvar no banco.


Obrigado por enquanto,
E aguardo um retorno
Edison
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Entendi,,, acho que vc vai precisar de um "jogo de cintura".

Veja bem, não é vc que faz o relatório chamar os métodos, ele faz isso sozinho. Então se vc quer criar um método seu, acho que o máximo que pode fazer é colocar a chamada pra esse método dentro de um daqueles que eu coloquei no exemplo.

[]'s, Renata
[Email]
elwerle
Entusiasta Java
[Avatar]

Membro desde: 10/07/2007 16:39:40
Mensagens: 18
Offline

Renata talvez você esteja enganada da uma olhada nestes doies exemplos :
http://www.mail-archive.com/discussao@cejug.org/msg01967.html
http://yettocome.blogspot.com/2005/10/using-jasperreports-scriptlet.html

Segundo eles da para chamar, só pra mim não quer funcionar hehehehe


Abraços
Edison
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Tem razão!

Agora que vi os links lembrei que já tinha lido isso em algum lugar. Mas nunca tentei, vou tentar aqui, se conseguir te falo!

[]'s, Renata
[Email]
RenataFA
Virtual Machine Man
[Avatar]

Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline

Consegui!

Faça as seguintes modificações:

Na classe Teste_scriptlet.java eu acrescentei esse método:


No meu relatório (Teste_scriptlet.jrxml), pelo iReport, eu fiz as seguintes modificações:

- acrescentei mais um campo texto

- na expressão dele coloquei isso


E agora o "pulo do gato":

Vai em Options > Classpath
Adicionei a pasta onde se encontrava a pkg teste. Por ex, minha classe scriptlet estava no seguinte caminho:

E:\Eclipse\TesteScriptlet\teste\Teste_scriptlet.java


Então ai no classpath adicionei o caminho assim:

E:\Eclipse\TesteScriptlet


Antes de eu fazer isso não conseguia compilar pq ele não encontrava a pkg teste. Depois disso funcionou perfeitamente.

Veja se consegue ai!

[]'s, Renata
[Email]
elwerle
Entusiasta Java
[Avatar]

Membro desde: 10/07/2007 16:39:40
Mensagens: 18
Offline

Renata
Ou eu sou muito burro ou o ireport esta gozando da minha cara hehehe.
Tentei tanto no 1.3.1 e no 2.0, segui bem como você fez e explicou mas fica dando erro, da uma olhada na imagem anexa e no .java

Naqueles arquivos do exemplo que você me disponibilizou tem um arquivo Teste_scriptlet.class quem gerou ele? É preciso este arquivo?
 Nome do arquivo teste.rar [Disk] Download
 Descrição Arquivo com erro
 Tamanho 182 Kbytes
 Baixado:  184 vez(es)

elwerle
Entusiasta Java
[Avatar]

Membro desde: 10/07/2007 16:39:40
Mensagens: 18
Offline

Não sei se tu me entendeu queria saber se precisa da classe compilada o .class
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team