Introdução:
Neste post do blog, tentarei lhe dar uma breve ideia sobre LUW (Unidade Lógica de Trabalho).
Basicamente, é o tempo necessário para o sistema completar o processo de modificação de dados do banco de dados (DB). Seja completando todas as alterações feitas nos dados do DB ou revertendo-as. O principal propósito da LUW é garantir a consistência dos dados no sistema.
Existem dois tipos de LUW disponíveis:
1. LUW de Banco de Dados
2. LUW de SAP
1. LUW de Banco de Dados:
As LUW consistem em várias operações de banco de dados como Inserir, Atualizar, Excluir e Modificar dados que realizam alterações em nível de banco de dados. É utilizada para manter a consistência dos dados.
Abaixo está uma lista de pontos em que as LUW de banco de dados começam e terminam.
A LUW de Banco de Dados Começa
-
Sempre que um passo de diálogo começa (quando o passo de diálogo é enviado para o processo de trabalho).
-
Sempre que a LUW de banco de dados anterior termina em uma confirmação de banco de dados.
-
Sempre que a LUW de banco de dados anterior termina em um rollback de banco de dados.
A LUW de Banco de Dados Termina
-
Sempre que ocorre uma confirmação de banco de dados. Isso escreve todas as alterações no banco de dados.
-
Sempre que ocorre um rollback de banco de dados. Isso reverte todas as alterações feitas durante a LUW.
2. LUW de SAP:
Ao contrário de uma LUW de banco de dados, uma LUW de SAP pode abranger múltiplos passos de diálogo e ser executada usando uma série de diferentes processos de trabalho. Se uma LUW de SAP contém alterações no banco de dados, você deve escrever todas elas ou nenhuma no banco de dados. Para garantir que isso aconteça, você deve incluir uma confirmação de banco de dados quando sua transação for concluída com sucesso e um rollback de banco de dados caso o programa detecte um erro.
No entanto, como as alterações no banco de dados de uma LUW de banco de dados não podem ser revertidas em uma LUW de banco de dados posterior, você deve realizar todas as alterações no banco de dados para a LUW de SAP em uma única LUW de banco de dados. Para manter a integridade dos dados, você deve agrupar todas as suas alterações no banco de dados na última LUW de banco de dados da LUW de SAP.
A técnica de agrupamento de alterações no banco de dados dentro de uma LUW de SAP garante que ainda seja possível revertê-las. Isso também significa que você pode distribuir uma transação em mais de um processo de trabalho.
Abaixo estão as diversas técnicas de agrupamento utilizadas no SAP:
1. Agrupamento utilizando módulos de função (atualização)
A instrução CALL FUNCTION ... IN UPDATE TASK é usada para registrar um módulo de função de atualização para execução posterior em um processo de trabalho de atualização (atualização síncrona e assíncrona) ou no processo de trabalho atual (atualização local).
2. Agrupamento utilizando módulos de função (RFC transacional)
A instrução CALL FUNCTION ... IN BACKGROUND TASK é usada para registrar um módulo de função habilitado para acesso remoto para execução posterior de forma assíncrona em segundo plano e através da interface RFC (RFC transacional).
Nota
Um módulo de função pode ser especificado como um módulo de função de atualização ou habilitado para acesso remoto, mas não ambos ao mesmo tempo. A atualização é usada para realizar LUW de SAP dentro do AS ABAP, enquanto o RFC transacional cria LUW em sistemas distribuídos.
-
Agrupamento utilizando sub-rotinas
A instrução PERFORM ... ON COMMIT é usada para registrar uma sub-rotina para execução posterior em um processo de trabalho diferente.
Exemplo:
Consideremos que estamos tentando salvar dados através de várias funções, estamos completando a criação de dados no banco de dados, mas para atualizar o banco de dados explicitamente, é necessário um commit de trabalho, caso contrário, devemos usar um rollback para reverter a alteração ocorrida no nível do banco de dados.
DATA(values) = VALUE demo_update_tab( ).
EXPORT values = values TO MEMORY ID 'DEL'.
PERFORM delete ON COMMIT.
WAIT UP TO 1 SECONDS. "<--- Roll-out/Roll-in com confirmação de banco de dados
values = VALUE #(
( id = 'X' col1 = 100 col2 = 200 col3 = 300 col4 = 400 )
( id = 'Y' col1 = 110 col2 = 210 col3 = 310 col4 = 410 )