segunda-feira, 11 de abril de 2011

Compilação de dicas Ireport

           Ultimamente venho trabalhando muito com relatórios feitos no Ireport (até mais do que eu gostaria) e como sei que é difícil conseguir boas dicas, resolvi fazer uma compilação de dicas aqui para quem passa por alguns “perrengues” com essa ferramenta.

  Passar uma lista como datasource de um subrelatorio

            Deve-se usar essa expressão no datasourceconection do subrelatorio new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{Lista}) 
           O field Lista é a lista de objetos que deseja que seja passado para o relatório.
           No subrelatorio se quizer pegar os atributos do objeto da lista é so declara-los como Field que o jasper vai fazer o papel de mapea-los para você.




         Na imagem acima tenho o meu field $F{servicos}  que é do tipo List

Não passar nenhum dado para o Subrelatorio e mesmo assim fazer com que ele abra


          Basta usar a seguinte expressão  new JREmptyDataSource(), com isso o relatório ira abrir sem precisar de  valor algum.


 Criar uma expressão para se verdadeira imprimir o relatório ou campo do relatório

          Se quiser que o relatório ou algum campo dele só imprima de acordo com alguma condição    basta colocar um teste booleano na propriedade print when expression                                                         
               Ex:  new Boolean($V{campoDouble}.doubleValue()>0) Nesse exemplo só sera impresso se o campo for maior que zero. A imagem abaixo ilustra esse exemplo:




  Passando um Mapa como parâmetro

         Declara-se um Field  do tipo Map 
         Ex: org.apache.commons.collections.map.HashedMap 
         Nesse exemplo usei HashedMap, mas poderia ter sido usado qualquer outro tipo de   mapa,no relatório que ira receber o Mapa como parâmetro será preciso declarar uma variável, seta-se o variable class com o caminho da classe que está sendo salva no mapa 
         Ex: com.meuprojeto.to.MinhaClasseTO 
         No variable expression coloca-se a chave que irá pegar o valor do mapa.
           
        Ex:$P{meuMap}.get($F{valorDaChaveMapa}), depois no Field do relatório é so pegar o valor assim: $V{minhaVariavel}.geMeuAtributo()


Passando uma lista de Strings para o subrelatorio


        Se quiser passar uma lista de Strings para um subrelatorio e recuperar os valores deverá declarar o field com a expressão $F{_THIS},  com isso conseguira recuperar os valores da lista.


 Criando um texto  que precise conter uma palavra em negrito no meio


         Se precisar inserir uma palavra em negrito no meio de um texto, como feito nessa frase, basta setar o Markup como styled e  usar a tag <style isBold="true"> No texto Negrito </style> como na imagem abaixo: