SAP sistemlerinde aynı veri üzerinde birden fazla kullanıcının işlem yapması veri tutarsızlığına neden olabilir.
Bu problemi önlemek için ABAP’ta Lock Object yapısı kullanılır.
Lock object mekanizması sayesinde bir kayıt işlem sırasında kilitlenir ve başka kullanıcıların aynı anda değiştirmesi engellenir.
Bu yazıda ABAP’ta lock object kullanımını, ENQUEUE / DEQUEUE işlemlerini ve gerçek kullanım senaryolarını inceleyeceğiz.
Lock Object Nedir?
Lock object:
- SAP’nin kayıt kilitleme mekanizmasıdır
- Veri çakışmasını önler
- Aynı kaydın eş zamanlı değiştirilmesini engeller
Özellikle MM, SD, WM ve FI gibi modüllerde yoğun şekilde kullanılır.
Lock Object Nerede Oluşturulur?
Lock object’ler aşağıdaki transaction üzerinden oluşturulur:
SE11 → Lock Object
ENQUEUE ve DEQUEUE Nedir?
SAP lock object oluşturduğunda otomatik olarak function module üretir.
| İşlem | Function |
|---|---|
| Lock alma | ENQUEUE_* |
| Lock kaldırma | DEQUEUE_* |
Temel ENQUEUE Kullanımı
CALL FUNCTION 'ENQUEUE_EZMATERIAL'
EXPORTING
matnr = lv_matnr
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
Bu işlem:
- MATNR kaydını lock’lar
- Başka kullanıcıların değiştirmesini engeller
SY-SUBRC Kontrolü
Lock sonrası mutlaka kontrol yapılmalıdır.
IF sy-subrc <> 0.
MESSAGE 'Kayıt kullanımda' TYPE 'E'.
ENDIF.
foreign_lock Ne Demek?
foreign_lock = 1
şu anlama gelir:
Kayıt başka kullanıcı tarafından lock alınmış.
DEQUEUE Kullanımı
İşlem bittikten sonra lock kaldırılır.
CALL FUNCTION 'DEQUEUE_EZMATERIAL'
EXPORTING
matnr = lv_matnr.
COMMIT WORK Sonrası Lock Çözülür mü?
Çoğu durumda evet.
COMMIT WORK.
sonrasında SAP enqueue lock’ları otomatik release edilir.
Ama kritik süreçlerde explicit DEQUEUE kullanımı daha güvenlidir.
DEQUEUE_ALL Kullanımı
CALL FUNCTION 'DEQUEUE_ALL'.
Bu kullanım:
- Mevcut session’daki tüm lock’ları kaldırır
- Sadece current user için geçerlidir
Dikkat: Gereğinden fazla lock kaldırabilir.
WAIT Parametresi Ne İşe Yarar?
_wait = 'X'
Anlamı:
- Kayıt lock’luysa bekle
- Lock boşalınca devam et
Örnek:
CALL FUNCTION 'ENQUEUE_EZMATERIAL'
EXPORTING
matnr = lv_matnr
_wait = 'X'.
Gerçek Hayat Senaryosu
Örneğin bir kullanıcı satış siparişini düzenlerken:
- Kullanıcı A → siparişi açtı
- Kullanıcı B → aynı siparişi değiştirmeye çalıştı
Lock object yoksa:
- Veri çakışması
- Overwrite problemi
- Tutarsız kayıtlar
oluşabilir.
Bu yüzden SAP önce lock alır.
Aktif Lock’lar Nereden Görülür?
SAP’te aktif lock kayıtları:
SM12
transaction’ından görüntülenebilir.
Burada:
- Kullanıcı
- Lock object
- Lock key
bilgileri görülebilir.
Lock Object Türleri
| Tür | Açıklama |
|---|---|
| Shared Lock | Sadece okuma |
| Exclusive Lock | Tek kullanıcı erişimi |
| Exclusive but not cumulative | Tek seferlik exclusive |
En yaygın kullanım:
Exclusive Lock
Önemli Notlar
- Lock object database lock değildir
- SAP enqueue server üzerinde çalışır
- Uzun süre açık lock performans sorununa neden olabilir
- İşlem sonunda lock mutlaka kaldırılmalıdır
Örnek Akış
CALL FUNCTION 'ENQUEUE_EZTEST'.
IF sy-subrc = 0.
UPDATE ztable SET field = 'X'.
COMMIT WORK.
CALL FUNCTION 'DEQUEUE_EZTEST'.
ENDIF.
Sonuç
Lock object kullanımı, SAP sistemlerinde veri tutarlılığı açısından kritik öneme sahiptir.
Özellikle aynı kayıt üzerinde birden fazla kullanıcının işlem yaptığı senaryolarda:
- Veri çakışmasını önler
- Güvenli işlem sağlar
- Tutarlı kayıt yönetimi sunar
ABAP geliştirmede ENQUEUE ve DEQUEUE mantığını doğru anlamak, gerçek proje süreçlerinde büyük avantaj sağlar.
Gerçek Hayattan VBAK Lock Örneği
Satış siparişi işlemlerinde aynı sipariş üzerinde birden fazla kullanıcının işlem yapması ciddi veri tutarsızlıklarına neden olabilir.
Örneğin:
- Kullanıcı A → satış siparişini değiştiriyor
- Kullanıcı B → aynı anda aynı siparişi açıyor
Bu durumda SAP ilgili satış siparişini lock’layarak veri çakışmasını önler.
Örnek kullanım:
DATA lv_vbeln TYPE vbak-vbeln VALUE '0000123456'.
CALL FUNCTION 'ENQUEUE_EVVBAKE'
EXPORTING
vbeln = lv_vbeln
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE 'Sipariş başka kullanıcı tarafından kullanımda'
TYPE 'E'.
ENDIF.
İşlem tamamlandıktan sonra lock kaldırılır:
CALL FUNCTION 'DEQUEUE_EVVBAKE'
EXPORTING
vbeln = lv_vbeln.
Buradaki:
EVVBAKE→ VBAK satış siparişi header lock object’iVBELN→ satış siparişi numarası
anlamına gelir.
Bu yapı SAP standardında oldukça yaygın kullanılır ve özellikle VA02 gibi transaction’larda aktif olarak çalışır.
Abap’ta CASE kullanımını öğrenmek için bu yazıyı inceleyebilirsiniz
Link: https://www.mustafahamit.com/abapta-case-kullanimi/
![]()