EVENTS IN TABLE MAINTENANCE | ABAP

SAP ABAP’ta Tablo Bakım Üreticisi’ndeki (TMG-Table Maintenance Generator) tablo olayları, standart işlevselliği genişletmek ve tablo bakım ekranının davranışını kontrol etmek için çok önemlidir. Tablo girişlerinin oluşturulması, değiştirilmesi ve silinmesi etrafında bakım sürecinin özelleştirmesine, verilerin doğrulamasına, hesaplamalar yapılmasına ve özel mantık uygulanmasına olanak tanır.

1. Gelişmiş Veri Doğrulama:

  • Standart Sınırlamalar: Standart TMG, temel veri doğrulama (örneğin, Veri Sözlüğü’nde tanımlanan veri türü kontrolleri, uzunluk kısıtlamaları) sunar.
  • Olaylarla Özel Doğrulama: Tablo olayları, daha karmaşık doğrulama kurallarını uygulamanızı sağlar. Örneğin:
    • Verilerin birden çok alanda tutarlılığını kontrol etme.
    • Verileri harici veri kaynaklarına (örneğin, ana veri tabloları) karşı doğrulama.
    • Birden çok faktöre bağlı iş kurallarını uygulama.
  • Örnek: BEFORE SAVING olayını kullanarak, kullanıcının geçmişte bir sona erme tarihi olan bir indirim kodu oluşturması engellenebilir.

2. Özel Veri İşleme ve Dönüşümleri:

  • Veri Zenginleştirme: Verileri veri tabanına kaydedilmeden önce değiştirilebilir.
    • Bir alanın değerlerini diğer alanların değerlerine göre türetme (örneğin, miktara ve birim fiyatına göre bir fiyat hesaplama).
    • Alanları otomatik olarak sistem tarafından oluşturulan değerlerle doldurma (örneğin, zaman damgası, kullanıcı kimliği).
    • Veri formatlarını dönüştürme (örneğin, tarih formatlarını dönüştürme).
  • Örnek: BEFORE SAVING olayında, kullanıcı tarafından girilen miktara ve birim fiyatına göre toplam sipariş tutarının hesaplanması.

3. Kullanıcı Girişini ve Eylemlerini Kontrol Etme:

  • Veri Girişini Kısıtlama: Kullanıcıların belirli alanlara hangi değerleri girebileceğini kontrol edebilir veya kullanıcıların belirli eylemleri gerçekleştirmesini tamamen engelleyebilirsiniz (örneğin, etkin işlemlerle ilişkiliyse bir kaydı silme).
  • Koşullu Mantık: Kullanıcının girişine veya verilerin mevcut durumuna göre farklı mantık yürütülebilir.
  • Örnek: BEFORE USER COMMAND olayını kullanarak ‘Onaylandı’ durumuna sahip kayıtlar için ‘Sil’ düğmesini devre dışı bırakma.

4. Diğer SAP Modülleri ve Sistemleriyle Entegrasyon:

  • BAPI’ları ve Fonksiyon Modüllerini Çağırma: Tablo olayları (events), diğer SAP modüllerinde veya harici sistemlerde eylemleri gerçekleştirmek için BAPI’lara veya fonksiyon modüllerine çağrıları tetiklemek için kullanılabilir.
  • Örnek: Yeni bir müşteri kaydı kaydedildikten sonra, AFTER SAVING olayını kullanarak müşteriyi bir CRM sisteminde oluşturmak için bir BAPI çağırılması.

5. Kullanıcı Deneyimini Geliştirme:

  • Özel Mesajlar ve Uyarılar: Doğrulama sonuçlarına veya diğer olaylara göre kullanıcıya daha bilgilendirici mesajlar sağlanabilir.
  • Alan Değişikliği: Belirli koşullara göre alanları salt okunur yapılabilir veya diğer alan özellikler değiştirilebilir.
  • Örnek: BEFORE SAVING olayını kullanarak, kullanıcı yinelenen bir kayıt girerse, kullanıcıya bir uyarı mesajının gösterildiği senaryo.

Yaygın Tablo Olayları (Table Events):

İşte TMG’de en sık kullanılan tablo olaylarından bazıları:

  • Before Display: Ekran kullanıcıya gösterilmeden önce ekranı değiştirmek için kullanılır.
  • Before User Command: Kullanıcı bir eylem gerçekleştirmeden önce yürütülür (örneğin, oluşturma, değiştirme, silme). Bunu düğmeleri devre dışı bırakmak, uyarılar eklemek vb. için kullanabilirsiniz.
  • Before Saving: Verileri doğrulamak ve veri tabanına kaydetmeden önce dönüşümler yapmak için kullanılır. Bu en yaygın olaydır.
  • After Saving: Veriler veri tabanına kaydedildikten sonra yürütülür. Bu, takip eylemlerini tetiklemek için kullanışlıdır.
  • Before Delete: Bir kayıt silinmeden önce yürütülür.
  • After Delete: Bir kayıt silindikten sonra yürütülür.

Özetle, Tablo Bakım Üreticisi’ndeki tablo olayları aşağıdakiler için gereklidir:

  • Tablo bakım sürecine özel iş mantığı ekleme.
  • Karmaşık veri doğrulama kurallarını uygulama.
  • Kullanıcı girişini ve eylemlerini kontrol etme.
  • Diğer SAP sistemleriyle entegre olma.
  • Kullanıcı deneyimini geliştirme.
  • Değişiklikleri denetleme ve günlüğe kaydetme.

Öncelikle ilk aşama olan tablo bakımını yapıp ardından table event’leri kullanacağız.

  1. Z’Lİ BİR TABLO OLUŞTURUNUZ.

Se11 ‘e gidiniz.

 Tablo ismini giriniz  ve create tuşuna basınız.

metin, ekran görüntüsü, yazılım, bilgisayar simgesi içeren bir resim

Yapay zeka tarafından oluşturulan içerik yanlış olabilir.

Kısa tanımı giriniz. Delivery Class ‘A’ ve Dta Browser/Table Vİew Editing kısmını ‘Display/Maintenance Allowed’ seçiniz.

İhtyiaç durumunuza gire Table Fields alanlarınızı giriniz.

Save tuşuna basıp kaydediniz. Çıkan pop up’ta lokale kaydedebilir ya da varsa bir paketiniz, onun altına kaydedebilirsiniz.

Aktifleştirmek için toolbardaki ikona basınız.

Data Class ‘APPL0’ ve Size Ctegory ‘0’ giriniz. Ardından save tuşuna basıp kaydediniz.

Bir adım geri çıkıp aktifleştiriniz.

  • TABLE MAINTENANCE GENERATOR

Utilities > Table Maintenance Generator seçiniz.

Karşımıza böyle bir ekran gelecektir.

  • Öncelikle Authorization Group ‘&NC&’ giriniz.
  • Function group kısmını boş bırakabilirsiniz. Boş bırakılmasına izin verilmezse Table/View kısmındaki tablo isminizi kopyalayıp function group’a yapıştırabilirsiniz.
  • Maintenance type’ı ‘one step’ seçiniz.

Ardından Find Scr. Number(s) ‘a tıklayınız.

İlk seçeneği seçiniz.

Ardından görselde gösterilen ikona (Create – F6) basınız.

Kaydediniz. Not: kaydet tuşuna 3 kere basmanız gerekebilir. Çünkü ilk basışta uyarı verecektir. İkinci basışta authorization group için üçüncü basışta ise function group için kaydeder.

Tablo bakımı yapıldığına göre sırada table events konusu var.

3.TABLE EVENTS YARATINIZ

Bakım ekranından ÇIKMADAN üst toolbardan Environment > Modification >Events yolunu seçiniz.

Çıkan uyarıları onaylayınız.

Bir sonraki uyarıyı da onaylayınız.

Gelen ekranda ‘New Entries’ e tıklayıp kod yazacağımız bir include yapısı oluşturacağız.

T alanındaki kulakçığa tıklayıp seçenekleri görünüz.

Bu kadar seçenek arasından en sık kullandıklarımız 01- 05 nolu arasındakilerdir (Özellikle 01 ve 5).

Bizim senaryomuza 01 daha çok uyduğu için ilk seçeneği seçiyoruz. Çünkü eğer tablomuzdaki üretim yeri (WERKS) alanı ‘BO09’ ise Sipariş numarası (SAT) girme zorunluluğu olsun istiyoruz. Yani bu durumda sipariş numarası boş olamaz. Boş olur ise database’e kayıt atmasına izin vermiyoruz.

FORM routine alanına oluşturacağımız form’un adını yazıyoruz. CHECK yazabilirsiniz.

Sonra, editör kısmındaki ikona basınız. Gelen ekranda New Include’e seçiniz.

Pop-up uyarıyı onaylayınız.

Aşağıdaki gibi bir logic oluşturduk.

Var olan zli tablonuzun tipinde bir internal tablo ve structure oluşturunuz. Bu oluşturduğunuz internal tablo’ya veri eklemek için, SM30’dan girdiğimiz verileri tutan total tablosunu kullanıyoruz.

lt_table[] = total[].

Sonra da loop döndürüp internal tablomuzun içindeki üretim yerini kontrol ediyoruz. Eğer ls_table-uretimyeri = ‘BO09’ ise ve ls_table-siparisno boşsa (is initial ise) bu durumda hata mesajı verdirip kaydetmesini önlüyoruz.

TOTAL TABLOSU

Total tablosunu incelemek için programa debug atıp inceleyelim. Form’un içine aşağıdaki satırı ekleyiniz.

Debug moduna geçmek için SM30’a gidip kayıt atmaya çalışalım.

New entries seçiniz.

Aşağıda görüldüğü gibi sipariş numarası boş ve üretim yeri BO09 olan bir girdi girdik.

Eklediğimiz satırı seçip Save tuşuna basalım.

TOTAL[ ] ’i inceleyelim

Client = 650 ve BO09653 (sipariş yeri ve sipariş türü) tutuluyor.

TOTAL

Program sonlandırıldığında hata mesajı verilir.

KODLAR

*----------------------------------------------------------------------*
***INCLUDE LZTABLE_EVENTSF01.
*----------------------------------------------------------------------*
FORM check.
  DATA: lt_table TYPE TABLE OF ztable_events,
        ls_table TYPE ztable_events.

  lt_table[] = total[].


  LOOP AT lt_table INTO ls_table.
    IF ls_table-siparisno IS INITIAL AND ls_table-uretimyeri EQ 'BO09'.
      MESSAGE 'SAT alanı-sipariş no boş olamaz!' TYPE 'E' DISPLAY LIKE 'I'.
    ENDIF.
  ENDLOOP.

ENDFORM.

Merve Polat

https://medium.com/@pmervepolat977

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir