Árvore de páginas

CONTEÚDO

  1. Visão Geral
  2. Exemplo de utilização
    1. Postman
    2. Client Progress
    3. 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

CampoDescriçã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

CampoDescriçã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...

CampoDescriçã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_paramdes_param
osSistema operacional
java_homeDiretório do Java 
java_versionVersão do Java
encodingValor do encoding considerado na inicialização
separatorCaracter padrão de separação
birt_homeDiretório da engine do BIRT
birt_temp_dirDiretório temporário do BIRT
report_homeDiretório em que estão os templates
Tomcat-CharsetEncoding 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:
URL de execução
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.

Exemplo Json ttData
{
    "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.

exemplo.p
 
/* 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.