Á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 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 mecanismo recurso que permite capturar e registrar alterações feitas nos dados do 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

run_script_cdc.p

Inicialmente, para que se consiga rodar o programa script_cdc.p (que será detalhado mais abaixo) e fazer o resgate dos registros, deve obrigatoriamente criar o alias "dictdb", conforme abaixo:

Image Removed

script_cdc.p

Abaixo há o detalhamento dos parâmetros necessários para que seja possível instanciar a classe que irá conter os dados das tabelas:

  • racTenant (LONGCHAR): Tenant ID do RAC;
  • logicalDBName (CHARACTER): Nome lógico da base de dados;
  • tableName (CHARACTER): Nome da tabela;
  • dateFrom (DATETIME-TZ): Data de início das alterações;
  • dateTo (DATETIME-TZ): Data final das alterações;
  • filter (CHARACTER): Adição de filtro na query (Exemplo: "cod_status = 9")

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

Image Removed


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:

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 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á conter retornar um Json com o retorno dos registros 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:

Bloco de código
titleexec_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. View filenamerun_script_cdc.pheight250

View file
name
script_cdc
oJsonData.
p
blob
height250


04. Boas Práticas

para Uso do CDC no Datasul


  • Eliminar objetos que não serão mais utilizados, para não causar memory leak
  • Filtrar os dados: Sempre especifique um intervalo de tempo ou um critério de filtro para evitar extrações muito grandes.

  • Manter logs: Registre logs das execuções para auditoria e depuração.

  • Testar em ambiente de homologação: Antes de utilizar em produção, faça testes para validar os resultados.

05. Conclusão


Com essa esta documentação, as áreas de negócio podem negócios poderão utilizar as classes do Datasul de forma maneira eficaz para extrair os dados do CDC. O uso correto dessas classes permite uma melhor gestão , garantindo uma gestão mais eficiente das informações.