Pular para o conteúdo principal

Particionamento do conteúdo na execução

A ferramenta de Relatórios permite particionar o conteúdo na execução. Desta forma, não é necessário emitir repetidamente o mesmo relatório com parâmetros diferentes. Quer entender como funciona? Acompanhe as informações abaixo e fique por dentro!

Exemplo:

Para emitir cinco relatórios em formato PDF, cada um deles contendo a listagem de empenhos de um determinado exercício, de 2014 à 2018. Para isto, teria que executar cinco vezes o mesmo relatório, informando os argumentos de cada exercício para cada execução. Não seria melhor executar o relatório uma única vez? Informando os cinco exercícios nos parâmetros durante a execução e obter os cinco relatórios em formato PDF em uma pasta zipada? Como exibido na imagem abaixo:

relatórios

Um dos recursos disponibilizados pela ferramenta de relatórios é a capacidade de particionar o arquivo gerado de acordo com uma expressão. Para que o particionamento funcione corretamente, é necessário que os dados sejam ordenados e agrupados, de modo que todos os dados pertencentes ao mesmo grupo sejam gerados de forma sequencial.

Configuração

A configuração do particionamento é feita no desenvolvimento do relatório, utilizando um conjunto de variáveis reservadas.

Basta inserir as seguintes variáveis no modelo (.jrxml) utilizando a ferramenta Jaspersoft.

relatórios

Variáveis

ChaveTipoDescrição
BTH_PARTICIONAMENTO_EXPRESSAOStringArmazena o valor que será utilizado para classificar a qual grupo a página atual pertence. Essa variável é lida sempre que uma nova página é adicionada ao relatório.
BTH_PARTICIONAMENTO_DESCRICAOStringDescrição que será adicionada no arquivo json , criado dentro do zip, que vai conter as informações das partições;
BTH_PARTICIONAMENTO_NOME_ARQUIVOStringNome que será utilizado na exportação da partição, não deve conter a extensão.
BTH_PARTICIONAMENTO_PROPRIEDADES_[NOME_PROP]StringPropriedades adicionais que serão adicionadas à lista de propriedades no arquivo json . Nesse caso a chave da propriedade vai ser NOME_PROP .
BTH_PARTICIONAMENTO_PROTOCOLOStringUUID da partição atual, essa variável é somente leitura, e é configurada automaticamente pela ferramenta em tempo de execução.

Exemplo

Segue como exemplo, um relatório padrão, que utiliza a fonte de execuções, agrupando por tipo de extensão.

  1. Os dados devem vir ordenados da origem ou serem ordenados no relatório, lembrando que para a ordenação no relatório temos um limite de no máximo 800000 registros.

relatórios

  1. Configurar a variável com a expressão de compartilhamento, geralmente é o mesmo campo que está sendo usado na ordenação.

relatórios

atenção!

É importante não concatenar nada no valor retornado, principalmente se a ordenação está sendo feita dentro do relatório, pois caso contrário uma página duplicada será gerada.

  1. Criar um grupo, para que os itens sejam colocados em páginas distintas no relatório.

relatórios

▸ Resultado do particionamento, arquivo zip

relatórios

▸ Exemplo do conteudo.json

1  [
2 {
3 "expressao": "RELATORIO",
4 "protocolo": "1f9e8915-5029-4dc6-bfde-c3d6f677bba1",
5 "descricao": null,
6 "arquivo": "RELATORIO.pdf",
7 "propriedades": [ ]
8 },
9 {
10 "expressao": "SCRIPT",
11 "protocolo": "91d27583-ea95-47da-9e98-f301d55ca1a6",
12 "descricao": null,
13 "arquivo": "SCRIPT.pdf",
14 "propriedades": [ ]
15 }
16 ]

É importante que a ordenação do relatório siga os campos utilizados na expressão para que o particionamento seja feito corretamente! O ideal é criar um grupo e ordenar por ele.

DICA!

Caso deseje recuperar outras informações do conteúdo particionado, basta criar variáveis utilizando o prefixo:
BTH_PARTICIONAMENTO_PROPRIEDADES_

acrescido do nome da propriedade, por exemplo: BTH_PARTICIONAMENTO_PROPRIEDADES_NOME.

O valor destas propriedades e das outras variáveis serão geradas no arquivo conteudo.json que será disponibilizado junto aos arquivos PDF que também serão particionados.

ATENÇÃO!

Salientamos que neste primeiro momento, quando o relatório for particionado não será possível enviá-lo para assinatura!

Exemplo completo (.jrxml)