ABAP - ABAP

ABAP/4
paradigma Nesne yönelimli , yapılandırılmış , zorunlu
Tarafından tasarlandı SAP SE
İlk ortaya çıktı 1983 ; 38 yıl önce ( 1983 )
kararlı sürüm
7,55 / 2 Eylül 2020 ; 11 ay önce ( 2020-09-02 )
Yazma disiplini Statik , güçlü , güvenli , yalın
işletim sistemi Çapraz platform
İnternet sitesi scn .sap .com /community /abap%20scn .sap .com /community /abap
Başlıca uygulamalar
SAP R/2 , SAP R/3 , SAP S/4HANA
Tarafından etkilenmiş
Amaç-C , COBOL , SQL

ABAP (Advanced Business Application Programming, aslen Allgemeiner Berichts-Aufbereitungs-Prozessor , Almanca "genel rapor hazırlama işlemcisi"), Alman yazılım şirketi SAP SE tarafından oluşturulan üst düzey bir programlama dilidir . Şu anda, iş uygulamaları oluşturmaya yönelik SAP NetWeaver platformunun bir parçası olan SAP NetWeaver Uygulama Sunucusu'nu programlama dili olarak Java ile birlikte konumlandırılmıştır .

Tanıtım

ABAP, ilk olarak 1980'lerde geliştirilen, uygulamaya özel birçok dördüncü nesil dilden ( 4GL ) biridir. Başlangıçta, büyük şirketlerin malzeme yönetimi ve finans ve yönetim muhasebesi için ana bilgisayar iş uygulamaları oluşturmasını sağlayan bir platform olan SAP R/2 için rapor diliydi. ABAP bağımsız yazılımlar arasında entegrasyon sağlar.

ABAP bir kısaltma olarak kullanılan bir llgemeiner B erichts- A ufbereitungs- P rozessor "jenerik rapor hazırlama işlemcisi" için Almanca, ancak daha sonra İngiliz olarak değiştirildi A dvanced B Usiness A pplication P rogramming . ABAP, her platformu, dili ve birimi destekleyen temel veritabanı düzey(ler)inden yüksek düzeyde soyutlama sağlayan Mantıksal Veritabanları (LDB'ler) kavramını içeren ilk dillerden biriydi .

ABAP dili başlangıçta geliştiriciler tarafından SAP R/3 platformunu geliştirmek için kullanıldı . Ayrıca SAP müşterileri tarafından SAP uygulamalarını geliştirmek için kullanılmak üzere tasarlanmıştır - müşteriler ABAP programlama ile özel raporlar ve arayüzler geliştirebilir. Dil, programlama deneyimi olan daha teknik müşterilere yönelikti.

ABAP , SAP'nin ilk olarak 1992'de piyasaya sürdüğü , istemci-sunucu R/3 sistemi için program oluşturma dili olmaya devam ediyor . 1990'larda bilgisayar donanımı geliştikçe, SAP'nin uygulamaları ve sistemleri giderek daha fazla ABAP'ta yazıldı. 2001 yılına gelindiğinde, en temel işlevler dışındaki tüm işlevler ABAP'ta yazılmıştır. 1999'da SAP, R/3 sürüm 4.6 ile birlikte ABAP Nesneleri adlı nesne yönelimli bir ABAP uzantısı yayınladı.

SAP'nin mevcut geliştirme platformu NetWeaver , hem ABAP'yi hem de Java'yı destekler .

ABAP, iş uygulamaları, işletim sistemi ve veritabanı arasında bir soyutlamaya sahiptir. Bu, uygulamaların doğrudan belirli bir sunucuya veya veritabanı platformuna bağlı olmamasını ve bir platformdan diğerine kolayca taşınabilmesini sağlar.

SAP Netweaver şu anda UNIX ( AIX , HP-UX , Solaris , Linux ), Microsoft Windows , IBM System i (önceden iSeries, AS/400) üzerinde i5/OS ve IBM System z (önceden zSeries, S) üzerinde z/OS üzerinde çalışmaktadır. /390). Desteklenen veritabanları HANA , SAP ASE (eski adıyla Sybase), IBM DB2 , Informix , MaxDB , Oracle ve Microsoft SQL Server'dır (Informix desteği SAP Basis sürüm 7.00'de durdurulmuştur).

ABAP çalışma zamanı ortamı

Tüm ABAP programları SAP veritabanında bulunur. Java veya C++ programları gibi ayrı harici dosyalarda saklanmazlar. Veritabanında tüm ABAP kodu iki biçimde bulunur: ABAP Workbench araçlarıyla görüntülenebilen ve düzenlenebilen kaynak kodu; ve oluşturulan kod, Java bayt koduyla bir şekilde karşılaştırılabilir bir ikili gösterim . ABAP programları, SAP çekirdeğinin bir parçası olan çalışma zamanı sisteminin kontrolü altında yürütülür. Çalışma zamanı sistemi, ABAP deyimlerini işlemekten, ekranların akış mantığını kontrol etmekten ve olaylara yanıt vermekten (bir kullanıcının bir ekran düğmesine tıklaması gibi) sorumludur; bu açıdan Java VM ile karşılaştırılabilir bir Sanal Makine olarak görülebilir . ABAP çalışma zamanı sisteminin önemli bir bileşeni, veritabanından bağımsız ABAP ifadelerini ("Open SQL"), temeldeki DBMS ("Yerel SQL") tarafından anlaşılan ifadelere dönüştüren Veritabanı Arabirimidir. Veritabanı arayüzü, ABAP programları adına ilişkisel veritabanı ile tüm iletişimi yönetir; Ayrıca uygulama sunucusunun yerel belleğindeki tabloların ve sık erişilen verilerin arabelleğe alınması gibi ekstra özellikler içerir.

SAP sistemleri ve ortamları

Tüm SAP verileri mevcuttur ve tüm SAP yazılımları bir SAP sistemi bağlamında çalışır . Bir sistem, merkezi bir ilişkisel veritabanından ve bu veritabanındaki verilere ve programlara erişen bir veya daha fazla uygulamadan ("örnekler") oluşur. Bir SAP sistemi en az bir örnek içerir, ancak çoğunlukla boyutlandırma ve performans nedenleriyle daha fazlasını içerebilir. Birden çok örneği olan bir sistemde, yük dengeleme mekanizmaları, yükün mevcut uygulama sunucularına eşit olarak yayılmasını sağlar.

Web Uygulama Sunucusu ( manzara ) kurulumları tipik olarak üç sistemden oluşur: biri geliştirme için; test ve kalite güvencesi için; ve biri üretim için. Manzara daha fazla sistem içerebilir (örneğin, birim testi ve üretim öncesi testler için ayrı sistemler) veya daha azını içerebilir (örneğin, ayrı QA olmadan yalnızca geliştirme ve üretim); yine de üç en yaygın yapılandırmadır. ABAP programları oluşturulur ve geliştirme sisteminde ilk testlere tabi tutulur. Daha sonra peyzajdaki diğer sistemlere dağıtılırlar. Bu eylemler, eşzamanlılık kontrolünden (örneğin, iki geliştiricinin aynı anda aynı kodu değiştirmesini engellemek), sürüm yönetiminden ve QA ve üretim sistemleri.

Web Uygulama Sunucusu üç tabakadan oluşur: Veritabanı katmanında; uygulama katmanı; ve sunum katmanı. Bu katmanlar aynı veya farklı fiziksel makinelerde çalışabilir. Veritabanı katmanı ilişkisel veritabanı ve veritabanı yazılımları içerir. Uygulama katmanı bilgisi örneği veya sistemin örneklerini içerir. Ticari işlemler ve ABAP geliştirme dahil tüm uygulama süreçleri uygulama katmanında çalışır. Sunum katmanı sisteminin kullanıcılarla etkileşim yönetir. ABAP uygulama sunucularına çevrimiçi erişim, "SAP GUI" adı verilen özel bir grafik arabirim veya bir Web tarayıcısı aracılığıyla yapılabilir.

Yazılım katmanları

ABAP yazılımı, yazılım bileşenlerine dağıtılır. Bunlara örnekler:

  • SAP_BASIS , her ABAP sisteminde gerekli olan gerekli teknik temel katmandır.
  • SAP_ABA , iş ortağı ve adres yönetimi gibi her türlü iş uygulaması için gerekli olan işlevleri içerir.
  • SAP_UI , SAP UI5 uygulamaları oluşturmak için işlevsellik sağlar.
  • BBPCRM bir iş uygulaması örneğidir, bu durumda CRM uygulaması
  • SAP ABAP bir ERP programlama dilidir.

işlemler

SAP terminolojisinde bir işlem, bir programın yürütülmesidir. SAP sisteminde ABAP kodunu yürütmenin normal yolu, bir işlem kodu girmektir (örneğin, VA01, "Satış Siparişi Oluştur" için işlem kodudur). İşlemler, sistem tanımlı veya kullanıcıya özel, rol tabanlı menüler aracılığıyla çağrılabilir. Ayrıca, her SAP ekranında bulunan bir komut alanına işlem kodunu doğrudan girerek de başlatılabilirler. İşlemler, CALL TRANSACTION ve LEAVE TO TRANSACTION adlı ABAP ifadeleri aracılığıyla programlı olarak da çağrılabilir. Bir işlemin genel kavramına SAP terminolojisinde Mantıksal İş Birimi (LUW) denir; işlem kodunun kısa biçimi T-kodudur .

ABAP programlarının türleri

Diğer programlama dillerinde olduğu gibi, bir ABAP programı, diğer programlara yeniden kullanılabilir kod sağlayan ve bağımsız olarak yürütülemeyen yürütülebilir bir birim veya bir kitaplıktır.

ABAP, iki tür yürütülebilir programı ayırt eder:

  • Raporlar
  • Modül havuzları

Raporlar, kullanıcının isteğe bağlı olarak bir dizi parametre girdiği (örneğin, bir veri alt kümesi üzerinden bir seçim) ve daha sonra programın giriş parametrelerini kullanarak etkileşimli bir liste biçiminde bir rapor oluşturduğu nispeten basit bir programlama modelini takip eder. "Rapor" terimi, raporların verileri değiştirmek üzere tasarlanabilmesi açısından bir şekilde yanıltıcı olabilir ; bu programlara rapor denmesinin nedeni, ürettikleri çıktının "liste odaklı" doğasıdır.

Modül havuzları, bir ekran koleksiyonu kullanarak daha karmaşık kullanıcı etkileşimi kalıplarını tanımlar. "Ekran" terimi, kullanıcının gördüğü gerçek, fiziksel görüntüyü ifade eder. Her ekranın ayrıca, ekranlar tarafından dolaylı olarak çağrılan ABAP koduna atıfta bulunan ve bir "PBO" (Çıkıştan Önce İşlem) ve "PAI" (Girişten Sonra İşlem) bölümlerine ayrılan bir "akış mantığı" vardır. SAP belgelerinde "dynpro" (dinamik program) terimi, ekran ve akış mantığının birleşimini ifade eder.

Yürütülebilir olmayan program türleri şunlardır:

  • DAHİL modülleri
  • Alt program havuzları
  • Fonksiyon grupları
  • nesne sınıfları
  • Arayüzler
  • Tip havuzlar

Bir INCLUDE modülü , üretim zamanında çağrı birimine dahil edilir; genellikle büyük programları alt bölümlere ayırmak için kullanılır.
Altyordam havuzları ABAP altyordamlarını içerir (FORM/ENDFORM deyimleriyle çevrelenmiş ve PERFORM ile çağrılan kod blokları).
İşlev grupları , bağımsız işlev modüllerinin kitaplıklarıdır (FUNCTION/ENDFUNCTION tarafından çevrelenir ve CALL FUNCTION ile çağrılır).
Nesne sınıfları ve arabirimleri , Java sınıflarına ve arabirimlerine benzer; ilki bir dizi yöntem ve özniteliği tanımlar, ikincisi, arabirimi uygulayan herhangi bir sınıfın açık kod sağlaması gereken "boş" yöntem tanımlarını içerir.
Tür havuzları, veri türleri ve sabitlerin koleksiyonlarını tanımlar.

ABAP programları bireysel cümlelerden (ifadelerden) oluşur. Bir ifadedeki ilk kelimeye ABAP anahtar kelimesi denir. Her ifade bir nokta ile biter. Kelimeler her zaman en az bir boşlukla ayrılmalıdır. İfadeler istediğiniz gibi girintili olabilir. Anahtar sözcükler, eklemeler ve işlenenlerle ABAP çalışma zamanı sistemi, büyük ve küçük harf arasında ayrım yapmaz.

İfadeler bir satırın ötesine geçebilir. Tek bir satırda birkaç ifadeniz olabilir (ancak bu önerilmez). İlk sütunda yıldız * ile başlayan satırlar, ABAP çalışma zamanı sistemi tarafından yorum satırları olarak tanınır ve yok sayılır. Çift tırnak işareti ("), satırın geri kalanının yorum olduğunu gösterir.

Geliştirme ortamı

ABAP'ta geliştirmenin iki olası yolu vardır. Kullanılabilirlik, ABAP sisteminin yayınlanmasına bağlıdır.

ABAP Tezgahı

ABAP Tezgahı ABAP sisteminin bir parçası olan ve üzerinden erişilen SAP GUI . Programları düzenlemek için farklı araçlar içerir. Bunlardan en önemlileri (işlem kodları parantez içinde gösterilmiştir):

  • Raporları, modül havuzlarını, içerme ve alt rutin havuzlarını yazmak ve düzenlemek için ABAP Editor (SE38)
  • Veritabanı tablosu tanımlarını işlemek ve genel türleri almak için ABAP Sözlüğü (SE11)
  • Kullanıcı arabirimini tasarlamak için Menü Boyacısı (menü çubuğu, standart araç çubuğu, uygulama araç çubuğu, işlev tuşu ataması) (SE41)
  • Ekranlar ve akış mantığı tasarlamak için Ekran Boyacısı (SE51)
  • İşlev modülleri için İşlev Oluşturucu (SE37)
  • ABAP Nesneleri sınıfları ve arayüzleri için Sınıf Oluşturucu (SE24)

Nesne Gezgini (işlem SE80) bu çeşitli araçlara bir tek entegre arayüz sağlar.

ABAP Geliştirme Araçları

ABAP Geliştirme Araçları ( ADT resmen "Eclipse ABAP" olarak bilinir), için eklentileri bir dizi Eclipse platformu ABAP geliştirme.

Bu senaryoda, ABAP geliştiricisi bilgisayarına gerekli araçları kurar ve yerel olarak çalışır, arka uçla sürekli bir senkronizasyon gerçekleştirilir.

ABAP Sözlüğü

ABAP Sözlüğü, SAP sistemindeki verilerle ilgili tüm meta verileri içerir. ABAP Workbench ile yakından bağlantılıdır, çünkü herhangi bir veri referansı (örneğin, bir tablo, bir görünüm veya bir veri türü) sözlükten alınacaktır. Geliştiriciler, bu meta verileri görüntülemek ve sürdürmek için ABAP Sözlük işlemlerini (doğrudan veya ABAP Workbench içindeki SE80 Nesne Gezgini aracılığıyla) kullanır.

Bir sözlük nesnesi değiştirildiğinde, değiştirilen nesneye başvuran bir program, programın bir sonraki çalışmasında otomatik olarak yeni sürüme başvuracaktır. ABAP yorumlandığından, değiştirilmiş sözlük nesnelerine başvuran programları yeniden derlemek gerekli değildir.

En önemli sözlük nesnesi türlerinin kısa bir açıklaması aşağıda verilmiştir:

  • Tablolar , temel alınan ilişkisel veritabanında bulunan veri kapsayıcılarıdır. Çoğu durumda, ABAP Sözlüğü'ndeki bir tablonun tanımı ile aynı tablonun veritabanındaki tanımı (aynı ad, aynı sütunlar) arasında 1'e 1 ilişki vardır. Bu tablolar "şeffaf" olarak bilinir. İki tür saydam olmayan tablo vardır: "havuzlanmış" tablolar ABAP Sözlüğünde bağımsız varlıklar olarak bulunur, ancak bunlar veritabanı düzeyinde büyük fiziksel tablolarda ("havuzlar") birlikte gruplandırılmıştır. Havuzlanmış tablolar genellikle örneğin yapılandırma verilerini tutan küçük tablolardır. "Kümelenmiş" tablolar, birincil anahtarlarına göre fiziksel olarak "kümeler" içinde gruplanır; örneğin, kümelenmiş bir tablo H'nin satış faturalarıyla ilgili "başlık" verilerini içerdiğini, diğer bir kümelenmiş D tablosunun ise fatura satır öğelerini içerdiğini varsayalım . Her H satırı daha sonra, veritabanındaki bir "küme tablosu" içinde D'deki ilgili satırlarla fiziksel olarak gruplandırılacaktır. Performansı artırmak için tasarlanan bu tür kümeleme, ilişkisel veritabanı sistemlerinin hepsinde olmasa da bazılarında yerel işlevsellik olarak da bulunur.
  • Dizinler , sık kullanılan seçim koşulları için tablo verilerine hızlandırılmış erişim sağlar. Her SAP tablosunun, tabloyla birlikte dolaylı olarak oluşturulan ve birincil anahtarın benzersizliğini zorlamak için kullanılan bir "birincil dizin"i vardır. Ek dizinler (benzersiz veya benzersiz olmayan) tanımlanabilir; bunlara "ikincil dizinler" denir.
  • Görünümler , temel alınan veritabanındakiyle aynı amaca sahiptir: bir veya - bir birleştirme koşulu kullanarak - birkaç tablodan sütunların (ve/veya satırların) alt kümelerini tanımlarlar. Görünümler sanal tablolar olduğundan (diğer tablolardaki verilere atıfta bulunurlar) önemli miktarda yer kaplamazlar.
  • Yapılar , birden çok alandan oluşan karmaşık veri türleridir ( C/C++'daki struct ile karşılaştırılabilir ).
  • Veri öğeleri , bir tablo veya yapı alanı için anlamsal içerik sağlar. Örneğin, düzinelerce tablo ve yapı, fiyatını (bitmiş bir ürün, hammadde, kaynak, ...) veren bir alan içerebilir. Tüm bu alanlar aynı "PRICE" veri öğesine sahip olabilir.
  • Etki alanları , bir veri öğesinin yapısal özelliklerini tanımlar. Örneğin, PRICE veri öğesi, fiyatı iki ondalık basamaklı sayısal bir alan olarak tanımlayan atanmış bir etki alanına sahip olabilir. Etki alanları, olası değerlerin bir listesini sağlamada anlamsal içerik de taşıyabilir. Örneğin, bir "BOOLEAN" etki alanı, uzunluğu 1 olan ve büyük/küçük harfe duyarlı olmayan "karakter" türünde bir alan tanımlayabilir, ancak olası değerleri "T" (doğru) veya "F" (yanlış) olarak da sınırlayabilir.
  • Arama , bir kullanıcı bir veri alanı için olası değerleri görmek istediğinde gelişmiş arama stratejileri sağlamaya yardımcı olur (artık kullanılmayan "eşleştirme kodlarının" halefleri). ABAP çalışma zamanı (alan için tüm değerleri listeleyerek, örneğin tüm mevcut müşteri numaralarını listeleyerek) örtük yardım sağlar, ancak arama yardımı, örneğin coğrafi konum, kredi notu vb. ile müşteri aramaları sağlayarak bu işlevi iyileştirmek için kullanılabilir.
  • Kilit nesneleri, verileri değiştirirken uygulama düzeyinde kilitleme uygular.

ABAP sözdizimi

ABAP sözdiziminin bu kısa açıklaması, her yerde bulunan " Merhaba dünya " programıyla başlar.

Selam Dünya

REPORT TEST.
WRITE 'Hello World'.

Bu örnek iki ifade içerir: REPORTve WRITE. Program ekranda bir liste görüntüler. Bu durumda, liste "Merhaba Dünya" tek satırından oluşur. REPORTİfadesi bu program bir rapor olduğunu gösterir. Bu program, REPORTifadeyi ile değiştirdikten sonra bir modül havuzu olabilir PROGRAM.

zincirleme ifadeler

Aynı ilk (en soldaki) kısma sahip ardışık ifadeler, zincir operatörü kullanılarak "zincirleme" bir ifadede birleştirilebilir :. İfadelerin ortak kısmı kolonun soluna yazılır, farklı kısımlar kolonun sağına yazılır ve virgülle ayrılır. İki nokta üst üste operatörü, boşluk olmadan doğrudan önceki simgeye eklenir (aynısı, aşağıdaki örneklerde görülebileceği gibi, üzerindeki simge listesindeki virgüller için de geçerlidir).

Zincirleme genellikle WRITEifadelerde kullanılır . WRITEyalnızca bir argümanı kabul eder, bu nedenle örneğin FLIGHTINFO adlı bir yapıdan üç alan görüntülemek istiyorsanız, şunu kodlamanız gerekir:

WRITE FLIGHTINFO-CITYFROM.
WRITE FLIGHTINFO-CITYTO.
WRITE FLIGHTINFO-AIRPTO.

İfadeleri zincirlemek, daha okunabilir ve daha sezgisel bir biçimde sonuçlanır:

WRITE: FLIGHTINFO-CITYFROM, FLIGHTINFO-CITYTO, FLIGHTINFO-AIRPTO.

Bir zincir deyiminde, ilk kısım (iki nokta üst üste işaretinden önceki) yalnızca deyim adıyla sınırlı değildir. Ardışık ifadelerin tüm ortak kısmı iki nokta üst üste işaretinin önüne yerleştirilebilir. Örnek:

REPLACE 'A' WITH 'B' INTO LASTNAME.
REPLACE 'A' WITH 'B' INTO FIRSTNAME.
REPLACE 'A' WITH 'B' INTO CITYNAME.

zincirleme biçimde yeniden yazılabilir:

REPLACE 'A' WITH 'B' INTO: LASTNAME, FIRSTNAME, CITYNAME.

Yorumlar

ABAP'nin metni yorum olarak tanımlamanın 2 yolu vardır :

Örnek:

***************************************
** Program: BOOKINGS                 **
** Author: Joe Byte, 07-Jul-2007     **
***************************************

REPORT BOOKINGS.

* Read flight bookings from the database
SELECT * FROM FLIGHTINFO
  WHERE CLASS = 'Y'       "Y = economy
  OR    CLASS = 'C'.      "C = business
(...)

boşluklar

ABAP'deki kod boşluklara duyarlıdır.

x = a+b(c).

x değişkenine, c değişkeni tarafından tanımlanan uzunlukla b'den başlayarak, a değişkeninin alt dizesini atar.

x = a + b( c ).

x değişkenine, a değişkeninin toplamını ve c parametresiyle yöntem b'ye yapılan çağrının sonucunu atar.

ABAP ifadeleri

Sınırlı bir dile özgü ifadeler kümesi tanımlayan ve kitaplıklar aracılığıyla çoğu işlevi sağlayan C/C++ veya Java gibi dillerin aksine, ABAP çok sayıda yerleşik ifade içerir. Bu ifadeler geleneksel olarak cümle benzeri yapılar kullanıyor ve sembollerden kaçınıyordu, bu da ABAP programlarını nispeten ayrıntılı hale getiriyordu. Ancak, ABAP dilinin daha yeni sürümlerinde daha kısa bir stil mümkündür.

İfadeye dayalı sözdizimine (sözdizimi COBOL kaynaklıdır) karşı ifadeye dayalı sözdizimine (C/Java'da olduğu gibi) bir örnek:

ADD TAX TO PRICE.
* is equivalent to
PRICE = PRICE + TAX .

Veri türleri ve değişkenler

ABAP bir dizi yerleşik veri türü sağlar. Ayrıca ABAP Sözlüğü'nde tanımlanan her yapı, tablo, görünüm veya veri öğesi bir değişken yazmak için kullanılabilir. Ayrıca, nesne sınıfları ve arabirimler tür olarak kullanılabilir.

Yerleşik veri türleri şunlardır:

Tip Tanım
ben tamsayı
P paketlenmiş ondalık
F Kayan nokta
n karakter sayısal
C Karakter
NS Tarih
T Zaman
x Onaltılık (ham bayt)
SİCİM Değişken uzunluklu dize
XSTRING Değişken uzunlukta ham bayt dizisi

Tarih değişkenleri veya sabitleri (D tipi), 1 Ocak 1 AD'den bu yana geçen günlerin sayısını içerir. Zaman değişkenleri veya sabitleri (T tipi), gece yarısından bu yana geçen saniye sayısını içerir. Her iki türün özel bir özelliği, tarih ve saat işleme için kullanılabilen hem tamsayılar hem de karakter dizileri (tarihler için "YYYYMMDD" ve saatler için "hhmmss" dahili biçimiyle) olarak erişilebilmesidir. Örneğin, aşağıdaki kod parçacığı önceki ayın son gününü hesaplar (not: SY-DATUM, geçerli tarihi içeren sistem tanımlı bir değişkendir):

DATA LAST_EOM    TYPE D.  "last end-of-month date

* Start from today's date
  LAST_EOM = SY-DATUM.
* Set characters 6 and 7 (0-relative) of the YYYYMMDD string to "01",
* giving the first day of the current month
  LAST_EOM+6(2) = '01'.
* Subtract one day
  LAST_EOM = LAST_EOM - 1.

  WRITE: 'Last day of previous month was', LAST_EOM.

Tüm ABAP değişkenlerinin kullanılabilmesi için açıkça bildirilmesi gerekir. Bunlar, tek tek ifadeler ve açık tipleme ile veya ABAP 7.40'tan beri, çıkarsanan tipleme ile satır içi olarak bildirilebilirler .

Açıkça yazılan beyan

Normalde tüm bildirimler, ilk çalıştırılabilir ifadeden önce kod modülünün (program, alt program, işlev) en üstüne yerleştirilir; bu yerleşim bir kuraldır ve zorunlu bir sözdizimi kuralı değildir. Bildirim, ad, tür, uzunluk (uygun olduğunda), ek değiştiricilerden (örneğin, paketlenmiş bir ondalık alan için ima edilen ondalık sayıların sayısı) ve isteğe bağlı olarak bir başlangıç ​​değerinden oluşur:

* Primitive types:
DATA: COUNTER      TYPE I,
      VALIDITY     TYPE I VALUE 60,
      TAXRATE(3)   TYPE P DECIMALS 1,
      LASTNAME(20) TYPE C,
      DESCRIPTION  TYPE STRING.

* Dictionary types:
DATA: ORIGIN       TYPE COUNTRY.

* Internal table:
DATA: T_FLIGHTS    TYPE TABLE OF FLIGHTINFO,
      T_LOOKUP     TYPE HASHED TABLE OF FLT_LOOKUP.

* Objects:
DATA: BOOKING      TYPE REF TO CL_FLT_BOOKING.

Ardışık DATA ifadelerini zincirlemek için iki nokta üst üste kullanımına dikkat edin.

satır içi bildirim

ABAP 7.40'tan beri, değişkenler aşağıdaki sözdizimi ile satır içi olarak bildirilebilir :

DATA(variable_name) = 'VALUE'.

Bu tür bir bildirim için, türün statik olarak, örneğin yöntem imzası veya veritabanı tablosu yapısı yoluyla çıkarılmasının mümkün olması gerekir .

Bu sözdizimi, OpenSQL deyimlerinde de mümkündür:

SELECT * FROM ekko into @DATA(lt_ekko) WHERE ebeln EQ @lv_ebeln.

ABAP Nesneleri

ABAP dili, "ABAP Nesneleri" olarak bilinen bir özellik aracılığıyla nesne yönelimli programlamayı destekler . Bu, uygulamaları basitleştirmeye ve daha kontrol edilebilir hale getirmeye yardımcı olur.

ABAP Nesneleri mevcut dil ile tamamen uyumludur, bu nedenle ABAP Nesneleri kullanan programlarda mevcut ifadeler ve modülerleştirme birimleri kullanılabilir ve ayrıca mevcut ABAP programlarında ABAP Nesneleri kullanılabilir. ABAP Nesneleri programlarında sözdizimi denetimi daha güçlüdür ve belirli ifadelerin bazı sözdizimsel biçimlerine (genellikle daha eski olanlar) izin verilmez.

Nesneler, karakteri ilgili davranışla birleştiren bir kapsül oluşturur. Nesneler, programcıların gerçek bir sorunu ve önerilen yazılım çözümünü bire bir temelde haritalandırmasını sağlamalıdır. Bir iş ortamındaki tipik nesneler, örneğin, 'Müşteri', 'Sipariş' veya 'Fatura'dır. Sürüm 3.1'den itibaren, SAP Web Uygulama Sunucusu ABAP'nin İş Nesnesi Deposu (BOR), bu tür nesnelerin örneklerini içermektedir. BOR nesne modeli, BOR nesne türlerini ABAP sınıf kitaplığına geçirerek bir sonraki Sürümde ABAP Nesnelerine entegre edilecektir. Bir bütün olarak nesne yönelimine kapsamlı bir giriş, ABAP Nesnelerine yapılan bu girişin sınırlarının çok ötesine geçecektir. Bu belge, nesne yöneliminde evrensel olarak kullanılan ve ABAP Nesnelerinde de bulunan bir dizi terim sunar. Sonraki bölümlerde, bu terimlerin ABAP Nesnelerinde nasıl kullanıldığını daha ayrıntılı olarak tartışmaya devam ediyor. Bu bölümün sonunda, nesne yönelimi ile ilgili bir dizi başlıkla birlikte daha fazla okuma listesi bulunmaktadır.

  • Nesneler sınıfların örnekleridir. Veri içerirler ve hizmet sağlarlar. Veriler, nesnenin niteliklerini oluşturur. Hizmetler, yöntemler (işlemler veya işlevler olarak da bilinir) olarak bilinir. Tipik olarak yöntemler, yalnızca nesnenin yöntemleri tarafından görülebilen özel veriler (nesnenin nitelikleri veya durumu) üzerinde çalışır. Bu nedenle, bir nesnenin nitelikleri doğrudan kullanıcı tarafından değiştirilemez, sadece nesnenin yöntemleri ile değiştirilebilir. Bu, nesnenin iç tutarlılığını garanti eder.
  • Sınıflar nesneleri tanımlar. Teknik açıdan nesneler, bir sınıfın çalışma zamanı örnekleridir. Teoride, tek bir sınıfa dayalı herhangi bir sayıda nesne oluşturulabilir. Bir sınıfın her bir örneği (nesnesi), benzersiz bir kimliğe ve nitelikleri için kendi değerler kümesine sahiptir.
  • Nesne Referansları , bir programdaki nesneleri tanımlamak ve onlara işaret etmek için kullanılabilecek benzersiz adreslerdir. Nesne referansları, bir nesnenin niteliklerine ve yöntemlerine erişime izin verir.

Nesne yönelimli programlamada nesneler genellikle aşağıdaki özelliklere sahiptir:

  • Kapsülleme - Nesneler, kaynaklarının (öznitelikler ve yöntemler) diğer kullanıcılara görünürlüğünü kısıtlar. Her nesnenin, diğer nesnelerin onunla nasıl etkileşime girebileceğini belirleyen bir arabirimi vardır. Nesnenin uygulaması kapsüllenmiştir, yani nesnenin kendisi dışında görünmez.
  • Kalıtım - Yeni bir sınıf türetmek için mevcut bir sınıf kullanılabilir. Türetilmiş sınıflar, üst sınıfın verilerini ve yöntemlerini devralır. Ancak, mevcut yöntemlerin üzerine yazabilir ve yenilerini de ekleyebilirler.
  • Polimorfizm - Özdeş (aynı isimli) yöntemler farklı sınıflarda farklı davranır. ABAP Nesnelerinde, polimorfizm, kalıtım sırasında yöntemler yeniden tanımlanarak ve arabirim adı verilen yapılar kullanılarak uygulanır.

CDS Görünümleri

ABAP Çekirdek Veri Hizmetleri (ABAP CDS), AS ABAP için genel CDS konseptinin uygulamasıdır. ABAP CDS, uygulama sunucusunun merkezi veritabanında anlamsal veri modellerinin tanımlanmasını mümkün kılar. AS ABAP'ta bu modeller veritabanı sisteminden bağımsız olarak tanımlanabilir. Bu modellerin varlıkları, ABAP Sözlüğü'nde tanımlanan mevcut veritabanı tabloları ve görünümleriyle karşılaştırıldığında gelişmiş erişim işlevleri sağlayarak Open SQL tabanlı uygulamaları optimize etmeyi mümkün kılar. Bu, bir AS ABAP, bir SAP HANA veritabanı kullandığında, bellek içi özellikleri optimum bir şekilde uygulanabildiğinden özellikle açıktır.

Veri modelleri, ABAP CDS sözdiziminde ABAP CDS'de sağlanan veri tanımlama dili (DDL) ve veri kontrol dili (DCL) kullanılarak tanımlanır. Bu diller kullanılarak tanımlanan nesneler ABAP Sözlüğü'ne entegre edilir ve burada da yönetilir.

CDS kaynak kodu yalnızca Eclipse tabanlı ABAP Geliştirme Araçları'nda (ADT) programlanabilir. Veri Tanımlama Dili (DDL) ve Veri Kontrol Dili (DCL) farklı düzenleyiciler kullanır.

Özellikleri

SAP NW ABAP SQL Birleşimleri SQL Küme İşlemleri Cümleleri SEÇ
7.40 SP05
  • İÇ BİRLEŞİM
  • SOL DIŞ KATILMA
  • SAĞ DIŞ BİRLEŞTİRME
  • BİRLİK
  • BİRLİK TÜMÜ
  • NEREDE
  • GRUP TARAFINDAN
  • SAHİP
  • OLARAK
7.40 SP08
7.50
7,51
  • ÇAPRAZ BİRLEŞTİRME
SAP NW ABAP değişmezler Aritmetik operatörler Koşullu İfadeler
7.40 SP05
  • SELECT listesinde, örneğin FieldName olarak değişmez
  • RHS değeri olarak
  • +
  • -
  • Boole operatörleri
    • DEĞİL, VE, VEYA
  • Karşılaştırma operatörleri
    • ARASINDA, =, <>, <, >, <=, >=, GİBİ
    • IS [NOT] NULL (Yalnızca WHERE koşulunda)
7.40 SP08
  • / (Float tabanlı bölüm)
7.50
7,51
  • RHS değeri olarak işlev
SAP NW ABAP Toplama işlevleri Sayısal işlevler dize işlevleri
7.40 SP05
  • AVG( [FARKLI] )
  • MAKS
  • MIN
  • TOPLA( [AYIRMA] )
  • COUNT( [FARK] )
  • SAYMAK(*)
  • TAVAN
  • MOD
  • ABONELİK
  • LPAD
7.40 SP08
  • ABS
  • DIV (Tamsayı tabanlı bölme)
  • BÖLÜM (Ondalık tabanlı bölme)
  • ZEMİN
  • YUVARLAK
  • İLETİŞİM
  • YER DEĞİŞTİRMEK
7.50
  • CONCAT_WITH_SPACE
  • INSTR
  • AYRILDI
  • UZUNLUK
  • LTRIM
  • SAĞ
  • RPAD
  • RTRIM
7,51
  • AVG( [AS] ) dönüş türünü belirtmek için
  • FLTP_TO_DEC
  • ÜST
  • DAHA DÜŞÜK
SAP NW ABAP Bayt dizisi işlevleri Tarih ve saat işlevleri Diğer fonksiyonlar
7.40 SP05
  • CAST'tan yerleşik DDIC türlerine, örneğin abap.fltp
7.40 SP08
  • KOALEŞME
  • PARA BİRİMİ DÖNÜŞTÜRME
  • BİRİM DÖNÜŞTÜRME
  • DECIMAL_SHIFT
7.50
  • BINTOHEX
  • HEXTOBİN
  • DATS_DAYS_BETWEEN
  • DATS_ADD_DAYS
  • DATS_ADD_MONTHS
  • DATS_IS_VALID
  • TIMS_IS_VALID
  • TSTMP_IS_VALID
  • TSTMP_CURRENT_UTCTIMESTAMP
  • TSTMP_SECONDS_BETWEEN
  • TSTMP_ADD_SECONDS
  • OYUNCULAR
    • veri öğelerine, örneğin CHAR80
    • yuvalanabilir
7,51
  • ABAP_SYSTEM_TIMEZONE
  • ABAP_USER_TIMEZONE
  • TSTMP_TO_DATS
  • TSTMP_TO_TIMS
  • TSTMP_TO_DST
  • DATS_TIMS_TO_TSTMP
  • OYUNCULAR
    • KORUMA TÜRÜ
    • diğer türlere SSTRING
    • CLNT, LANG, TIMS, UNIT, CHAR ve SSTRING türündeki veri öğelerine
    • CHAR, SSTRING, NUMC'den ACCP'ye ve tersi
    • İşlenen olarak toplama işlevi
SAP NW ABAP Koşullu (CASE) ifadeler genişletilebilirlik (Yönetilmeyen) Dernekler
7.40 SP05
  • "Basit" DURUM (switch deyimi gibi davranır)
  • İç içe CASE ifadeleri
  • $EXTENSION.* (veritabanı tablo uzantıları için destek)
  • Yol ifadeleri
    • SEÇ liste
    • FROM yan tümcesi
    • WHERE yan tümcesi
    • HAVING yan tümcesi
  • Yol ifadelerindeki koşulları filtreleyin, ör. Products._Texts[ lagu = 'EN' ] ingilizce_name olarak
7.40 SP08
  • "Aranan" VAKA (eğer ... else if gibi davranır)
  • GÖRÜNÜMÜ UZAT
7.50
  • CASE ifadeleri, CAST işlevlerinde işlenen olarak kullanılabilir
  • Giriş parametreleri, yol ifadeleri, dönüşümler, tarih ve saat işlevleriyle GÖRÜNÜMÜ GENİŞLETİN
7,51
  • RHS değeri olarak işlev
  • GENİŞLETİN GÖRÜNÜMÜ toplama işlevleri, GROUP BY yan tümceleri ve UNION'lar ile
  • UNION'larla görüşlerde ilişkilendirme tanımları
  • İlişkilendirmeler için varsayılan filtreler (VARSAYILAN FİLTRE İLE)
  • Önem derecesi "çok" (*:) yol filtrelerinde belirtilebilir
SAP NW ABAP Oturum değişkenleri Giriş parametreleri Diğer
7.40 SP05
  • ANAHTAR unsurlar
7.40 SP08
  • çoğu DB'de giriş parametreleri
7.50
  • $session.user (sy-adı)
  • $session.client (sy-mandt)
  • $session.system_language (sy-langu)
  • AnyDB'de giriş parametreleri
  • Tablo işlevi (yalnızca SAP HANA)
7,51
  • $session.system_date (sy-veri)
  • Meta veri uzantıları

ABAP'ta dahili tablolar

Dahili tablolar ABAP dilinin önemli bir özelliğidir. Dahili bir tablo, C++'daki struct s vektörüne veya Java'daki bir nesne vektörüne benzer şekilde tanımlanır . Bu dillerden temel fark, ABAP'ın dahili tabloların içeriğine kolayca erişmek ve bunları değiştirmek için bir ifadeler koleksiyonu sağlamasıdır. ABAP'nin dizileri desteklemediğini unutmayın; çok elemanlı bir veri nesnesini tanımlamanın tek yolu dahili bir tablo kullanmaktır.

Dahili tablolar, ABAP'ın çalışma belleğinde sabit bir yapıya sahip değişken veri kümelerini depolamanın bir yoludur ve dinamik dizilerin işlevselliğini sağlar. Veriler, her satırın aynı yapıya sahip olduğu, satır satır saklanır.

Dahili tablolar tercihen bir program içinden veritabanı tablolarının içeriğini depolamak ve biçimlendirmek için kullanılır. Ayrıca, yapılarla bağlantılı dahili tablolar, bir ABAP programında karmaşık veri yapılarını tanımlamanın önemli bir yoludur.

Aşağıdaki örnek, VBRK veritabanı tablosu formatına sahip iki alanlı bir dahili tabloyu tanımlar.

* First define structured type
TYPES: BEGIN OF t_vbrk,
         VBELN TYPE VBRK-VBELN,
         ZUONR TYPE VBRK-ZUONR,
       END OF t_vbrk.

* Now define internal table of our defined type t_vbrk
DATA : gt_vbrk TYPE STANDARD TABLE OF t_vbrk,
       gt_vbrk_2 TYPE STANDARD TABLE OF t_vbrk.   "easy to define more tables

* If needed, define structure (line of internal table)
* Definition with type or with reference to internal table:
DATA : gs_vbrk TYPE t_vbrk,
       gs_vbrk_2 LIKE LINE OF gt_vbrk_2.

* You can also define table type if needed
TYPES tt_vbrk TYPE STANDARD TABLE OF t_vbrk.

Tarih

Aşağıdaki liste, ABAP dilinin tarihindeki bazı önemli kilometre taşları hakkında yalnızca kaba bir genel bakış sunmaktadır. Daha fazla ayrıntı için bkz. ABAP - Sürüme Özgü Değişiklikler .

Sürüm Yayın tarihi Büyük değişiklikler
4.6C Mayıs 2000
  • ABAP Nesneleri
6.40 2004
7.0 2006
  • Çerçeve/Geliştirme konseptini değiştir
7,02
  • gibi ifadeler
    check lcl=>mi(1) + abs( -2 ) >= 3.
    
7.40 2012-11-29
  • "Kod aşağı açılır"—temel veritabanındaki gelişmiş özellikleri kullanın
  • Yapıcı ifadeleri (NEW, VALUE, REF, CONV, CAST, EXACT, COND, SWITCH)
  • Kısmen Uygulanan test sınıflarının arayüzleri
  • Tablo İfadeleri
  • Dahili tablo satırı varlığı/satır dizini işlevleri
7.40 SP05 Aralık 2013
  • Dahili tablolar için MOVE-CORRESPONDING
  • Yapıcı ifadelerinde LET ifadesi
  • İLGİLENEN operatör
  • CDS Görünümleri
  • ABAP Yönetilen Veritabanı Prosedürleri
7.40 SP08 Eylül 2014
  • FOR ifadeleri
  • Yapıcı operatörü AZALT
  • Yapıcı ifadeleri için başlangıç ​​değeri
  • GROUP BY dahili tablolar için
  • Tablo ifadeleri için filtre ifadeleri ve varsayılan değerler
  • INTO deyiminden sonra SQL satır içi bildirimlerini açın
  • İsteğe bağlı arayüz yöntemleri
7.50 Kasım 2015
  • Yeni yerleşik veri türü INT8
  • İlişkisel ifade IS ÖRNEĞİ
  • SQL ana bilgisayar ifadelerini aç
  • ROUND, CONCAT, LPAD, LENGTH, REPLACE, RIGHT, RTRIM ve SUBSTRING SQL ifadelerini açın
  • SQL yolu ifadelerini aç
  • SQL SELECT UNION'ı açın
  • SQL INSERT FROM alt sorgusunu açın
7,51 Ekim 2016
  • numaralandırmalar
  • Open SQL'de yaygın tablo ifadeleri
  • SQL/CDS CROSS JOIN'i açın
  • CDS istemci yönetimi
  • CDS'deki meta veri uzantıları
  • Açık SQL/CDS'de Tarih ve Saat
  • Açık SQL/CDS'de kayan nokta
7,52 Eylül 2017
  • Dahili tabloların sanal olarak sıralanması
7.54 Eylül 2019
  • Yeni Yerleşik Veri Türleri
  • Yeni Dahili ABAP Tipi utclong
  • Hesaplama Atamaları
  • Zaman Damgalarında Ondalık Basamaklar
  • Müşteri Yönetimi
  • INTOMaddenin Uzantıları
  • Derneklerin Tanımı
  • Yeni Toplama İşlevi STRING_AGG
  • Yeni Yerleşik İşlevler
  • DISTINCTToplama İşlevinde İsteğe Bağlı EklemeCOUNT
  • Pencere İfadeleri
  • SQL Koşulları Revize Edildi
  • Geçici Hiyerarşiler
  • Yeni Hiyerarşi Gezginleri
  • SQL İfadelerinde Toplu İfadeler
  • CAST Matris Revize
  • Sözdizimi Denetiminde Katı Mod
  • Değişmezler ve Ana Bilgisayar Sabitleri için Sözdizimi Kontrolü
  • Veritabanı İpuçları için Açıklama
  • Serbest Bırakma Öğeleri için Ek Açıklamalar
  • Bundan Sonra CDS Varlıklarını Belirtme USING
  • Mantıksal Şemalar için Tırnak İşaretleri
  • Toplama in placeBeyanılate numbering
  • Ek in class ... unique
  • Bir eylemin harici adı
  • Statik Alan Kontrolü
  • İşleyici Yöntemleri için Rastgele Ad
  • Davranış Havuzu İstisna Yok
  • Varlık Manipülasyon Dili
  • TYPE STRUCTURE FOR
  • Yanıt Bilgileri
  • Mutlak Tür Adları
  • İş Hizmeti
  • Güncellemelerde Yetkilendirme Kontrolleri
  • Örtülü Mesaj Türü IF_T100_DYN_MSG
  • Test Sınıflarını Kullanma
  • Toplama COMBINATION MODE OR|ANDBeyanıGRANT SELECT ON
  • Toplama REDEFINITIONBeyanıGRANT SELECT ON
  • yüklem VOID
  • Toplama IN SCENARIOBeyanıGRANT SELECT ON
  • Açıklamanın Genel Yön Koşul DEFINE ROLE
  • Yeni Varyant INHERITING CONDITIONS FROM SUPER
  • Farklı REPLACINGOperatörler
  • Genel Bir Yönün Tanımı
  • ABAP CDS Hiyerarşileri için DCL Kısıtlamaları
  • İşlemsel Projeksiyon Görünümü Varlıkları için DCL Kısıtlamaları
7,55 Eylül 2020
  • Dahili ABAP deyimi EXPORT NAMETAB artık kullanılamaz ve bir çalışma zamanı hatasına yol açar.
  • Dahili ABAP deyimi IMPORT NAMETAB, aşağı doğru uyumluluk nedenleriyle hala kısmen desteklenmektedir. DDIC tablo türleri için girişlere herhangi bir erişim, bir çalışma zamanı hatasına yol açar. Diğer herhangi bir erişim, ATC'den hatalara yol açar.
  • Ayrı ad sekmesi alan açıklamaları için eski yerel veritabanı tablosu DDNTF artık desteklenmiyor ve silinecek.
  • Artık CDS projeksiyon görünümlerinde harici veri kaynaklarına yeni ilişkilendirmeler tanımlamak mümkündür.
  • Yeni bir tür CDS görünümü mevcuttur: CDS görünümü varlığı.
  • Kullanıcı oturumu başına olası ABAP oturumu sayısını belirleyen profil parametresi rdisp/max_alt_modes'un varsayılan değeri 6'dan 16'ya yükseltildi ve artık kullanıcı oturumu başına maksimum ABAP oturumu sayısıyla aynı.
  • REDUCE yapıcı operatörünün NEXT eklenmesinin arkasındaki atamalarda +=, +=, *=, /= veya &&= hesaplama atama operatörleri şimdi kullanılabilir ve ilgili kurallar geçerlidir.
  • Perl Uyumlu Normal İfadelerin Desteği
  • Verbatim Değiştirmeleri
  • Yeni Yakalanabilir İstisna CX_SY_STRING_SIZE_TOO_LARGE
  • Ondalık kayan nokta sayıları için CURRENCY biçimlendirme seçeneği
  • SQL: Yeni toplama işlevi ALLOW_PRECISION_LOSS
  • SQL: Bir pencere işlevi içinde isteğe bağlı pencere çerçevesi belirtimi
  • SQL: FIRST_VALUE ve LAST_VALUE yeni pencere işlevleri
  • SQL: TIMESTAMPL, DATS ve TIMS için yeni tarih/saat dönüştürme işlevleri
  • SQL: Yeni zaman damgası işlevleri UTCL_CURRENT, UTCL_ADD_SECONDS ve UTCL_SECONDS_BETWEEN
  • SQL: Yeni tarih işlevleri DATN_DAYS_BETWEEN, DATN_ADD_DAYS ve DATN_ADD_MONTHS
  • SQL: ORDER BY yan tümcesinden sonraki yeni eklemeler: NULLS FIRST ve NULLS LAST
  • SQL: Yeni toplama işlevleri MEDIAN, STDDEV, VAR, CORR ve CORR_SPEARMAN
  • SQL: Yeni geometri dönüştürme işlevi as_geo_json
  • SQL koşulları revize edildi
  • SQL: Yeni pencere işlevi NTILE
  • SQL: SELECT, INTO hedef - ana bilgisayar değişkenleri artık FROM yan tümcesi dinamik olduğunda bile satır içi olarak bildirilebilir
  • SQL: Yeni tür dönüştürme işlevleri to_clob ve to_blob
  • SQL: Yeni para birimi dönüştürme işlevi para birimi dönüştürme
  • SQL: Akış ve konum belirleyiciler artık SQL ifadelerinde kullanılabilir
  • SQL: Temel SQL ifadelerinde izin verilen diğer veri türleri
  • SQL: Hiyerarşi yükleme seçenekleri
  • SQL: Yazılan değişmez değerler
  • SQL: Yeni dize işlevleri
  • SQL: UPDATE FROM yan tümcesine ekleme
  • SQL: Katı sözdizimi denetimi modu
  • CDC Erişimi: IS [NOT] INITIAL öğesiyle gerçek bir durumda kontrol edin
  • CDC Erişimi: Ek baypas ne zaman
  • CDC Erişimi: Kullanıcı koşullarında kullanıcı adını kontrol edin
  • CDC Erişimi: Veri türleri
  • CDC Erişimi: En boy atlama koşulları
  • CX_NO_CHECK istisnalarının beyanı

Ayrıca bakınız

Referanslar

Dış bağlantılar