CONTEÚDO
- Visão Geral
- Exemplo de utilização
- Postman
- Client Progress
- AppServer
01. VISÃO GERAL
Com a utilização da ferramenta BIRT para geração de relatórios, caso ocorra alguma inconsistência na geração, é trabalhoso para a equipe de atendimento diferenciar se há problemas na parametrização do ambiente, na funcionalidade ou até mesmo no relatório de responsabilidade das áreas de negócio.
Para facilitar a análise de uma inconsistência na geração do relatório em BIRT, foi desenvolvido um relatório padrão do Framework, que executa os mesmos processos internos para a geração de um relatório em PDF.
02. EXEMPLO DE UTILIZAÇÃO
A partir da release 12.1.2205, estão disponíveis três métodos para efetuar geração de um relatório padrão do Framework, para utiliza-los, deve-se incluir o template rel_framework_test (disponível em ../webapps/totvs-report/WEB-INF/classes) no diretório de templates do BIRT (Propriedades Relatório - https://tdn.totvs.com/pages/releaseview.action?pageId=601702111), pasta fnd.
Exemplo:
Template "rel_framework_test"
Foi implementado um template para a geração do relatório onde recebe os dados e substitui as chaves correspondentes, para validações, este template foi desenvolvido com três sessões:
Sessão 1
Efetua a substituição das chaves de acordo com os dados enviados em ttData
| Campo | Descrição |
|---|---|
| [data_bind_1] | Substitui a informação enviada em titulo_1 |
| [data_bind_2] | Substitui a informação enviada em conteudo_1 |
| [data_bind_3] | Substitui a informação enviada em conteudo_2 |
| [data_bind_3] | Substitui a informação enviada em conteudo_3 |
Sessão 2
Representa uma lista de parâmetros, efetua a substituição das chaves de acordo com os dados enviados em ttList
| Campo | Descrição |
|---|---|
| [item_bind_1] | Substitui a informação correspondente a chave item_1 em ttList |
| [item_bind_2] | Substitui a informação correspondente a chave item_2 em ttList |
Sessão 3
Nesta sessão, são inseridos automaticamente informações relevantes para a geração do relatório, tais como a versão do Java, enconding, diretórios para a geração do BIRT, entre outros...
| Campo | Descrição |
|---|---|
| [cod_param] | Código do parametro apresentado |
| [des_param] | Conteúdo do parametro apresentado |
Informação
Para este template, a sessão 3 pode apresentar os seguintes valores que auxiliam na análise do ambiente. Os valores das propriedades representam as configurações das propriedades do relatório e parâmetros do Tomcat.
| cod_param | des_param |
|---|---|
| os | Sistema operacional |
| java_home | Diretório do Java |
| java_version | Versão do Java |
| encoding | Valor do encoding considerado na inicialização |
| separator | Caracter padrão de separação |
| birt_home | Diretório da engine do BIRT |
| birt_temp_dir | Diretório temporário do BIRT |
| report_home | Diretório em que estão os templates |
| Tomcat-Charset | Encoding utilizado para o envio dos dados entre as camadas Progress → Java |
| System.getProperty("user.country") | Pais configurado na JVM |
| System.getProperty("user.language") | Idioma configurado JVM |
| System.getProperty("user.timezone") | Fuso horário da JVM |
| System.getProperty("java.vm.version") | Versão da JVM |
| System.getProperty("java.version.date") | Data da versão JVM |
| System.getProperty("file.encoding") | Propriedade de encoding considerado da System |
| System.getProperty("preferipv4stack") | Propriedade de preferipv4stack |
Postman
Com a utilização de uma ferramenta externa "Postman", a geração do relatório é efetuada diretamente com a execução do endpoint no Apache Tomcat. Nesta forma de execução, a camada Progress não é executada.
Para efetuar a geração do relatório, efetuar as seguintes etapas:
- Criar uma requisição POST com a URL abaixo, substitua os campos {host} e {port} conforme os nomes do servidor que será testado:
http://{{host}}:{{port}}/totvs-report/printTest/fnd/rel_framework_test?format=pdf&download=true
- Na aba Authorization, informar o tipo Basic Auth e inserir um usuário e senha do produto TOTVS - Linha Datasul.
- Informar na aba Body, os dados (formato Json), que serão enviados ao template do relatório.
{
"ttData": [{
"titulo_1": "TÍTULO DO RELATÓRIO",
"conteudo_1": "Conteúdo 1",
"conteudo_2": "Conteúdo 2",
"conteudo_3": 3,
"ttList": [{
"item_1": "14272",
"item_2": "Teste Item 2.1"
},
{
"item_1": "15273",
"item_2": "Teste Item 2.2"
},
{
"item_1": "16274",
"item_2": "Teste Item 2.3"
}]
}]
}
- Clicar no botão "Send" ou "Send and Download", de acordo com a opção escolhida, o relatório devidamente preenchido é exibido como retorno do Body no Postman ou efetuado o download do arquivo.
Client Progress
O segundo método para efetuar a geração do relatório de template, é efetuado com a utilização de um Client Progress (_edit.p) devidamente aberto com a sessão do produto.
A seguir é apresentado o exemplo.p que é similar ao apresentado em https://tdn.totvs.com/pages/releaseview.action?pageId=271181100, com a diferença da Procedure printTest executada, no qual todo o fluxo de execução é o mesmo da Procedure print, com a diferença da chamada ao endpoint /totvs-report/printTest apresentado anteriormente na execução direta do Postman.
/* Definição das variáveis de testes para geração do relatório. */
DEFINE VARIABLE c_report AS CHARACTER NO-UNDO INITIAL "fnd/rel_framework_test".
DEFINE VARIABLE c_program AS CHARACTER NO-UNDO INITIAL "".
DEFINE VARIABLE c_format AS CHARACTER NO-UNDO INITIAL "pdf".
DEFINE VARIABLE c_dialect AS CHARACTER NO-UNDO INITIAL "pt".
DEFINE VARIABLE l_publish AS LOGICAL NO-UNDO INITIAL FALSE.
DEFINE VARIABLE l_download AS LOGICAL NO-UNDO INITIAL TRUE.
DEFINE VARIABLE h_report AS HANDLE NO-UNDO.
DEFINE VARIABLE lc_content AS LONGCHAR NO-UNDO.
DEFINE VARIABLE c_query_params AS CHARACTER NO-UNDO.
DEFINE VARIABLE i_response_code AS INTEGER NO-UNDO.
DEFINE VARIABLE c_response_status AS CHARACTER NO-UNDO.
DEFINE VARIABLE mptr_response AS MEMPTR NO-UNDO.
/* Ajuste do CODEPAGE para UTF-8 */
FIX-CODEPAGE(lc_content) = "UTF-8".
/* Adiciona os parâmetros de query para o relatório, os parâmetros complexos como temp-tables e datasets devem ser passamos como JSON na variável lc_content. */
ASSIGN c_query_params = "".
/* Dados para a geração do relatório */
RUN getReportData IN THIS-PROCEDURE(OUTPUT lc_content).
/* Para fins de testes gera um arquivo de dump com os dados a serem enviados para o Datasul Report Service */
COPY-LOB FROM lc_content TO FILE SESSION:TEMP-DIRECTORY + "lc_content.json" NO-CONVERT.
IF NOT VALID-HANDLE(h_report) THEN
RUN utp/ut-report-api.p PERSISTENT SET h_report.
/* Executa a procedure de geração do relatório de teste */
RUN printTest IN h_report (INPUT c_report,
INPUT c_program,
INPUT c_format,
INPUT c_dialect,
INPUT l_publish,
INPUT l_download,
INPUT lc_content,
INPUT c_query_params,
OUTPUT mptr_response,
OUTPUT i_response_code,
OUTPUT c_response_status).
IF VALID-HANDLE(h_report) THEN DO:
DELETE PROCEDURE h_report.
END.
/* Exibe o status de retorno da requisição ao totvs-report */
MESSAGE i_response_code VIEW-AS ALERT-BOX.
IF i_response_code = 200 THEN DO:
DEFINE VARIABLE ms AS DECIMAL NO-UNDO.
DEFINE VARIABLE endTime AS DATETIME-TZ NO-UNDO INIT NOW.
ASSIGN ms = INTERVAL(endTime, DATETIME-TZ (1, 1, 1970,0, 0, 0, 0, 0), "milliseconds").
/* Gera o relatório no diretório temporário com o nome rel_framework_test_<MILLISECONDS> */
COPY-LOB FROM mptr_response TO FILE SESSION:TEMP-DIRECTORY + 'rel_framework_test_' + STRING(ms) + "." + c_format NO-CONVERT.
END.
/* Dados fixos para a geração do relatório */
PROCEDURE getReportData:
DEFINE OUTPUT PARAM lc_data AS LONGCHAR NO-UNDO.
ASSIGN LC_data = "~{
~"ttData~": ~[~{
~"titulo_1~": ~"TÍTULO DO RELATÓRIO~",
~"conteudo_1~": ~"Conteúdo 1~",
~"conteudo_2~": ~"Conteúdo 2~",
~"conteudo_3~": 3,
~"ttList~": ~[~{
~"item_1~": ~"14272~",
~"item_2~": ~"Teste Item 2.1~"
~} ,
~{
~"item_1~": ~"15273~",
~"item_2~": ~"Teste Item 2.2~"
~} ,
~{
~"item_1~": ~"16274~",
~"item_2~": ~"Teste Item 2.3~"
~} ~]
~} ~]
~} ".
RETURN "OK":U.
END PROCEDURE.
Informação
O exemplo.p efetuará a geração do relatório com a utilização do utilitário ut-report-api.p, onde efetuará as comunicações entre as camadas Progress → Java.
- Verificar no diretório temporário o arquivo .pdf gerado (nome rel_framework_test_<MILLISECONDS>);
- Também no diretório temporário, é gerado o arquivo lc_content.json que contém os dados enviados ao template;
- O retorno 200 indicará que o arquivo foi criado com sucesso, caso contrário, analise no clientlog as possíveis inconsistências no fluxo de geração do arquivo.
AppServer
O terceiro método para a geração do relatório de teste é executada no AppServer, para isto, foi disponibilizado em Propriedades → Relatório um botão "Teste BIRT" que realiza a geração do relatório padrão do Framework.
Internamente será executada a rotina apresentada anteriormente em "exemplo.p", com a diferença da possibilidade de alterar o diretório onde o arquivo .pdf será gerado.
Caso não seja informado um diretório, o arquivo é gerado no diretório temporário parametrizado no AppServer.
Dica
- Caso não tenha acesso ao diretório temporário do AppServer, informe no campo apresentado anteriormente um diretório compartilhado para visualizar os arquivos;
- Como a rotina é similar ao executado no Client Progress, os mesmos artefatos para análise (.pdf e .json) serão gerados no diretório temporário ou indicado na parametrização;
- Acompanhe a execução no arquivo de log "server" do AppServer;
- Não é necessário reiniciar o Tomcat caso altere o diretório para a geração.






