ABAP, SAP'nin içinde çalışan iş mantığının dilidir. Benim çalışma alanım bu iş mantığının dışarıya açılan uçları: ABAP ile sunulan API uçları, RFC/BAPI ve OData servisleri üzerinden veri eşleme, hata yönetimi ve test. SAP tarafında ABAP API uçları üzerinden çalışan kurumsal e-ticaret projelerinde entegrasyon katmanını kurdum; sözleşmeyi de tüketen tarafı da birlikte ele alıyorum. Özel ABAP geliştirmesi gereken işlerde kapsamı SAP ekibiyle ayırıp sözleşmeyi netleştiriyorum.
ABAP, SAP içindeki iş kurallarının, kontrollerin ve veri erişiminin yazıldığı dildir. Dışarıdaki bir site veya mobil uygulama SAP'deki veriyi doğrudan okumaz; SAP tarafında açılan bir fonksiyon, servis veya IDoc üzerinden konuşur. Bu uçlar çoğu zaman ABAP ile yazılır: fonksiyon modülleri ve BAPI'ler, class tabanlı servisler, OData servisleri ya da IDoc çıkışları.
Benim tarafım, bu uçların sözleşmesini netleştirmek ve onları doğru tüketmek: hangi alan hangi tipe karşılık gelir, hangi hata ne anlama gelir, bir kayıt iki kez gönderilirse ne olur ve sistem bakımdayken işler nasıl birikir. ABAP kodunun tamamını yazmak yerine, entegrasyonun uçtan uca doğru çalışmasını sahipleniyorum.
Entegrasyonun en çok hata çıkaran kısmı alan eşlemesidir. SAP'de bir tarih, para tutarı, birim veya kod tablosu dışarıdaki sistemden farklı davranır. Sözleşmede şunları açıkça tanımlıyorum:
Sözleşme yazılı olduğunda SAP ekibi ile entegrasyon geliştiricisi aynı belgeye bakar; "bende çalışıyordu" tartışması yerine ölçülebilir bir kabul kriteri olur.
SAP entegrasyonunda en tehlikeli durum, işlemin başarısız olduğunu fark etmemektir. Bu yüzden her çağrıda dönüş mesajları ayrıştırılır; hata, uyarı ve başarı durumları ayrı ele alınır. Kayıtlar tekil anahtarla gönderilir, hata alan kayıt kuyrukta bekler ve tekrar denenir. Kalıcı hatalar operatöre görünür bir kuyruğa düşer; sessizce kaybolmaz. Tüm aktarımlar loglanır, böylece "ne zaman ne gönderildi" sorusu sonradan cevaplanabilir.
Test, yalnızca mutlu yolun denenmesi değildir. Şu senaryolar ayrıca çalıştırılır: geçersiz kod değeri, eksik zorunlu alan, aynı kaydın iki kez gönderilmesi, SAP tarafında yetki hatası ve bağlantı kesintisi. Test ortamında gerçek veriye yakın bir kümeyle çalışılır. Canlıya geçişte kontrollü pilot, kısa paralel çalışma ve geri dönüş planı uygulanır; ilk günlerde hata kuyruğu ve gecikme izlenir.
Kapsamlı özel ABAP geliştirmesi genellikle müşterinin SAP ekibi veya çözüm ortağı tarafından yapılır. Ben API sözleşmesini, entegrasyon katmanını, web ve mobil tüketimi, hata yönetimini ve testleri teslim ederim; teslim ettiğim projelerde SAP tarafında ABAP ile sunulan API uçları yer aldı. Gerektiğinde servis tanımını SAP ekibiyle birlikte netleştirir, test çağrılarını ve kabul kriterlerini yazılı hale getiririm.
Entegrasyon tarafında ABAP servislerini tüketiyor ve sözleşmelerini tasarlıyorum. Kapsamlı özel ABAP geliştirmesi genellikle müşterinin SAP ekibi veya çözüm ortağıyla yürütülür; teslim ettiğim projelerde SAP tarafında ABAP ile sunulan API uçları yer aldı.
Web ve mobil kanallar için OData/REST genellikle daha pratiktir; mevcut iş fonksiyonlarına doğrudan erişim gerekiyorsa RFC/BAPI öne çıkar. Karar; veri hacmi, senkron ihtiyacı, yetkilendirme ve SAP sürümüne göre verilir.
Dönüş tablosundaki mesajlar ayrıştırılır; hata ve uyarı durumları başarıdan ayrılır. Kayıt kuyrukta tutulur, tekrar denenir ve kalıcı hata operatöre görünür. İşlemin "başarılı görünüp" içinde hata taşıması en sık karşılaşılan tuzaklardan biridir.
Gönderim sonrası IDoc durumu takip edilir; hatalı kayıtlar yeniden işleme alınır. Entegrasyon tarafında her IDoc için kaynak kaydın anahtarı loglanır, böylece kayıp veya mükerrer aktarım tespit edilebilir.
Önerilmez. Test istemcisi veya sandbox olmadan servis davranışını doğrulamak, canlı veride deneme yapmak anlamına gelir. Test ortamı yoksa önce onun kurulması veya güvenli bir kopya üzerinde çalışılması gerekir.
Evet. Servis dokümanı, örnek istek/yanıt ve test çağrısı üzerinden mevcut uç değerlendirilir; eksik alanlar veya hata davranışları netleştirilir. Gerekiyorsa SAP ekibiyle servis sözleşmesi güncellenir.