Cerca nel blog

venerdì 9 maggio 2025

Blocchi per i programmi per evitare esecuzioni contemporanee

 

Blocchi per i programmi per evitare esecuzioni contemporanee

Per gestire i blocchi per i programmi, garantendo che solo un utente alla volta possa eseguire un determinato programma usare i FM ENQUEUE_ES_PROG e DEQUEUE_ES_PROG

Questo è un programma semplice di esempio:

*&---------------------------------------------------------------------*

*& Report ZTEST_BLOCCOPROGRAMMA
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_bloccoprogramma.

DATAlv_user TYPE sy-uname.

START-OF-SELECTION.

* Ottieni l'utente corrente
  lv_user sy-uname.

* Blocca il programma per l'utente corrente
  CALL FUNCTION 'ENQUEUE_ES_PROG'
    EXPORTING
      mode_trdir     'E'
      name           sy-repid
      x_name         lv_user
    EXCEPTIONS
      foreign_lock   1
      system_failure 2
      OTHERS         3.

  IF sy-subrc <> 0.
    WRITE'Il programma è già in esecuzione da un altro utente.'SY-MSGV1.
    EXIT.
  ENDIF.

* Il programma principale inizia qui
*WRITE: 'Esecuzione del programma da parte dell''utente:', lv_user.

* Simula un'attività lunga
  WAIT UP TO 30 SECONDS.

* Rilascia il blocco
  CALL FUNCTION 'DEQUEUE_ES_PROG'
    EXPORTING
      mode_trdir 'E'
      name       sy-repid
      X_NAME      lv_user.

  WRITE'Il programma è stato completato con successo.'.


Ecco cosa otteniamo in output se eseguiamo in contemporanea lo stesso report




Nessun commento:

Posta un commento