Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

CONTEÚDO

Índice
minLevel2

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. 

EXEMPLO DE UTILIZAÇÃO

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

NomeTipoDescrição
pOrderINTEGERCódigo do pedido de execução.
pLayoutNameCHARACTERNome do relatório do Cadastro de Programas Datasul.
pReportParamsJSONOBJECTObjeto com os parâmetros do relatório.
pFormatCHARACTERFormato do relatório. Formatos permitidos: .csv, .docx, .html, .jpeg, .mht, .pdf, .png, .rtf, .txt, .xls, .xlsx.
Aviso
titleImportante

O nome externo do relatório cadastrado em Programas Datasul - bas_prog_dtsul será inserido 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 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.

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: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).

O JSON demonstrado ao lado, ficará neste modelo:

Nota

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: 

ValorDescrição
1475Nú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. 
oReportParamsObjeto 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

Formas

Como recuperar objeto de

recuperar

saída

de execução

da classe

A saída da classe consiste num em um objeto do tipo JsonObject e pode ser recuperado da forma que melhor atender a necessidade do desenvolvedorde acordo com a necessidade de retorno para o usuário, utilizando a biblioteca Progress.Json.ObjectModel.JsonObject:

MétodoUtilizaçã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

Bloco de código
titlegenerateReportExample.p
linenumberstrue
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

Retorno da classe

A classe irá retornar um objeto JSON com logs de erros ou de sucesso ocorridos durante a execução. Esse JSON poderá ser utilizado de acordo com a necessidade de retorno para o usuário. No exemplo acima é convertido para temp-table, mas permite também converter para longchar, jogar diretamente num arquivo texto, etc. As possibilidades de conversão podem ser consultadas na documentação Progress. 

02.7.2

Formato JSON

Bloco de código
titleJSON GenerateReport
linenumberstrue
{
  "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 deverá estar cadastrado 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.