Árvore de páginas

Versões comparadas

Chave

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


01. Objetivo


Este documento tem como objetivo orientar as áreas de negócio sobre como utilizar as classes do Datasul para extrair informações do Change Data Capture (CDC), garantindo que possam utilizar essa funcionalidade de maneira eficiente e segura. 

O CDC é um mecanismo que permite capturar e registrar alterações feitas nos dados do banco de dados, facilitando a extração e o processamento dessas informações.

02. Configuração do Ambiente


Para utilizar as classes do Datasul relacionadas ao CDC, é necessário garantir que:

  • O CDC esteja ativado no banco de dados Progress OpenEdge.

  • As permissões adequadas tenham sido concedidas ao usuário de acesso.

  • O ambiente Datasul esteja devidamente configurado.

03. Script Base


Para acesso as policies de CDC (exemplo: CDC_emitente), é necessário criar um alias para o banco de dados em questão, conforme abaixo:


Bloco de código
titleexec_extract.p
CREATE ALIAS dictdb FOR DATABASE "emscad" NO-ERROR.

// Executar o programa que utilizará o banco com o alias criado acima
RUN "C:\Temp\extract_data.p".


extract_data.p

O programa responsável por executar a extração de dados, deverá ser criado separadamente do programa de processamento onde houve a criação do alias do banco de dados.

No exemplo abaixo, estamos instanciando a classe DataSyncExtract() que fará a extração dos dados das tabelas do CDC conforme parâmetros enviados:

Bloco de código
titleextract_data.p
USING com.totvs.datasul.datasync.DataSyncExtract FROM PROPATH. 

USING Progress.Json.ObjectModel.JsonObject FROM PROPATH.

DEFINE VARIABLE oExtractData AS DataSyncExtract NO-UNDO.

ASSIGN oExtractData = NEW DataSyncExtract().

DEFINE VARIABLE lcTenantId     AS LONGCHAR       NO-UNDO.
DEFINE VARIABLE cDBName        AS CHARACTER      NO-UNDO.
DEFINE VARIABLE filter         AS CHARACTER      NO-UNDO.
DEFINE VARIABLE forceLoad      AS LOGICAL        NO-UNDO INIT TRUE.
DEFINE VARIABLE cTableName     AS CHARACTER      NO-UNDO.
DEFINE VARIABLE dateFrom       AS DATETIME-TZ    NO-UNDO.
DEFINE VARIABLE dateTo         AS DATETIME-TZ    NO-UNDO.
DEFINE VARIABLE oJsonData      AS JsonObject     NO-UNDO. 


ASSIGN lcTenantId = "<tenantID>"
       cDBName    = "<banco de dados>"
       cTableName = "<nome da tabela>"
       startDate  = DATETIME-TZ(01/01/2025)
       endDate    = DATETIME-TZ(TODAY)
       filter     = "<filtro tabela de negócio>"
       forceLoad  = false.

ASSIGN oJsonData = oExtractData:getDataFromTable(lcTenantId, cDBName, cTableName, dateFrom, dateTo, filter, forceLoad).

COPY-LOB oJsonData:GetJsonText() TO FILE "c:\temp\oJsonData.blob".
ParâmetroTipoDescrição
lcTenantID LONGCHARTenant provisionado. Não é obrigatório.
cDBName CHARACTERBanco de dados (exemplo: movdis).
cTableNameCHARACTERNome da tabela (exemplo: nota-fiscal).
startDateDATETIME-TZData inicial de extração.
endDateDATETIME-TZData final de extração.
filter CHARACTERFiltro utilizado na tabela de negócio (exemplo:  movdis.nota-fiscal.dt-emis-nota >= today - 1095)
forceLoadLOGICALSe true, extrai todos os dados da tabela. Se false, limita extração ao range de datas.

Fazendo a instância corretamente conforme explicado acima, o objeto oJsonData irá retornar um json com os dados extraídos conforme parâmetros enviados no método oExtractData:getDataFromTable.


A execução do bloco de código acima resultará no arquivo oJsonData.blob, conforme última linha do script. 

Para fins de análise, o arquivo resultante está anexado abaixo.

View file
nameoJsonData.blob
height250


04. Boas Práticas


  • Eliminar objetos que não serão mais utilizados, para não causar memory leak.

05. Conclusão


Com essa documentação, as áreas de negócio podem utilizar as classes do Datasul de forma eficaz para extrair os dados do CDC.

O uso correto dessas classes permite uma melhor gestão das informações.