L'ABAP pour les francophones

TYALGR
12 rue des tamaris 27240 Buis sur Damville
Tel : 09 52 06 57 30 Fax : 01 34 29 60 47 Email : contact [at] tyalgr.com
Connexion
 

Zephyr

ABAP

Aller à   
Rechercher
Auteur
Message Vue en arbre
ECIR ECIR
Posté le: 10 Mai 2007 12:57:21
Sujet de la contribution: les objets de blocage

Le concept de verrouillage des enregistrements est commun à toutes les bases de données : contrôler l'intégrité d'un enregistrement en n'autorisant qu'un seul utilisateur à la modifier à un instant t.

La complexité de SAP réside dans sa portabilité : SAP est capable de travailler avec les bases de données du marché (ORACLE, SQL SERVER, MAXDB, SYBASE, AS400,...). Or le concept de blocage diffère d'un SGBDR à l'autre.

SAP gère les verrous de blocage par un objet, géré dans le DDIC. Celui-ci encapsule le concept de verrous, libérant l'abapeur du problème de la spécificité de chaque SGBR. Cet objet de blocage se crée par la SE11. 2 modules fonctions permettent de la gérer. L'objet de blocage peur concerner plusieurs tables, plusieurs champs, sans toutefois obliger à bloquer l'ensemble du ou des enregistrements.

Les 2 modules fonctions seront générés en même temps que l'objets de blocage, ils lui sont dédiés. Leur nom commencera par ENQUEUE_nomdelobjet et DEQUEUE_nomdelobjet. Ils seront utilisés dans les programmes pour activer/désactiver au niveau de la base de données l'objet de blocage.

La transaction SM12 permet de connaître la liste des objets de blocage actifs et dépendant de votre profil utilisateur. Il arrive parfois qu'une transaction qui se termine mal laisse sur l'enregistrement des verrous, empêchant les autres utilisateurs de le mettre à jour.



Modifié 10 Mai 2007 15:10:15
Haut 
ECIR ECIR
Posté le: 04 Juillet 2007 19:28:01
Sujet de la contribution: RE:les objets de blocage

Une syntaxe intéressante dans la gestion d'un objet de blocage

CLEAR gd_table_bloquee.

gd_table_bloquee = c_flag.

WHILE gd_table_bloquee = c_flag.

CALL FUNCTION 'ENQUEUE_EZZADVRIBERR'

EXPORTING

mode_zadvriberr = 'E'

EXCEPTIONS

foreign_lock = 1

system_failure = 2

error_message = 3

OTHERS = 4.

IF sy-subrc GT 1.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ELSE.

IF sy-subrc EQ 0.

gd_table_bloquee = ''.

ELSE.

gd_table_bloquee = c_flag.

ENDIF.

ENDIF.

ENDWHILE.

Ceci est à utiliser avec prudence, car le traitement ne s'arrêtera que si nous arrivons à bloquer l'intégralité de la table. Problème en cas de blocage du à un problème de connexion par un autre utilisateur (par exemple).



Haut 
yann SZWEC
Posté le: 12 Octobre 2007 14:37:22
Sujet de la contribution: RE:les objets de blocage

une syntaxe trouvée dans un programme standard SAP

constants:
* maximal waiting time in microseconds
  gc_max_waiting_time type i value 60000000,
* time between subsequent attempts to set the enqueue in seconds
  gc_sleeping_time    type i value 5.


  GET RUN TIME FIELD lv_waiting_time.
  lv_varkey = iv_header_guid.
  DO.
    CALL FUNCTION 'ENQUEUE_E_TABLEE'
      EXPORTING
        tabname        = 'CRM_JSTO'
        varkey         = lv_varkey
      EXCEPTIONS
        foreign_lock   = 1
        system_failure = 2
        OTHERS         = 3.
    IF sy-subrc EQ 0.
      EXIT.
    ENDIF.
    GET RUN TIME FIELD lv_waiting_time.
    IF lv_waiting_time LE gc_max_waiting_time.
      WAIT UP TO gc_sleeping_time SECONDS.
    ELSE.
* Waiting time is over. No endless waiting!
      EXIT.
    ENDIF.
  ENDDO.



Haut 
Aller à   
Rechercher
© 2007 Ecir Consulting. Tous droits réservés.