Executa código após um COMMIT
Lembras-te como o CALL FUNCTION IN UPDATE TASK permitia adiar algumas acções até ao momento do COMMIT?
Aqui vais aprender como podes fazer mais ou menos o mesmo (ok não é realmente o mesmo) com classes e métodos.
O SAP lança o evento cl_system_transaction_state=>transaction_finished sempre que faz um COMMIT. Portanto, se tiveres coisas que só queres fazer nesse momento e não antes, aqui tens uma forma de o conseguir.
Primeiro declaras na tua classe um método como event handler desse evento:
METHODS on_transaction_finished
FOR EVENT transaction_finished OF cl_system_transaction_state
IMPORTING kind.
Nesse método implementas tudo o que queres que aconteça apenas no momento do COMMIT:
METHOD on_transaction_finished.
WRITE / 'Hello, after commit'.
ENDMETHOD.
E depois só tens de subscrever o método:
METHOD execute.
" (...)
SET HANDLER on_transaction_finished.
" (...)
ENDMETHOD.
Pronto. Se correres o método execute, no próximo COMMIT o SAP vai correr o método on_transaction_finished.
Nota que ninguém te impede de teres várias classes ou várias instâncias a subscrever este evento.
Obrigado Dries Van Damme pela dica.
O Abapinho saúda-vos.