Mustafa HAMIT

ABAP’ta Lock Object Kullanımı (ENQUEUE / DEQUEUE Rehberi)

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.

İşlemFunction
Lock almaENQUEUE_*
Lock kaldırmaDEQUEUE_*

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ürAçıklama
Shared LockSadece okuma
Exclusive LockTek kullanıcı erişimi
Exclusive but not cumulativeTek 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’i
  • VBELN → 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/

Loading

Bir yanıt yazın