"
Supported by

Preventing competition in an ABAP program

They say that competition in trade is good. Good for consumers, that is. It lowers prices and so on. But inside computers it creates problems for those using them.

Usually, competition is contained in ABAP at the data level, blocking ( euqueue ) certain tables based on their key. But sometimes, something more violent may be required to ensure that a program may not run more than once at the same time. The ESINDX lock object can be used to do this.

And thus:


  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.

Thanks to pylbug for the photo.

Greetings from Abapinho.

4 comentários a “Preventing competition in an ABAP program”

  1. Bruno Filipa Diz:

    Simples mas útil! Obrigado! =)

  2. Vinícius Mussato Diz:

    Muito bom, mas e se eu quiser saber qual o usuário que está rodando o programa?

  3. Nuno Godinho Diz:

    Vinícius, aí acho que vais ter de procurar nas tabelas de bloqueio. Mas nunca fiz, não sei como é.

  4. Pedro Melo Diz:

    Olá,

    Eu estou a usar essa função e acho perfeita.
    O utilizador que se encontra a correr o programa é devolvido na variável sy-msgv1.

    Podes completar com:

    if sy-subrc 0.
    clear msg.
    concatenate ‘A transação está em utilizadção pelo user’ sy-msgv1 ‘!’
    into msg separated by space.
    message msg type ‘S’ display like ‘E’.
    stop.
    endif.

    Pedro Melo

Deixe um comentário


About Abapinho
Abapinho runs on WordPress
Articles (RSS) e Comments (RSS).