12 Şubat 2014 Çarşamba

SAP Kilit (LOCK) Konsepti (ENQUEUE- DEQUEUE)

          SAP sistemi, application server seviyesinde bir global kilit tablosu tutar. Bu tablo kullanılarak yerel değişkenleri değiştiriken bu alanları kilitlemek mümkün olur. Bir kaç ekran boyunca istnene alanları kilitli olarak tutabilirsiniz. Ayrıca, Veritabanında henüz olmayan tabloları da local olarak kilitleyebilirsiniz. Bu özelliği yeni tablo satırları eklerken kullanbilirsiniz.  

              Tablo bağlantılı bir Kilit objesi active ttiğinizde otomatik olarak tabloya özgü bir fonksiyon module yaratılır. Bu kilit modülü çağrıldığında, mantıksal kilitler belitrilen tablo için setlenir.

                  Ancak, birincil başka bir tablonun key anahtarına sahip bir tablo yarattığınızda, otomatik olarak her bir tablo içinde kilit objesi yaratılır. Örneğin; SFLIGHTS (primary) ve SBOOK (secondary)  tablolarını içeren bir kilit objesi FLIGHT’I kilitler.
Bir kilit objesi yaratırken, herbir tablo için ayrı ayrı setlemek gerekir (E: Write lock, S: Read lock, X: Extended write lock).  Bu kilit mod fonksiyonları default seçilebileceği gibi, tekrar tekrar da setlenebilir.

Kilit Modüllerinin Yaratılması

Bir kilit objesi aktiveedildiğinde, system otomatik olarak tablodaki alanların set edilmesi ve bırakılması (release) için birer fonksiyon modülü yaratır.

TVARVC tablosu için kilit objesi 'ENQUEUE_ESVARVC'  - For setting locks.
  'DEQUEUE_ESVARVC'        - For releasing locks.

Kilit Modüllerinin Çağrılması

Eğer system kilit setlemede başarısız olursanız, ya giriş zaten kilitlenmiştir. (foreign_lock)veya kilit yürütmede bir sorun(system_failure) vardır. Programın sonunda, DEQUEUE fonksiyon modülü ile, kilit tablosundaki girişler silinir.
DEQUEUE fonksiyonu herhangi bir exception üretmez. Çünkü kilitlenmeyen bir girişi release ederseniz bir etki doğurmaz.
 CALL FUNCTION 'ENQUEUE_ESVARVC'
      
EXPORTING
       name           
lv_w_name
       
type           lv_w_type
      
EXCEPTIONS
      foreign_lock   
4
      system_failure 
8.
    
IF sy-subrc = 0.
      tvarvc-sign 'I'.
      tvarvc
-opti 'EQ'.
      tvarvc
-low  lv_w_value1.
      tvarvc
-high space.
        MODIFY tvarvc.
        
COMMIT WORK.
     ENDIF


   
CALL FUNCTION 'DEQUEUE_ESVARVC'
          
EXPORTING
      name 
lv_w_name
     
type lv_w_type.
    
ENDCASE.

Hiç yorum yok:

Yorum Gönder