DataSource (IReport)

10 respostas
Dirk

Estou tentando rodar uma aplicacao no IReport que faz uso do DataSource. A funcao dela eh pegar de uma arquivo .csv string separadas por ; e organiza-la no relatorio final em pdf.
Ja implementei a interface : JRCSVDataSource.java. E tb a classe CSVDatasourceTestFactory.java . Ja testei a conexao e esta ok. Mas quando vou rodar o .pdf nao sai nada !!

Coloquei .csv juntamente com: JRCSVDataSource.class CSVDatasourceTestFactory.class
dentro da pasta it.businesslogic.ireport.connection. Eh assim mesmo ??

Esse exemplo esta em : http://ireport.sourceforge.net/cap4.html

valeu !!

10 Respostas

brlima

tem certeza que eh teu data source que nao consegue ler o arquivo ?
Tenta ver separado, pode ser que nao tenha implementado deireito e o relatorio ta se perdendo…
Se ta dando erro, posta aqui o erro que fica mais facil de saber o que pode ta acontecendo :smiley:

Eu fiz um exmeplo desse e correu tudo certinho aqui…

Dirk

O problema eh exatamente pq nao ta dando erro !! . Provavelmente estou comentendo algum erro grosseiro. Vc pode me explicar a funcao do COLUMN_ da linha 20 nesse codigo abaixo . No IReport (no campo detail) vou fazer alguma referencia a essa COLUMN_ ?? No arquivo .CSV que eu criei eu tenho que definir os campos COLUMN_1 , COLUMN_2, … ??

Valeu !!

<blockquote>

import <a href="http://java.io">java.io</a>.<em>;

4   import java.util.</em>;

5

6   public class JRCSVDataSource implements dori.jasper.engine.JRDataSource {

7

8       String row = “”;

9       LineNumberReader lineNumberReader;

10

11      /** Creates a new instance of JRCVSDataSource */

12      public JRCSVDataSource(String cvsFile) {

13          try {

14              lineNumberReader = new LineNumberReader( new FileReader(cvsFile));

15          } catch (Exception ex) { }

16      }

17

18      public Object getFieldValue(dori.jasper.engine.JRField jRField) throws dori.jasper.engine.JRException {

19          String field = jRField.getName();

20          int fieldPosition = Integer.parseInt(field.substring(7)); // Strip COLUMN_

21          StringTokenizer st = new StringTokenizer(row,";");

22          while (st.hasMoreTokens())

23          {

24              fieldPosition; // The column is not 0 indexed.

25              String token = st.nextToken();

26              if (fieldPosition == 0) return token;

27          }

28          return null; // Column not found…

29      }

30

31      public boolean next() throws dori.jasper.engine.JRException {

32          try {

33              row = lineNumberReader.readLine();

34              if (row.length()>0) return true;

35          } catch (Exception ex) { }

36          return false;

37      }

38  }</blockquote>
brlima

Pelo que testei aqui ta belezinha esse código ai.
É assim: esse parametro jRField do getFieldValue() tem o nome do campos ( getName() ) que deve ser COLUMN_? onde o ? deve ser o indice da coluna na sua CSV, por exemplo:

  1. A;B,C,D
    Se vc que pegar a letra C, tem que ter a coluna declarada como COLUMN_3

O indice varia de 1 até o numero de colunas que vc tem no seu CSV.
Entao, dá uma olhada pra ver o nome da coluna tá certo. Ve lá no field se tá descrito assim: $F{COLUMN_1} (acho que é isso :D).

Abraços!

Dirk

Cara acho que fiz tudo direito : crie o campo $F{COLUMN_1} e coloquei la no detail do IReport . Coloquei tb os . class do meu DataSource no mesmo diretorio do .CSV. Verifiquei conexao e ta tudo OK !! Mas,ao compilar, ele ta dando esse : 1. Field not found : COLUMN_1.

O meu .CSV ta assim : teste;teste;teste

Ta certo nao ta ??

brlima

Fica alerta pro “Field COLUMN_1 not found”.
Ele ta dizendo que vc nao criou a coluna. Cria esses fields no relatorio. Vai em VIEW -> Report Fields e adiciona.

Nao eskece que que quem tem q se mexer de diretorio eh o CSV e nao a classe :smiley: pois a classe pode estar debaixo de alguma package.

Bem, estando tudo isso certinho, nao deveria ter erros, ou melhor, na deve! hehehehe :roll:

Abraços!

Dirk

Eu criei o Text Field e coloquei na faixa detail. E depois fui em VIEW -> Report Field e adicionei $F{COLUMN_1} no campo Field Description. Mas mesmo assim ele continua :
Field COLUMN_1 not Found . :cry:

R

“Dirk”:
Eu criei o Text Field e coloquei na faixa detail. E depois fui em VIEW -> Report Field e adicionei $F{COLUMN_1} no campo Field Description. Mas mesmo assim ele continua :
Field COLUMN_1 not Found . :cry:

Cara,

Tente dimunir o tamanho do Field, pois já tive problemas por naum aparecer as informações no Relatorio

Abraços

Rocha

Dirk

Rapaz eu acho que to errando eh na criacao do .csv. Eu coloquei ele assim :

teste;teste;teste;
teste;teste;teste;

Eu preciso colocar em algum lugar do .csv o campo COLUMN_1 , COLUMN_2 ???

brlima

Acho que nao…
No método que lê seu arquivo, ele utiliza o indice separado por “;”.
Quando vc menciona o campo COLUMN_1, ele pega o substring, obtendo so o numero “1”. Dai ele pega a coluna que é a primeira ocorrencia antes do “;”.
Se fosse COLUMN_2, ele pegaria “2” e a segunda ocorrencia.

Isso tudo ocorre logo na primeira linha, entao nao tem que declarar nada no arquivo, e sim ter jah seus dados.

Assim que possivel, vou tentar postar um exemplo completo aqui, caso ateh la vc nao tenha resolvido :smiley: Vou dormir agora… hehehe

Falow!

Dirk

O meu CSVDatasourceTestFactory.class, JRCSVDataSource.class e o test.csv estao os tres nessa pasta : iReport-0.2.3/classes/it/businesslogic/ireport/connection.

Ta certo ??

Criado 5 de abril de 2004
Ultima resposta 13 de abr. de 2004
Respostas 10
Participantes 3