iReport
Fazendo cálculos no JasperReports/iReport
21/04/10
Variáveis e as expressões associadas a elas. As variáveis estão sempre relacionadas a algum cálculo, que é definido pelas expressões.
Ou usando o vocabulário do tutorial, variáveis são construídas sobre expressões que informam como essas variáveis são avaliadas. Por exemplo, a tag abaixo declara uma variável:
<variable nome=”subTotal”
class=”java.lang.Double”
resetType=”Page”
calculation=”sum” >
<variableExpression> $F{quantidade}</variableExpression>
</initialValueExpression> new Double(0) </initialValueExpression>
</variable>
Neste exemplo, foi declarada uma variável chamada subTotal do tipo Double, que será reinicializada com valor 0 a cada página (resetType). Quando essa variável aparecer em um campo de texto, ali aparecerá a soma (sum) do campo quantidade (ou seja, todos os valores da “coluna” quantidade são somados – por página).
As operações que aparecem como pré-construídas no tutorial jasper são: count, sum, average, lowest, highest, variance, etc. No iReport aparecem também StandardDesviation (desvio padrão) e System.
As variáveis podem ser reinicializadas em vários níveis, o resetType:
-
Report (padrão),
-
Page,
-
Column,
-
Group.
As variáveis pré-construídas do Jasper são:
-
PAGE_NUMBER,
-
COLUMN_NUMBER,
-
REPORT_COUNT,
-
PAGE_COUNT,
-
COLUMN_COUNT,
-
GROUP_NAME_COUNT.
O iReport não mostra todas na interface, mas elas podem ser usadas normalmente nos campos e expressões. Aqui, temos o mesmo problema dos parâmetros, é preciso conhecer os nomes de cor.
Para declarar novas variáveis no iReport, bastar ir em visualizar – variáveis do relatório e clicar no botão novo. Vai aparecer uma caixa de diálogo para configurar a nova variável. Vale lembrar:
-
toda variável possui um tipo (classe Java). Não esqueça de escolher o tipo da sua (o default é String).
-
Nas caixinhas variableExpression e initialValueExpression, não usar ponto-e-vírgula.
-
Aparentemente, nenhuma conta é feita com tipos primitivos, tudo é feito com as classes “wrappers” (Integer, Double, etc…)
Popularity: 33% [?]
Dicas para JasperReports/iReport
21/04/10
Algumas considerações:
1) cuidado ao dar um nome para salvar o seu relatório no iReport. Apesar da ferramenta não exigir que esse nome seja o mesmo que você forneceu ao criar o relatório, o engine Jasper irá usar esse nome, e não o nome do arquivo, para gerar o .jasper e o .jrprint (o default). Por exemplo, se o seu relatório se chama MeuRelatorio, e o arquivo se chama mrelat.jrxml, os arquivos gerados serão MeuRelatorio.jasper e MeuRelatorio.jrprint e não mrelat.jasper nem mrelat.jrprint!
2) Cuidado com campos cujos valores podem ser grandes. Nas propriedades do campo (duplo clique), selecionar a aba TextField e marcar a opção stretch with overflow. Atenção: na aba common, existe o Stretch type, mas esse tem a ver com a posição relativa às outras colunas e não com o conteúdo do campo.
3) É possível criar fontes de relatório, que são fontes com características pré-definidas e que depois podem ser usadas por todo o relatório. No iReport, para criar uma fonte nova, ir no menu Visualizar – fontes do relatório, apertando depois o botão new e configurando a fonte. Para usar uma fonte dessas, ir nas propriedades do texto, clicar na aba fonts. O primeiro campo dessa aba é o report fonts, basta escolher.
4) Uso do printWhenExpression: elementos com essa expressão, só são impressos se a expressão (tipo Boolean) for verdadeira. Um exemplo:
new Boolean ($F{codCliente}).intValue() % 10 == 0)
Faz com que o campo codCliente só seja impresso se for múltiplo de 10.
5) outro recurso, digamos, avançado é o de scriptlets. Scriptlets são classes que extendem JRAbstractScriptlet ou JRDefaultScriptlet, que extende a anterior. Essas classes servem para implementar algum tipo de cálculo que não os já existentes (soma, média, contagem, etc…). As classes base oferecem métodos que são disparados automaticamente cada vez que um “evento de relatório” acontece. Exemplos: beforeColumnInit(), afterDetailEval(), beforePageInit(), e assim por diante.
Para usar um scriptlet num relatório (aparentemente só é possível usar um), é preciso fornecer o atributo scriptletClass do elemento. Esse elemento é referenciado pela variável REPORT_SCRIPTLET.
No iReport, isso é configurado em visualizar – propriedades do relatório, na aba scriptlet.
Popularity: 37% [?]



