Árvore de páginas


01. Objetivo


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

O CDC é um recurso que identifica e captura elementos que foram alterados em tabelas de um banco de dados de origem, decorrentes de operações de criação, atualização e exclusão, 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:

03. Script Base


Para você gerar o arquivo com as policies de CDC, você deve seguinte esta passo a passo:

  • Criar um programa responsável por executar a extração de dados. Segue o exemplo do programa com nome extract_data.p
  • Após deve ser criado o programa para rodar o .p de extração criando um alias para o banco. 

extract_data.p

Este programa, 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:

extract_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 startDate      AS DATETIME-TZ    NO-UNDO.
DEFINE VARIABLE endDate        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, startDate, endDate, filter, forceLoad).

COPY-LOB oJsonData:GetJsonText() TO FILE "c:\temp\oJsonData.blob".


Segue uma tabela De-Para para os parâmetros ajustáveis.

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. 


Criar o alias para o banco de dados em questão, conforme abaixo:

exec_extract.p
CREATE ALIAS dictdb FOR DATABASE "<banco de dados>" NO-ERROR.

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

https://docs.progress.com/bundle/abl-reference/page/CREATE-ALIAS-statement.html


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

oJsonData.blob


04. Boas Práticas


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

05. Conclusão


Com esta documentação, as áreas de negócios poderão utilizar as classes do Datasul de maneira eficaz para extrair os dados do CDC, garantindo uma gestão mais eficiente das informações.