CONTEÚDO
01. VISÃO GERAL
Com o objetivo de facilitar o desenvolvimento de geração de relatórios Smart View de forma assíncrona utilizando RPW / Automação de tarefas, foi desenvolvida uma classe que centralizará as informações necessárias para execução de pedidos agendados.
02. CLASSE GenerateReport()
A classe GenerateReport() será responsável por recuperar o ID do pedido de execução com base nos parâmetros recebidos. Com essa informação, será realizado o refresh do token de autenticação para a execução dos pedidos agendados referentes ao relatório solicitado, e, em seguida, o relatório será recuperado no endpoint do Smart View.
02.1 Parâmetros de entrada da classe
Nome | Tipo | Descrição |
---|---|---|
pOrder | INTEGER | Código do pedido de execução. |
pLayoutName | CHARACTER | Nome do relatório do Cadastro de Programas Datasul. |
pReportParams | JSONOBJECT | Objeto com os parâmetros do relatório. |
pFormat | CHARACTER | Formato do relatório. Formatos permitidos: .csv, .docx, .html, .jpeg, .mht, .pdf, .png, .rtf, .txt, .xls, .xlsx. |
Importante
O nome externo do relatório cadastrado em Programas Datasul - bas_prog_dtsul será utilizado no escopo de programas permitidos a utilizarem o token de autenticação do pedido agendado. Sendo assim, é de extrema importância que este cadastro esteja correto ou o relatório não será gerado.
02.2 Definições
Para chamada da classe, utilizar as seguintes definições de bibliotecas e variáveis. A temp-table é opcional, pois vai depender do formato de retorno que o desenvolvedor utilizará no programa chamador:
USING Progress.Json.ObjectModel.JsonObject FROM PROPATH. USING com.totvs.framework.smartview.GenerateReport FROM PROPATH. DEFINE TEMP-TABLE ttLogGenerateReport NO-UNDO DEFINE VARIABLE oGenerateReport AS GenerateReport NO-UNDO. |
02.3 JSON de parâmetros do relatório
O JSON de parâmetros deve estar de acordo com os parâmetros definidos no objeto de negócio do relatório em questão:
oReportParams = NEW JsonObject(). aReportParams = NEW JsonArray(). aReportParams = NEW JsonArray(). | O JSON demonstrado ao lado, ficará neste modelo: |
O JSON repassa os parâmetros de acordo com o Objeto de Negócio do relatório, como informado acima, porém pode ser enviado vazio (NEW JsonObject()).
02.4 Instância da classe
A instância da classe será atribuída em um objeto do tipo GenerateReport:
oGenerateReport = NEW GenerateReport(1475, "rpHistorLogin", oReportParams, "pdf"). |
02.5 Detalhamento sobre parâmetros de entrada
Informações sobre como recuperar os dados a serem repassados como parâmetro para a classe:
Valor | Descrição |
---|---|
1475 | Número do pedido de execução. Pode ser recuperado da variável global i-num-ped-exec-rpw durante a criação do agendamento ou da tabela ped_exec, campo num_ped_exec. Obrigatoriamente este pedido deve estar com ind_sit_ped_exec igual a 3 e o campo sv_uuid_token diferente de vazio para a geração do relatório. As duas ultimas informações são necessárias apenas a nível de testes da chamada da classe via editor Progress, por exemplo, pois elas são recuperadas internamente a partir do número do pedido de execução repassado como parâmetro. |
"rpHistorLogin" | Nome do layout do relatório que está sendo gerado. O mesmo deve estar cadastrado no bas_prog_dtsul - Programa Produto Datasul. |
oReportParams | Objeto contendo os parâmetros do relatório a ser gerado de acordo com objeto de negócio. Não é recuperado de banco,pode ser repassado nos parâmetros de criação do pedido de execução, bem como pode ser enviado de forma fixa na chamada da classe. Também e possível ser enviado vazio, caso queira gerar o relatório sem filtragem. |
"pdf" | Formato do relatório a ser gerado. Não é recuperado de banco, pode ser repassado nos parâmetros de criação do pedido de execução, bem como pode ser enviado de forma fixa na chamada da classe. |
02.6 Como recuperar objeto de saída da classe
A saída da classe consiste em um objeto do tipo JsonObject e pode ser recuperado de acordo com a necessidade de retorno para o usuário, utilizando a biblioteca Progress.Json.ObjectModel.JsonObject:
Método | Utilização |
Write( ) method (JsonObject) | // Conversão do retorno para LONGCHAR oGenerateReport:getReport():WRITE(lLogGenerateReport). |
WriteFile( ) method (JsonObject) | // Escrita do retorno para arquivo em diretório definido oGenerateReport:getReport():WriteFile("c:\temp\logJsonReport.json"). |
READ-JSON( ) method | // Conversão de retorno para TEMP-TABLE BUFFER ttLogGenerateReport:READ-JSON("JsonObject", oGenerateReport:getReport()). |
02.7 Programa exemplo
generateReportExample.p USING Progress.Json.ObjectModel.JsonObject FROM PROPATH. USING Progress.Json.ObjectModel.JsonArray FROM PROPATH. USING com.totvs.framework.smartview.GenerateReport FROM PROPATH. DEFINE TEMP-TABLE ttLogGenerateReport NO-UNDO FIELD iCode AS INTEGER FIELD cMsg AS CHARACTER FIELD lError AS LOGICAL. DEFINE VARIABLE oGenerateReport AS GenerateReport NO-UNDO. DEFINE VARIABLE oReportParams AS JsonObject NO-UNDO. DEFINE VARIABLE aReportParams AS JsonArray NO-UNDO. DEFINE VARIABLE lLogGenerateReport AS LONGCHAR NO-UNDO. oReportParams = NEW JsonObject(). aReportParams = NEW JsonArray(). aReportParams:ADD("1980-01-01T03:00:00.000Z"). oReportParams:ADD("dataInicial", aReportParams). aReportParams = NEW JsonArray(). aReportParams:ADD("2024-10-11T13:35:32.575Z"). oReportParams:ADD("dataFinal", aReportParams). aReportParams = NEW JsonArray(). aReportParams:ADD("super"). oReportParams:ADD("usuarios", aReportParams). oGenerateReport = NEW GenerateReport(1475, "rpHistorLogin", oReportParams, "pdf"). // Conversão do retorno para LONGCHAR oGenerateReport:getReport():WRITE(lLogGenerateReport). // Escrita do retorno para arquivo em diretório definido oGenerateReport:getReport():WriteFile("c:\temp\logJsonReport.json"). // Conversão de retorno para TEMP-TABLE BUFFER ttLogGenerateReport:READ-JSON("JsonObject", oGenerateReport:getReport()). FINALLY: IF VALID-OBJECT(oReportParams) THEN DELETE OBJECT oReportParams. IF VALID-OBJECT(aReportParams) THEN DELETE OBJECT aReportParams. IF VALID-OBJECT(oGenerateReport) THEN DELETE OBJECT oGenerateReport. END. |
02.7.1 Formato JSON
JSON GenerateReport { "ttLogGenerateReport": [ { "iCode": 57908, "cMsg": "A requisição de geração de token para exportação do relatório Smart View retornou erro 500.\n", "lError": true }, { "iCode": 57909, "cMsg": "A requisição de exportação do relatório Smart View retornou erro 401. Verifique se o relatório está cadastrado no Smart View e importado no Datasul ou se os conectores estão disponíveis entre Datasul x Smart View.\n", "lError": true } ] } |
02.8 Diretório de saída do relatório
O diretório de saída dos relatórios será o spool do usuário responsável pelo agendamento de execução dos pedidos, cadastrado no programa SEC000AA e é retornada a string do diretório em que o relatório foi salvo.
03. PARA RELEMBRAR
Para evitar erros na execução, considerar as seguintes informações:
- O código do pedido deve existir na tabela ped_exec;
- O pedido não pode estar com situação igual a 3 (executado) e o pedido deve conter o valor de UUID do Smart View (sv_uuid_token);
- O relatório Smart View, bem como o programa de geração de pedido deverão estar cadastrados no Programas Datasul - bas_prog_dtsul;
- O nome externo do relatório cadastrado no Programas Datasul deve estar de acordo com o padrão de diretórios reportView: <MODULO>/reportview/<NOME_RELATORIO>.treports. Por exemplo: sec/reportview/rpHistorLogin.treports;
- O relatório deve ser criado e exportado no Smart View (http://[host]:7017/home);
- O layout do relatório exportado do Smart View, deve estar importado no programa Importação Layout SmartView - html.fwk-smartview-layout;
- O relatório será salvo no diretório spool cadastrado para o usuário responsável pelo pedido de execução;
- O nome do servidor (HOST) e porta do servidor (PORT) utilizados para a requisição do token de autenticação será recuperado do cadastro de Propriedades do Sistema > Propriedades Gerais > Configuração Servidor.