# ABAP
ABAP","İngilizce "Advanced Business Application Programming" kelimelerinin baş harflerinden oluşan bir kısaltmadır ve Alman yazılım şirketi SAP tarafından geliştirilen üst seviye bir nesne tabanlı programlama dilidir. SAP'nin iş uygulamaları geliştirmek için kullanılan "NetWeaver" platformunun parçası olan "Web Uygulama Sunucusu"'nu programlamak amacıyla kullanılır. Sözdizimi COBOL'a benzemektedir.


## Tarihçe.
ABAP, 1980'lerde geliştirilen pek çok uygulama odaklı 4. nesil dilden biridir. ABAP, başlarda, geniş çaplı şirketlerin kaynak yönetimi finansal planlamalarında kullanacakları iş uygulamaları geliştirmelerine olanak sağlayan SAP R/2 platformu için raporlama diliydi.
ABAP aynı zamanda, Almancada anlamı genel rapor hazırlama işlemcisi olan "Allgemeiner Berichts Aufbereitungs Prozessor" un kısaltmasıydı, fakat daha sonra "Advanced Business Application Programming" olarak isimlendirildi. ABAP temel veritabanı seviyesinden yüksek seviyeli bir soyutlama sağlayan mantıksal veritabanı kavramını içeren ilk dillerden biriydi.
ABAP programlama dili orijinal olarak geliştiriciler tarafından SAP R/3 platformunu geliştirmek için kullanıldı. SAP müşterileri ABAP'ı, müşterilerin özel raporlar ve arayüzler geliştirebilecekleri SAP uygulamaları geliştirmek için kullanmayı tasarlıyorlardı. Dil programlamacılar için öğrenmesi oldukça kolaydır fakat programlamacı olmayanlar için direkt kullanılabilecek bir araç değildir. ABAP programları oluşturabilmek için ilişkisel veritabanı tasarımı ve tercihen nesne odaklı kavram bilgisini içeren programlama yetenekleri gereklidir.
ABAP, SAP 1992 yılında ilk yayımlandığında, istemci-sunucu R/3 sistemi için programlar oluşturmak için yapılandırıldı. 1990'larda gelişen bilgisayar donanımıyla birlikte SAP uygulamaları ve sistemler de ABAP'da yazıldı. 2001 yılına kadar btüm en temel fonksiyonlar ABAP'da yazıldı. 1999 yılında, SAP, R/3 4.6 sürümüyle beraber, ABAP 'a uzantı olarak ABAP nesnelerini yayımladı.
SAP'ın en yeni geliştirme platformu NetWeaver hem ABAP hem Java'yı destekler.


## Uygulama.
### ABAP programı nerede çalışır.
Tüm ABAP programları SAP veritabanında bulunur. Java ve C++ programları ayrı dış dosyalarda depolanmazlar. Veritabanında tüm ABAP kodları iki şekilde bulunur: ABAP Workbench araçları ile görüntülenebilen ve düzenlenebilen kaynak kodu ve Java bytekodu gibi düşünülebilecek ikili gösterimde "üretilmiş kod". ABAP programları, SAP çekirdeğinin parçası olan çalışma zamanı sisteminin kontrolü altında çalışırlar. Çalışma zamanı sistemi ABAP ifadelerini işlemekten, ekranların akış mantığını kontrol etmekten ve olaylara(kullanıcının ekran butonuna tıklaması gibi) cevap vermekten sorumludur. ABAP çalışma zamanı sisteminin anahtar bileşenlerinden biri, veritabanından bağımsız ABAP ifadelerini ("open sql") tabanda yer alan dbms (veritabanı yönetim sistemi) in anlayabileceği ifadelere ("native sql") çeviren veritabanı arayüzüdür. Veritabanı arayüzü, ABAP programları adına, ilişkisel veritabanııyla olan tüm iletişimi ele alır, aynı zamanda uygulama sunucusunun yerleşik belleğinde sık erişilen veriyi arabelleğe almak gibi ekstra özellikler içerir.
SAP'ın üç farklı katmanı, sunum katmanı, uygulama katmanı (programlar bunun üstünde çalışır) ve kullanıcının hazırladığı durumlardan ve son kullanıcının sunum katmanından verdiği komutlardan tüm verinin kazanıldığı ve depolandığı veritabanı katmanıdır.


### SAP temeli.
Sözdizim kontrolü, kod üretimi, çalışma zamanı sistemini içeren ABAP dil ortamı, SAP temel bileşen parçasıdır. SAP temeli, tipik olarak SAP web uygulama sunucusunun frameworkünde uygulanan Sap uygulamalarının tüm rencini destekleyen teknolojik platformdur. Bu açıdan SAP temeli, üzerinde SAP uygulamalarının çalıştığı işletim sistemi olarak görülebilir. Tüm işletim sistemleri gibi, SAP temeli hem düşük seviyeli servisleri(örnek olarak hafıza yönetimi, veritabanı iletişimi ya da web istemleri sunumu) hem de son kullanıcılar ve yöneticiler için yüksek seviyeli araçları içerir. Bu araçlar, direkt olarak tabandaki işletim sisteminde çalışan çalıştırılabilirler(SAP kernel) olabilir ya da ABAP'da geliştirilmiş ya da web tabanlı arayüzler olabilir. SAP temeli, iş uygulamaları, işletim sistemi ve veritabanı arasında bir soyutlama tabakası sağlar. Bu, uygulamaların direkt olarak özel bir sunucuya ya da veritabanı platformuna bağımlı olmamasını ve bir platformdan diğerine kolaylıkla taşınmasını sağlar.
SAP temeli şu anda UNIX (AIX, HP-UX, Solaris, Linux), Microsoft Windows, IBM System i üzerinde i5/OS (formerly iSeries, AS/400) ve IBM System z üzerinde z/OS (resmi olarak zSeries, S/390) sistemlerinde çalışır. Desteklenen veritabanları DB2, Informix, MaxDB, Oracle ve Microsoft SQL Server dır. (Informix için destek SAP Basis 7.00 sürümü ile beraber kaldırılmıştır).


### SAP sistemleri ve biçimlendirmeleri.
Tüm SAP verileri bir SAP isteminde bulunur ve tüm SAP yazılımları bu sistem üstünde çalışır. Böyle bir sistem merkezi bir ilişkisel veritabanı ile veritabanındaki verilere ve uygulamalara erişen bir ya da daha fazla uygulama sunucusundan (örnekler) oluşur. Bir SAP sistemi boyut ve performans gibi nedenlerden en az bir ya da daha fazla örnek içerir. Çok örnek içeren bir sistemde yükleme dengeleme mekanizmaları yüklemenin uygun uygulama sunucularına dağılmasını sağlar. web uygulama sunucusu kurulumları tipik olarak üç sistemden oluşur: geliştirme sistemi, test etme ve kontrol sistemi, üretim sistemi. Biçimlendirme daha fazla sistem içerebilir: buna birim sistemi ve üretim öncesi testi için ayrık sistemler kullanılmasını örnek verebiliriz, biçimlendirme daha az sistem içerebilir buna olarak da ayrık kalite kontrol sistemi olmadan, sadece geliştirme ve üretim sistemlerinin bulunduğu bir biçimlendirmeyi örnek verebiliriz, yine de genellikle üç sistemli düzenleme kullanılır. ABAP programları geliştirme sisteminde oluşturulur ve ilk teste verilir. Sonra biçimlendirmedeki farklı sistemlere dağıtılır. Bu işlemler eşzamanlılık kontrolünden, versiyon yönetiminden ve programların kalite kontrol ve üretim sistemleri üzerine yerleştirilmesinden sorumlu olan değiştirme ve taşıma sisteminin kontrolü altında yer alır.
Web uygulama sunucusu üç katmandan oluşur: veritabanı katmanı, uygulama katmanı ve sunum katmanı. Bu katmanlar aynı ya da farklı fiziksel makineler üstünde çalışır
Örnek:
 * set an exclusive lock at level object-type & object-id
 IF NOT lf_bapi_error = true.
 IF (NOT istourhd-doc_type IS INITIAL) AND
 (NOT istourhd-doc_id IS INITIAL).
 CALL FUNCTION 'ENQUEUE_/DSD/E_HH_RAREF'
 EXPORTING
 obj_typ = istourhd-doc_type
 obj_id = istourhd-doc_id
 EXCEPTIONS
 foreign_lock = 1
 system_failure = 2
 OTHERS = 3.
 IF sy-subrc <> 0.
 * terminate processing...
 lf_bapi_error = true.
 * ...and add message to return table
 PERFORM set_msg_to_bapiret2
 USING sy-msgid gc_abort sy-msgno
 sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
 gc_istourhd gc_enqueue_refdoc space
 CHANGING lt_return.
 ENDIF.
 ENDIF.
 ENDIF. " bapi error