Tem como chamar um método no iReport?

6 respostas
T

Estou fazendo um relatório em que eu listo os dados de vários livros. O problema é que um dos dados eu só consigo através de um método na própria classe. Para facilitar:

Formato do relatório:

[img]http://img707.imageshack.us/img707/5029/relatoriopi.jpg[/img]

No lugar do "????" no canto direito do relatório (embaixo da Qtde de Exemplares), eu queria chamar o método getQtdeExemplar() na própria classe do Livro.

public class Livro implements Serializable{

    private int codigoLivro;
    private String Titulo;
    private String autor;

[...]

    public int getQtdeExemplar(){
        int qtde = -1;
        try {
            qtde = DadosRMI.getExemplarDAO().getQtdeExemplar(getCodigoLivro());
        } catch (RemoteException ex) {
            Logger.getLogger(Livro.class.getName()).log(Level.SEVERE, null, ex);
        }
        return qtde;
    }

Como fazê-lo?

6 Respostas

claudiom

respondendo sua pergunta inicial: tem…

mas como vc popula os dados do seu relatório? conexão direta com o banco de dados?

vc pode usar classes e objetos livremente no jasper bastando adiciona-las ao classpath…

T
claudiom:
respondendo sua pergunta inicial: tem...

mas como vc popula os dados do seu relatório? conexão direta com o banco de dados?

vc pode usar classes e objetos livremente no jasper bastando adiciona-las ao classpath...

Opa, eu uso o JRBeanCollectionDataSource:

private JasperPrint gerarRelatorio(List<Object> lista) {
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(lista);
        JasperPrint rel = null;
        try {
            Map parametros = new HashMap();
            
            rel = JasperFillManager.fillReport(caminhoArquivoJasper, parametros, ds);
        } catch (JRException e) {
            System.out.println("Erro ao gerar relatório");
            System.err.println(e.getMessage());
        }
        return rel;
    }
L

Cara, tem como chamar sim!
Só não sei como direito, também to querendo saber.
Só sei que vc tem que gerar um jar da sua classe a adicionar no classpath do iReport.
Depois disso é só chamar de dentro do seu Field ai. Só não sei como chamar ainda.
Mas vou tentar!

Espero ter ajudado!

joao.junior

Olá, Eu costumo fazer uma procedure que faz isso que seu metodo java faz.

Tipo, no próprio select voce passa o ID para a procedure e ela retorna o que voce precisa.

SELECT idlivro, titulo, autor, (select procedureQtdeExemplar(idlivro)) as QtdExemplar FROM tb_livros

Dessa forma fica tudo com o banco.

Outra forma seria, usar uma variavel, no seu classpath do iReport e tambem da sua aplicação você adiciona o .jar. No valor da variavel voce indica o caminho da classe e a chamada do metodo passando o campo.

((pacote.da.classe.livro)).getQtdeExemplar($F{idlivro})

A segunda forma não testei, a primeira sei que funciona 100%.

M

olá
tenho esta mesma dúvida
como eu crio essa procedure no ireport ?

M

Galera reabrindo esse topico estou com um relatorio ja coloquei o .jar no classpath chamei o metodo e tudo funcionou normal no iReport compilei tudo blz!
Só que quando eu chamo o relatorio na aplicação ele me retorna o seguinte erro:

Error evaluating expression : 
	Source text : barrinhas.getBarrinhas($F{menor_sal_empresa}.doubleValue(),$F{maior_sal_geral_total}.doubleValue())
	at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:203)
	at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:591)
	at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:559)
	at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:884)
	at net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:421)
	at net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:406)
	at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:257)
	at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:457)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2037)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:771)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:281)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:144)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:822)
	at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:61)
	at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446)
	at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:276)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:745)
	at reports.ReportClass.generateReport(ReportClass.java:91)
	at ui.MainWindow.geraRelatorio(MainWindow.java:1996)
	at ui.MainWindow$26.actionPerformed(MainWindow.java:1963)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.NoSuchMethodError: barrinhas.getBarrinhas(DD)Ljava/lang/String;
	at total1_1351773787724_55323.evaluate(total1_1351773787724_55323:564)
	at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:190)
Criado 18 de junho de 2010
Ultima resposta 1 de nov. de 2012
Respostas 6
Participantes 6