Relatórios

Criando um relatório Jasper através de requisições de API da Senior X

667 views 11/09/2020 20/01/2021 andre-rezende 1

Chamada de API da Senior X

Uma alternativa para popular informações de relatório é chamando um endpoint de uma API RESTful permitindo uma interação com o protocolo HTTP.

Alguns cuidados devem ser tomados, caso exista alguma autorização ao recurso requisitado, tal como informar o token e ambiente correto para a requisição. Neste tutorial será descrito como utilizar essas informações dinamicamente através de parâmetros do relatório.

Para esse tutorial, estaremos utilizando o TIBCO Jaspersoft® Studio 6.14.0 e a primitiva listUsers.

Criando o projeto para o relatório

Crie um novo projeto do tipo Jasper Reports Project

Criar um Adapter

1. Na aba *Repository Explorer*, clique com o botão direito do mouse sobre *Data Adapters*
2. Selecione *Create Data Adapater*
3. Nomeie para algum nome entendível, esse nome será necessário para exportar seu Adapter
4. Selecione *JSON File* e botão *NEXT*
5. Na caixa de digitação *File* digite um endereço http/https. Ex.(https://platform-arquitetura.senior.com.br/t/senior.com.br/bridge/1.0/rest/platform/user/queries/listUsers)
6. Clique sobre o botão **Options**
7. Em *Request Type*, selecione o método de requisição desejado (GET, POST ou PUT)
8. Em *Options*, selecione a aba *Http Headers*
9. Adicione os parâmetros com os respectivos valores:

Name Value  
Content-Type application/json  
Authorization Bearer <ACCESS_TOKEN>  

10. Selecione a aba *POST Parameters* ou *PUT Parameters*, depende da opção selecionada no item 7.
11. Selecione o checkbox *Free text in BODY*
12. Adicione o payload. Ex:

{
"pagination": {
"pageNumber": 0,
"pageSize": 2147483647
},
"ordination": {
"sortBy": "name",
"sortOrder": "ASC"
},
"includeBlocked": true,
"authenticationTypes": [
"G7"
]
}

13. Clique sobre o botão *Test *para verificar se a requisição está funcionando.

Criando o relatório

Após selecionar no projeto o tipo de relatório que irá criar, na tela de Data Source, selecione no combobox o Data Adapter criado no passo anterior.
Caso a requisição tenha sido bem sucedida, o JSON de retorno é exibido para selecionar os campos que deseja ter em seu relatório. Selecione todos os valores que deseja e clique no botão NEXT.
Então uma nova tela com os Fields que deseja no relatório será exibida para escolher.
O mesmo acontece para agrupar os Fields em Group By.
Ao finalizar, todos os campos escolhidos estarão disponíveis para o seu relatório.

Exporte o Adapter

  1. Retorne a aba Repository Explorer
  2. Clique com o botão direito do mouse sobre o Adapter criado anteriormente
  3. Selecione Export to File
  4. Selecione o projeto criado anteriormente
  5. Escolha um novo nome para o Adapter
  6. Clique sobre o botão OK

Parâmetros

Será necessário alterar os parâmetros do Relatório criado, assim também no Adapter exportado.
Eles deverão alterar de forma dinâmica o ambiente utilizado (dev, homolog, prod, etc…) e o Token de autorização para requisições das APIs da Senior.

Abra seu arquivo .jrxml e selecione a aba Source
Adicione as seguintes linhas após o último elemento de <property>

<parameter name="SENIOR_TOKEN" class="java.lang.String" evaluationTime="Early">
		<property name="net.sf.jasperreports.http.data.header" value="Authorization"/>
	</parameter>
	<parameter name="SENIOR_REST_API_URL" class="java.lang.String" evaluationTime="Early"/>
	<parameter name="SENIOR_API" class="java.lang.String" isForPrompting="false" evaluationTime="Early">
		<property name="net.sf.jasperreports.http.data.url"/>
		<defaultValueExpression><![CDATA[$P{SENIOR_REST_API_URL}.toString()+"platform/user/queries/listUsers"]]></defaultValueExpression>
	</parameter>

Os parâmetros informados tem as seguintes funções:

Nome Descrição
SENIOR_TOKEN Contém o token de autenticação do usuário que executou o relatório.
SENIOR_URL_API Contém a URL do endpoint do ambiente a ser requisitado os dados para popular o relatório
SENIOR_API Irá concatenar o parâmetro SENIOR_URL_API com o caminho da primitiva desejada. Ex. $P{SENIOR_REST_API_URL}.toString()+”platform/user/queries/listUsers”

Observação: altere o caminho final do parâmetro SENIOR_API para realizar uma chamada na primitiva desejada, diferente de listUsers.

Abra o arquivo XML do Adapter exportador em um editor de texto.

Remova os elementos abaixo:

<url> 

<postParameter><name>Authentication</name><value>Bearer XXXX</value></postParameter>

<header><name>Authorization</name><value>Bearer XXXX</value></header>

Internacionalização / I18N

Para utilizarmos um relatório utilizado globalmente, com suporte a várias línguas (ex. português, espanhol, inglês, etc…), adaptando as mensagens e textos de um produto, devemos utilizar o recurso de internacionalização. Esse recurso permite respeitar além da língua, particularidades de cada país.

No Jasper o arquivo de internacionalização é definido pelo Resource Bundle. Para o relatório Jasper, os arquivos de internacionalização tem a seguinte estrutura:

<code><NOME>_<língua>_<PAÍS>.properties</code>
Nome arquivo Língua PAÍS
Test_en_US.properties en = inglês US = Estados Unidos
Test_es_ES.properties es = espanhol ES = Espanha
Test_pt_BR.properties pt = português BR = Brasil

Definindo o arquivo

Após criar os arquivos para os idiomas que deseja, em um local no projeto de sua preferência.

Para definir os arquivos, clique sobre o relatório, visualize a propriedades e selecione o “nome” do arquivo(bundle) que irá conter as propriedades de internacionalização.

Parâmetros do JasperReports

Os parâmetros abaixo são usados pelos relatórios para utilização exclusivamente do Jasper e internacionalização dos relatórios.

NOME DESCRIÇÃO
REPORT_LOCALE Inserir um objeto do tipo java.util.Locale. Este parâmetro é importante para que o JasperReports saiba corretamente qual o idioma utilizar no relatório.
REPORT_RESOURCE_BUNDLE Inserir um objeto do tipo java.util.ResourceBundle contendo mensagens internacionalizadas.
REPORT_TIME_ZONE Inserir um objeto do tipo java.util.TimeZone para formatar datas corretamente conforme o fuso horário.

Preparação para publicação

Após criado o modelo do relatório este pode ser preparado para publicação.

No caso de um modelo simples, que não utiliza imagens ou outros artefatos, basta utilizar o arquivo com extensão

.jrxml
.

Neste caso, o modelo utiliza imagens e do adapter, será necessário montar um arquivo

.zip
com o modelo
.jrxml
e todas as dependências necessárias.

Sub-relatórios devem estar referenciados no arquivo com a extensão .jasper (ex: “detalhe-modelo.jasper”), o executor de relatório irá compilar e gerar o arquivo jasper no mesmo local, não sendo necessário anexar este. Ex:

users.zip/
|    |── users.jrxml
|    |── logoempresa.jpg
|    |── WS-ListUsers.xml

⚠ Os arquivos devem estar diretamente na raíz do zip, não em uma pasta.
⚠ O arquivo principal

.jrxml
deve possuir o mesmo nome que o zip.

Publicação de Relatórios

A publicação de um relatório pode ser feita de duas maneiras, através da API do serviço report-backend ou através do front-end do serviço de relatórios.

A API do serviço de relatórios deve ser utilizada por outros serviços da plataforma que precisam criar os seus próprios relatórios. Serviços que criarem os seus próprios relatórios devem associar o relatório ao seu dominio e serviço, dessa forma o relatório criado será listado no domínio correto.

A criação de relatórios através do front-end do serviço deve ser utilizada por administradores/consultores que desejam criar relatórios customizados para o seu tenant. Os relatórios criados através do front-end do serviço serão automaticamente associados ao domínio e serviço custom e report respectivamente.

Publicando Relatórios através do front-end

Para ir para a tela de publicação de relatório basta clicar no menu ** Tecnologia > Customização > Relatórios > Novo Relatório**.

Para publicar o relatório é obrigatório que seja informado um Nome para o relatório e anexado o modelo de relatório, os outros campos são opcionais. Aqui é possível visualizar a documentação para criação de um modelo de relatório.

Abaixo é apresentada a tela de publicação de relatório.


Ao criar um relatório também é possível criar menus para acessar a tela do relatório. Para criar um menu para o relatório basta clicar em Novo na seção Menus do Relatório.

Podem ser adicionados menus ao menu principal da plataforma (Menu lateral da Senior X Platform) e ao menu de contexto de uma tela (Menu apresentado ao clicar em no canto inferior do menu lateral).

Para adicionar um menu ao menu principal deve ser selecionado um menu que seja agrupador de submenus, quando a opção No menu principal estiver selecionada só será permitido selecionar menus agrupadores. Para adicionar um menu ao contexto de uma tela deve ser selecionado o menu da tela desejada, Quando a opção No contexto de uma tela estiver selecionada não será possível selecionas menus que são agrupadores de submenus. Quando não for possível associar o tipo do menu do relatório a um menu será apresentado um ícone de negado antes do nome do menu.

Abaixo são apresentados os menus Configuração e Globais, nessa imagem o usuário pode selecionar o menu Configuração e não pode selecionar o menu Globais para associar ao novo menu do relatório.

Abaixo é apresentada a modal para adicionar um menu ao relatório.

 

Os menus do relatório serão apresentados na seção Menus do Relatório. Eles serão separados em duas subseções Menu principal e Menu do contexto de uma tela.

Abaixo é possível visualizar os menus de um relatório.

Após preencher todas informações necessárias para a criação do relatório basta clicar no botão Salvar da tela de publicação de relatório. A criação/alteração dos menus do relatório é feita de forma assíncrona, assim o usuário que criou o relatório receberá uma notificação quando o processamento de cada menu for finalizado.

Para seguir as boas práticas do SX e agiliar o desenvolvimento, faça download do template/modelo.

Este artigo foi útil para você?