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:
O CDC esteja ativado no banco de dados Progress OpenEdge.
- Para verificar se esta ativado, você pode seguir este documento: CFG - Jornalização
- Para criar o CDC, você pode seguir este documento: 11. Como Habilitar o OpenEdge CDC (Change Data Capture)
As permissões adequadas tenham sido concedidas ao usuário de acesso.
O ambiente Datasul esteja devidamente configurado.
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:
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âmetro | Tipo | Descrição |
---|---|---|
lcTenantID | LONGCHAR | Tenant provisionado. Não é obrigatório. |
cDBName | CHARACTER | Banco de dados (exemplo: movdis). |
cTableName | CHARACTER | Nome da tabela (exemplo: nota-fiscal). |
startDate | DATETIME-TZ | Data inicial de extração. |
endDate | DATETIME-TZ | Data final de extração. |
filter | CHARACTER | Filtro utilizado na tabela de negócio (exemplo: movdis.nota-fiscal.dt-emis-nota >= today - 1095) |
forceLoad | LOGICAL | Se 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:
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.
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.