Evitando a concorrência num programa ABAP
2012-07-30
Dizem que a concorrência no comércio é boa. Boa para os consumidores, isto é. Faz descer os preços e assim. Mas dentro dos computadores prejudica quem os consome.
Normalmente em ABAP combate-se a concorrência ao nível dos dados, bloqueando ( euqueue ) determinadas tabelas com base na sua chave. Mas por vezes pode ser necessário algo mais violento como garantir que um programa não pode correr mais do que uma vez ao mesmo tempo. Para fazer isso pode usar-se o objecto de bloqueio ESINDX.
Assim:
DATA srtfd LIKE indx-srtfd.
srtfd = sy-repid.
DO.
CALL FUNCTION 'ENQUEUE_ESINDX'
EXPORTING
mandt = sy-mandt
relid = 'GN'
srtfd = srtfd
srtf2 = 0
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc = 0.
EXIT.
ELSE.
WAIT UP TO 1 SECONDS.
ENDIF.
ENDDO.
Obrigado a pylbug pela foto.
O Abapinho saúda-vos.