Scriptlet no iReport: alguem já usou?

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

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

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?

Eu uso na versão 1.3.1.

No iReport, faça assim:

Edit &gt 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:

package jasper.scriptlet;

import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;

public class EmissaoMapaResumoScriptlet extends JRDefaultScriptlet{
	
	public void beforeGroupInit(String groupName) throws JRScriptletException{
		
		if (groupName.equals("groupData")){
		    // faço o que preciso
		}
		
	}
	
}

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

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?

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

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

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

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.

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

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!

Consegui!

Faça as seguintes modificações:

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

public String getRenata() throws JRScriptletException{ return "Renata"; }
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

$P{REPORT_SCRIPTLET}.getRenata()

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:

Então ai no classpath adicionei o caminho assim:

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! :wink:

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?

Não sei se tu me entendeu queria saber se precisa da classe compilada o .class

Consegui fazer funcionar.
É preciso ter a classe compilada, ou seja o .class, no diretório senão não funciona.

Mas só no 1.3.1 funcionou por enquanto no 2.0 tem algo errado, ele compila mas na hora de rodar da erro.

Ah Renata, antes naquela imagem de mandei o .java errado sem o método novo não sei se você percebeu hehehe.

Edison

Funcionou no Ireport 2.0 tbm, simplesmente depois que abri no Ireport 1.3.1 o arquivo compilei e rodei lá.
Ao abri-lo novamente no 2.0 e recompilando e até fazendo alterações começou a funcionar sem Mais nem menos hehe.

Valeu pelas dicas Reanta. Por acaso vocÊ não tem msn para se uam hora destas eu precisar hehe. O meu é elwerle@hotmail.com
Abraços

Sim, precisa.

Meu eclipse gera ela “automágicamente”.

Gere o .class, depois o .jasper e então execute o relatório.

Rs… respondi junto com vc! rs…

Que bom que conseguiu! Eu vi msm que seu .java tava faltando o método.

Vou te adicionar no msn, pode deixar.

Até mais! :smiley:

Olá.
Estou precisando utilizar o scriptlet no Ireport e nenhuma das formas mostradas nesse tópico funcionaram pra mim.
Pelo iReport eu consigo utilizar o scriptlet interno (para funcionar basta colocar tools.jar na pasta lib do ireport), porém quando tento executar o relatório por uma aplicação Web aparece um erro dizendo que não encontrou a classe do scriptlet.
Tentei usar por uma classe externa, mas apresenta o mesmo erro.
A versão do ireport que uso é a 3.0

Alguém poderia me ajudar?

Desde já agradeço.

Mirian