Histórico da Página
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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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.
View file name oJsonData.blob height 250
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.