ABAPFOX - OBJETO DE BLOQUEIO ENQUEUE/DEQUEUE


      Objeto de bloqueio é uma ferramenta sensacional da SAP. Com ela conseguimos verificar se algum registro na tabela deve ou não ser modificado ou lido.

      Mas isto não é algo que reflita diretamente no banco de dados, ou seja, se alguém for alterar o registro, ele precisará verificar se este está bloqueado.

     É o que chamamos de funções de bloqueio ENQUEUE/DEQUEUE


Vamos por exemplo criar um objeto de bloqueio da tabela TADIR (que é standard)
O Objeto precisa começar com "E" e logo depois seguido de Z/Y por ser um objeto não standard. É uma nomeclatura um pouco diferente mesmo.

Vamos para a SE11



Objeto EZFOX_TADIR





Existem algumas opções de LOCK. Para escrita, ou Leitura e outros. Vamos usar o Write Lock!

Na aba Lock Parameters temos os campos que serão considerados para o Lock. Ele por default pega todos os que são chaves.


Ative essa paradinha!

E coloque objeto local, já que não vamos precisar transportar este objeto neste exemplo.


Quando fazemos isso, ele automaticamente cria 2 funções. ENQUEUE_.... e DEQUEUE...
Uma para bloquear e outra para tirar o bloqueio.




Então agora vamos colocar ele no código e entender como funciona.
Vá até a SE38


Vamos criar este Report:








Agora vamos colocar neste loop a nossa função de bloqueio. Vamos chamar o modelo:




Este nome de função estava lá no objeto de bloqueio...


Vamos descomentar e colocar os campos.



E por fim vamos alterar o Escopo de '2' para '1'. 






Vamos colocar um break quando encontrar bloqueio ativar tudo e está pronto;.



Vamos colocar um breakpoint no programa no loop e vamos deixar passar 1x pela Função:
Observem que o sy-subrc = 0




Agora vamos deixar neste ponto e executar o mesmo programa novamente. Você pode clicar 
na engrenagem que ele abre uma tela com o código:



Ou ir na SE38 e reprocessar.
Quando ele passar pela função com os mesmos dados das chaves da tabela, sy-subrc <> 0
e você sabe que tem alguem , em algum lugar que já deu o ENQUEUE.


Dessa forma conseguimos saber se podemos ou não ler, escrever, deletar o registro.

Se não respeitarmos isso, podemos competir com outra aplicação ou programa e o problema pode ser sério. O Banco de dados não da Lock, é o Abap que precisa fazer isso na sua própria aplicação.

O DEQUEUE funciona da mesma forma. Depois de processar os dados, você chamaria essa função passando os dados e ele desbloquearia o objeto.

Se você for na SM12, poderá ver o bloqueio em andamento:



Podemos deletar o bloqueio deletando o registro deste ALV.

Em todo caso, se não colocarmos o DEQUEUE, no final da aplicação ocorre o DEQUEUE automáticamente.

Se por algum motivo a aplicação parar no meio, pode ficar com o objeto de bloqueio preso, neste caso é só ir na SM12 e deletar esta linha. É o que acontece quando o sap "Cai" e vamos tentar acessar o programa que estavamos editando e ele informa que já existe alguem alterando o código. Ele ficou "preso". Basta desbloquear na SM12.

Se quiser aprender mais, entre para a ABAPFOX! www.abapfox.org

0 comentários:

Diferentes Estilos de Borda para cl_gui_splitter_container



            Assunto interessante para saber, principalmente pela melhoria visual do seu desenvolvimento quando o assunto é Split!
            No Jogo da memória fizemos o seguinte SPLIT: Confira este poste aqui: Jogo da memória



       As bordas são redimensionadas, mas são grossas e não ficam muito bonitinhas.
Se colocarmos o método set_border da classe cl_gui_splitter_container teremos o seguinte resultado:



  As bordas ficam sem o efeito 3D, dando uma cara diferente.

Se passarmos 'X' para este método:

O efeito é pequeno, mas ainda continuamos sem o 3d:



Legal saber pois fica um efeito diferente quando temos split container.

Quer saber mais? www.abapfox.org

0 comentários:

Copyright © 2013 ABAP SAP - AbapFox! Aprenda ABAP Definitivamente