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 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.
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.
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:
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â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.
Para fins de análise, o arquivo resultante está anexado abaixo.
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.