Tutorial JasperReports - IReports |
Olá Javeiros! Listagem 1
package vo; import java.io.Serializable; import java.util.ArrayList; /** * @author RJFurutani * @04/05/2005 */ public class Aluno implements Serializable{ private String nome; private String curso; private ArrayList disciplinas; /** * @param nome * @param curso * @param disciplinas */ public Aluno(String nome, String curso, ArrayList disciplinas) { super(); this.nome = nome; this.curso = curso; this.disciplinas = disciplinas; } /** * @return Returns the curso. */ public String getCurso() { return curso; } /** * @param curso The curso to set. */ public void setCurso(String curso) { this.curso = curso; } /** * @return Returns the disciplinas. */ public ArrayList getDisciplinas() { return disciplinas; } /** * @param disciplinas The disciplinas to set. */ public void setDisciplinas(ArrayList disciplinas) { this.disciplinas = disciplinas; } /** * @return Returns the nome. */ public String getNome() { return nome; } /** * @param nome The nome to set. */ public void setNome(String nome) { this.nome = nome; } } Listagem 2
package vo; import java.io.Serializable; /** * @author RJFurutani * @04/05/2005 */ public class Disciplina implements Serializable{ /** * @param nome * @param cargaHoraria */ public Disciplina(String nome, String cargaHoraria) { super(); this.nome = nome; this.cargaHoraria = cargaHoraria; } /** * @return Returns the cargaHoraria. */ public String getCargaHoraria() { return cargaHoraria; } /** * @param cargaHoraria The cargaHoraria to set. */ public void setCargaHoraria(String cargaHoraria) { this.cargaHoraria = cargaHoraria; } /** * @return Returns the nome. */ public String getNome() { return nome; } /** * @param nome The nome to set. */ public void setNome(String nome) { this.nome = nome; } private String nome; private String cargaHoraria; } Depois de um tempão pesquisando e perguntando no GUJ, JavaFree, na lista enterprise-list@soujava.dev.java.net e usando o Google achei esse video http://ireport.sourceforge.net/swf/Subreport_viewlet_swf.htm que me deu uma luz e vou tentar passar de forma mais objetiva a solução que eu encontrei. Eu vou considerar que o leitor já tenha alguma experiência com o iReports e o JasperReports. Não vou entrar em muitos detalhes de design.
no subrelatório os fields são esses:
valorAtual = itrAlunos.hasNext() ? itrAlunos.next() : null; irParaProximoAluno = (valorAtual != null); return irParaProximoAluno; O método getFieldValue() recebe um parâmetro JRField, através desse parâmetro nós podemos saber qual field o JasperReports está pedindo pra por no relatório. Object valor = null; Aluno aluno = (Aluno) valorAtual; if ("nome".equals(campo.getName())) { valor = aluno.getNome(); } else if ("ListaDisciplinas".equals(campo.getName())) { valor = new JRBeanCollectionDataSource(aluno.getDisciplinas()); } else if ("curso".equals(campo.getName())) { valor = aluno.getCurso(); } Observer que quando é solicitado o field ListaDisciplinas nós devolvemos um JRBeanCollectionDataSource instanciado com a ArrayList de Disciplina do Aluno. Lembra que na configuração dos fields do relatório principal nós colocamos ListaDisciplinas do tipo Object, foi justamente por esse motivo. package jasper; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.view.JasperViewer; public class Gerarelatório { private static final String rel1 = "RelAlunos.jasper"; private static final String rel2 = "jasper/RelAlunosDisciplinas.jasper"; public Gerarelatório() throws Exception { // Lista dos alunos ArrayList listaAlunos = GerarDadosFicticios.getListaAlunos(); // Cria o data source para o relatório relatórioAlunosDataSource ds = new relatórioAlunosDataSource( listaAlunos); // parâmetros do relatório Map parâmetros = new HashMap(); parâmetros.put("pathSubRel",rel2); JasperPrint impressao = JasperFillManager.fillReport(getClass() .getResourceAsStream(rel1), parâmetros, ds); //exibe o relatório JasperViewer viewer = new JasperViewer(impressao, true); viewer.show(); } public static void main(String[] args) throws Exception { new Gerarelatório(); } } Para criar dados ficticios usados para testar o relatório foi criado a classe GerarDadosFicticios package jasper; import java.util.ArrayList; import vo.Aluno; import vo.Disciplina; /** * @author RJFurutani * @04/05/2005 */ public class GerarDadosFicticios { public static ArrayList getListaAlunos() { ArrayList listaAlunos = new ArrayList(); ArrayList disciplinas = null; Disciplina disciplina1 = null; Disciplina disciplina2 = null; Disciplina disciplina3 = null; Disciplina disciplina4 = null; /* * Aluno Roberto */ disciplina1 = new Disciplina("Banco de Dados I", "45Hs"); disciplina2 = new Disciplina("Equações Diferenciais I", "50Hs"); disciplina3 = new Disciplina("Algoritmos e Estrutura de Dados I", "60Hs"); disciplinas = new ArrayList(); disciplinas.add(disciplina1); disciplinas.add(disciplina2); disciplinas.add(disciplina3); Aluno roberto = new Aluno("Roberto Furutani", "Ciencia da Computacao", disciplinas); listaAlunos.add(roberto); /* * Aluna Fernanda */ disciplina1 = new Disciplina("Biologia", "45Hs"); disciplina2 = new Disciplina("Matematica Elementar II", "30Hs"); disciplina3 = new Disciplina( "Instrumentação Cirurgica", "70Hs"); disciplinas = new ArrayList(); disciplinas.add(disciplina1); disciplinas.add(disciplina2); disciplinas.add(disciplina3); Aluno fernanda = new Aluno("Fernanda Fernandes", "Enfermagem", disciplinas); listaAlunos.add(fernanda); /* * Aluna Silvia */ disciplina1 = new Disciplina("Fisica", "45Hs"); disciplina4 = new Disciplina("Quimica", "45Hs"); disciplina2 = new Disciplina("Equações Diferenciais II", "50Hs"); disciplina3 = new Disciplina( "Inglês", "60Hs"); disciplinas = new ArrayList(); disciplinas.add(disciplina1); disciplinas.add(disciplina2); disciplinas.add(disciplina3); disciplinas.add(disciplina4); Aluno silvia = new Aluno("Silvia da Silva", "Matemática", disciplinas); listaAlunos.add(silvia); /* * Aluno André */ disciplina1 = new Disciplina("Banco de Dados II", "65Hs"); disciplina2 = new Disciplina("Calculo Numerico I", "50Hs"); disciplina3 = new Disciplina( "Eletronica I", "60Hs"); disciplinas = new ArrayList(); disciplinas.add(disciplina1); disciplinas.add(disciplina2); disciplinas.add(disciplina3); Aluno andre = new Aluno("André Oliveira Lima", "Engenharia da Computacao", disciplinas); listaAlunos.add(andre); return listaAlunos; } } O relatório vai ficar assim:
Download dos fonte |