Professional Documents
Culture Documents
Abap Etm Set Trke
Abap Etm Set Trke
1
İçindekiler
İçindekiler 2
Abap Temel Bilgiler 3
Başlangıç Ekranı 3
Geliştirme Ekranı 4
Genel Bilgiler 5
Veri Tipleri 8
Aritmetik İşlemler 10
Structure Yapısı 12
Kelime İşlemleri 15
16 Field Symbols 19
Döngü Mekanizmaları 22
Fonksiyon Modülleri 37
Temel Bilgiler 37
Fonksiyon Grupları 41
Diyalog 43
Programlama 43
Seçim Ekranları
Listeler 47
Ekranlar 50
Mesajlar 56 58
Abap Kitaplığı
Temel Bilgiler 58
Tablo Oluşturma 64
View Oluşturma 73
Tablo Bakım Ekranı 77
SE16 81
Smart Forms 85
Veri Gönderme İşlemi 93
Smart Styles 95
2
ABAP Temel Bilgiler
Başlangıç Ekranı
SAP’ da gerekli güncellemeleri ve yeni uygulamaları yapmak için ‘SE38’ işlem kodunu kullanarak ‘Abap düzenleyici’
ekranına giriş yaparız. Bu ekranın görüntüsü aşağıda görüldüğü gibidir:
-Resim A1-
Geliştirme Ekranı
3
Abap düzenleyici’ de geliştirme yaptığımız ekrana göz atacak olduğumuzda temelinde notepad’ a benzeyen bir kelime
işlemci ara yüzüne sahiptir.
-Resim A2-
Genel Bilgiler
Abap programlama diline dair genel birkaç bilgi verecek olursak, bu bilgileri şu şekilde özetleyebiliriz;
Abap’ ta önceden tanımlı veri tipleri vardır, bu veri tiplerini kullanarak program satırlarını ve bütün bir
programı oluştururuz.
4
Abap’ ta çevrilebilen metin yapısını kullanarak, birden fazla dilde çalışan programlar oluşturabiliriz.
Abap’ ta kullanılan OPEN SQL yapısı sayesinde, program satırlarından veri tabanına direkt erişim sağlanır.
Abap programlama dili her geçen gün daha da gelişmektedir ve program yapısı yenilendiğinde eğer eski
bir kodlama kullanılıyorsa, bu eski kodlamanın çalışmasını yeni program yapısı engellemez.
5
Sözdizimi Yapısı – Syntax
-Resim A3-
6
İşlem Sonucu – Return Statement
-Resim A4-
Yazdığımız bazı talimat satırları işleme sokulduktan sonra sistem bize işlemin ne kadar başarılı olduğunu rakamsal
olarak döner ve bu rakamsal döngüyü
“sy-subrc” isimli sistem alanının içine yazar.
Bir işlemden sonra bu döngü sonucunda sistem alanında (sy-subrc) içinde yazan rakam sıfır (0) ise yaptığımız işlem
başarılı olmuş demektir.
Örnek: Resim A4’ de 13ncü satırda veri tabanına erişim yapıyoruz ve veri çekiyoruz daha sonra ise 16ncı satırda
işlemi başarı ile gerçekleştirdik mi diye sistem alanını (sy-subrc) kontrol ediyoruz.
7
Veri Tipleri
Abap programlama dilinde işlem yapmak için diğer programlama dillerinde olduğu gibi veri objelerini kullanırız.
Abap’ ta bir veri objesini tanımlarken genellikle “DATA” kelimesiyle başlarız ve bunu “TYPE” kelimesiyle
tamamlarız.
Örneğin:
-Resim A5-
Abap’ ta kullanılan verilerin hepsinin temelinde Ön tanımlı Abap tipleri kullanılır. Bunların yanında program içinde
kullanım için daha karmaşık yapıda olan veri tipleri de yaratılabilir.
Abap’ ta, ek olarak, Abap kitaplığında (SE11 – SE16) tanımlanmış olan global veri tiplerini de kullanabiliriz.
-Resim A6-
Resim A6’ da gösterilen ABAP tiplerinden d, t, i, f, string, xstring program içinde direkt olarak kullanılabilir. Bu
tiplerin içinde string ve xstring tiplerinin diğerlerinden farklı olarak özelliği uzunluklarının dinamik olarak program
içinde oluşmasıdır. Ek olarak bu iki tip için uzunluk bir kriter değildir.
8
▪ Uzunluk bilgisi tanımlama sırasında eklenmelidir. İzin verilen karakter aralığı 1’ den 65535’
e kadardır.
▪ Eğer bir nesne yaratırken uzunluk bilgisi tanımlanmaz ise sistem otomatik olarak uzunluğu 1
olarak tanımlar.
p
▪ Uzunluk bilgisi ve ondalık kısım bilgileri tanımlama sırasında belirlenmelidir.
▪ Eğer bir nesne yaratılırken uzunluk bilgisi tanımlanmaz ise sistem otomatik olarak 8 baytlık (ki
oda, 15 haneli bir rakama eşit oluyor) bir veri uzunluğu tanımlar ve ondalık kısım için 0 değerini
atar.
9
Aritmetik İşlemler
-Resim A7-
Integer veri türünde yapılan işlemler, floating point verilerinde yapılan işlemlere göre daha hızlı bir
şekilde çalışır.
10
-Resim A8-
Packet number tipinde olan veri tiplerinin uzunluğu bayt türünden verilir. Her bir rakamı yarım bayt
temsil eder. Son bayt ise artı ve eksi işareti için ayrılmıştır.
Ondalık alan boyutu DECIMALS eki ile belirlenir. Maksimum ondalık alan boyutu 15 yâda eksi 1 değeri.
Bunun sebebi ise en azından virgülden önce bir rakam olması gerektiğidir.
Ondalık rakam işlemleri kesin sonuçlu işlemler için kullanılmaktadır. Packed number tipinde olan
veriler doğru yuvarlama yapılan ya da ondalık alanların önemli olduğu, kesin sonuçlara ulaşılacak olan,
iş hesaplamaları için daha uygundur. Bu yapı algoritma olarak kâğıt ve kalem kullanmaya benzer, bir
farkı yoktur.
11
Structure Yapısı
-Resim A9-
ABAP programlama dilinde ön tanımlı veri tipleri dışında STRUCTURE dediğimiz yapılar kullanırız.
Bu yapıları tanımlarken TYPES kelimesi ile başlarız ve BEGIN OF - END OF kelimeleri ile devam ederiz.
BEGIN OF - END OF kullanımı, içine tanımlama yapılan bir blok gibi çalışır. Bu blokların içine ise
STURCTURE’ ın içine koymak istediğimiz ister ön tanımlı veri tipi olsun ister başka bir STRUCTURE’ ın
veri alanı olsun veri öğelerini yerleştiririz.
Bir STRUCTURE’ ın veri öğesine erişirken kullanım şekli şu şekildedir:
structure_name-comp_name.
12
-Resim A10-
Bir structure içinde başka bir structure tanımlayarak NESTED STRUCTURE oluşturabiliriz.
Oluşturduğumuz alt structure yapısına tamamen ulaşabiliriz:
structure_adı-alt_structure_adı.
Bunun yanında tek bir alanına da ulaşabiliriz:
structure_adı-alt_structure_adı–veri_ogesi.
Structure yapısına istediğimiz kadar alt structure ekleyebiliriz.
Structure yapısına dinamik veri öğeleri atayabiliriz. Bunlar; ön tanımlı veri tipleri, internal tablo
(Itab)veya referans olabilirler. Bu yapılara DEEP STRUCTURE diyoruz.
Ek olarak deep structure yapısında bazı sınırlamalar getirilmektedir. Mesela bir SELECT sorgusunun INTO
kısmına denk gelecek şekilde deep structure kullanamayız çünkü her parçaya tek ulaşılması gerekmektedir.
13
-Resim A11-
Böyle bir yapıya erişirken ise kullanım şekli structure_adı-ad şeklinde olmaktadır. Teknik
olarak incelediğimizde ise bu yapı nested structure değildir.
14
Kelime İşlemleri
-Resim A12-
Resim A12 de görünenler içerisinde TRANSLATE ve CONDENSE dışında bütün durumlar sistem alanı
olan sy-subrc’ yi dolduruyor. (SEARCH aynı zamanda sistem alanı olan sy-fdpos alanına da karakterin
bulunduğu konumu atıyor.)
Bir kelimenin uzunluğunu bulmak için ise standart fonksiyon olan STRLEN() kullanılmaktadır.
SPLIT komutu kullanımında SPLIT ... INTO TABLE <itab> yapısını kullanmaktayız.
15
Veri Atama – Move & Write
MOVE:
ABAP’ ta aynı yapıda olan veri tipleri eşit olduğunda veri atamaları yapılır.
-Resim A13-
MOVE-CORRESPONDING:
Structure yapılarında veri atama işlemlerinde bir structure dan diğer bir structure a veri atamasında aynı
yapıya sahip olmayan fakat aynı elemanlara sahip olan structure yapıları olabilir. Böyle durumlarda move-
corresponding kullanımı gereklidir.
16
title(10) TYPE c VALUE 'Mister',
END OF name.
NOT: MOVE fonksiyonunun daha geniş kapsamlı kullanımı ve çevirme kuralları kullanımı için ABAP sözdizimi (syntax)
dokümantasyonu kullanılmalıdır.
WRITE:
Write komutu ile bir veri öğesi içinde bulunan veriyi mevcut sayfaya yazmaya yarar. Örneğin:
Örnek kodlama:
WRITE text1.
WRITE number.
WRITE text2.
-Resim A14-
Örnek kodlama:
WRITE text1.
WRITE num_dec DECIMALS 0.
WRITE text2 COLOR = 4 QUICKINFO 'son satır'.
17
Örnek ekran görüntüsü:
-Resim A15-
NOT: WRITE fonksiyonunun daha geniş kapsamlı kullanımı ve çevirme kuralları kullanımı için ABAP sözdizimi (syntax)
dokümantasyonu kullanılmalıdır.
WRITE TO:
“Write to” komutu bir veri öğesi içindeki veriyi başka bir veri öğesinin içine yazmaya yarar. Bunu yaparken hedef veri
öğesinin tipi karakter tiplerinden (C, N, D veya T) biri olmalıdır.
Örnek kodlama:
18
Field Symbols
-Resim A16-
Bir veri öğesine direkt erişim olmadığında, mesela veri atamalarını dinamik olarak kullanmak
istediğimizde field-symbols nesnelerini kullanırız. Bu sayede ulaşmak istediğimiz veri öğesine field-
symbols yapısı ile ulaşabiliriz.
Bir veri öğesini field-symbols nesnesine atama yaparken “ASSIGN” kelimesini kullanırız. Bir field-symbols
tanımlandığında genellikle TYPE ANY yapısı kullanılır. Bu sayede program içinde atama yapılan verinin tipi
‘runtime’ dediğimiz programın çalıştığı anda alınır.
Bir field-symbol’ e veri ataması yaparken kullanılan nesnelerin tiplerinin uyumluluğundan emin olunmalıdır.
Örneğin:
DATA: date TYPE d VALUE '19991231', time TYPE t.
FIELD-SYMBOLS: <fs_date> TYPE d, <fs_time> TYPE t.
ASSIGN: date TO <fs_date>, time TO <fs_time>.
<fs_time> = <fs_date>. " Syntax hatası döner
Bir field-symbol’ e veri ataması yapılıp yapılmadığını <FS> IS ASSIGNED kontrolü ile anlayabiliriz.
UNASSIGN <FS> komutu ile field-symbol’ ün atama yaptığı noktayı boşaltma işlemi gerçekleşiyor
dolayısıyla bu komuttan sonra <FS> hiçbir yeri işaret etmiyor.
19
Kontrol Mekanizmaları – If & Case
Her programlama dilinde olduğu gibi ABAP’ ta da kontrol mekanizmaları vardır. Bu kontrol mekanizmaları program
içinde belli noktalarda işlemleri kontrol ederek bir sonraki işlemi tanımlamamıza olanak sağlar.
IF:
Bu kontrol mekanizması işlem bloklarının (statement_block) tanımlanması ile çalışır. Bu işlem bloklarında mantıksal
eşleşmeler (log_exp) kullanılarak istenilen kontroller yapılarak işlem bir sonraki aşamaya kaydırılır. Bir IF bloğunda
birden fazla işlem bloğu tanımlayabiliriz.
IF log_exp1.
[statement_block1]
[ELSEIF log_exp2.
[statement_block2]]
...
[ELSE.
[statement_blockn]]
ENDIF.
Mantıksal Eşleşmeler:
Abap’ ta iki veri öğesi karşılaştırıldığında bazı kriterler kullanırız:
<Kriter
Anlamı
>
EQ eşittir
= eşittir
NE eşit değildir
<> eşit değildir
>< eşit değildir
LT küçüktür
< küçüktür
LE küçük yada eşittir
<= küçük yada eşittir
GT büyüktür
> büyüktür
GE büyük yada eşittir
>= büyük yada eşittir
-Tablo A1-
Rakamsal veriler (tip I,F ve P) ve rakamsal stringler (tip N) içerdiği değerlere göre karşılaştırılır. Diğer veri tipleri için
(C,T,D ve X) karşılaştırma solda sağa doğru çalışır. Solda bulunan verinin ilk karakterinin büyüklük durumuna göre
karşılaştırma sistem tarafından yapılır. Tarih karşılaştırmalarında (D) ileri bir tarih diğerinden daha büyüktür.
Hexadecimal veri tiplerinde ise bayt değerlerine göre karşılaştırma yapılır.
20
CASE:
Bu kontrol mekanizması, bir veri öğesinin içeriğine göre belirlenen işlem bloklarının çalışmasını sağlar.
CASE <f>.
WHEN <f11> [OR <f12> OR ...]
<Statement block>
WHEN <f21>.[OR <f22> OR ...]
<Statement block>
WHEN <f31> [OR <f32> OR ...]
<statement block>
WHEN ...
......
WHEN OTHERS.
<statement block>
ENDCASE.
Yukarıdaki yapıda WHEN koşulu <f> veri öğesinin içerdiği değerin eşleştiği durumlarda işlem bloklarını devreye
sokar. WHEN OTHERS koşulu, eğer <f> değeri hiçbir eşleşme yakalayamaz ise devreye girer. Son işlem bloğu
ENDCASE koşulu ile bitirilmelidir.
CASE STRING.
WHEN TEXT1 OR TEXT2.
WRITE: / 'String is', TEXT1, 'OR', TEXT2.
WHEN TEXT3.
WRITE: / 'String is', TEXT3.
WHEN OTHERS.
WRITE: / 'String is not', TEXT1, TEXT2,
TEXT3. ENDCASE.
21
Döngü Mekanizmaları
LOOPS:
Loop denilen döngü yapılarında işlem blokları birbirini takip eden şekilde bir veya daha fazla sayıda işleme sokulur.
ABAP programlama dilinde dört çeşit döngü vardır:
KOŞULSUZ DÖNGÜLER:
Bir işlem bloğunu koşulsuz olarak bir veya daha fazla kere çalıştıran döngülerdir. Bu döngünün yapısı şu şekildedir:
Bu tip bir döngüde eğer eklentiler olmazsa işlem blokları bir çıkış noktası olan EXIT veya STOP görene kadar
çalışmaya devam eder.
Bu döngü içinde TIMES eki kullanıldığında ise <n> değeri kadar döngü çalışır. Eğer <n> değeri 0 veya eksi bir
değer ise döngü çalışmaz. Döngü içinde TIMES eki kullanılmadığında, döngüden çıkış için EXIT yada STOP
eklerinden en az birinin kullanıldığından emin olunmalı.
VARYING eki kullanıldığında ise döngü her seferinde <f> değerine yeni bir veri ataması yapar.
Örneğin:
DATA: BEGIN OF TEXT,
WORD1(4) VALUE 'B',
WORD2(4) VALUE 'is',
WORD3(4) VALUE 'a',
WORD4(4) VALUE 'loop',
END OF TEXT.
DATA: STRING1(4), STRING2(4).
DO 4 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD2.
WRITE STRING1.
IF STRING1 = 'is'.
STRING1 = 'was'.
ENDIF.
ENDDO.
SKIP.
DO 2 TIMES VARYING STRING1 FROM TEXT-WORD1 NEXT TEXT-WORD3
VARYING STRING2 FROM TEXT-WORD2 NEXT TEXT-WORD4.
WRITE: STRING1, STRING2.
ENDDO.
Ekran Görüntüsü:
This is a loop
22
KOŞULLU DÖNGÜLER:
Eğer bir döngüyü kesin bazı koşullara göre çalıştırmak istiyorsak aşağıdaki yapıyı kullanırız:
<kriter> herhangi bir karşılaştırma kriteri olabilir. WHILE ile ENDWHILE arasındaki işlem bloğu <kriter> doğru
olduğu sürece veya bir çıkış eki olan EXIT veya STOP görene kadar çalışmaya devam eder. SY-INDEX veri
öğesi döngünün kaç defa çalıştığının bilgisini tutar. VARYING eki DO döngüsünde olduğu gibi çalışır.
Örneğin:
DATA: LENGTH TYPE I VALUE
0, STRL TYPE I VALUE
0,
STRING(30) TYPE C VALUE 'Deneme
yazısı'. STRL = STRLEN( STRING ).
Yukarıda bulunan örnekte bir kelimenin karakter uzunluğunun WHILE döngüsü içinde nasıl yazıldığını inceledik. Bu
örnekte kelime boş değerler içerene kadar döngü her çalıştığında bir karakter sola kaydırılıyor.
23
DÖNGÜLERDEN ÇIKIŞ İŞLEMİ:
ABAP programlama dilinde standart olarak bazı çıkış durumları tanımlanmıştır, bu çıkış durumları zamanından önce
döngülerden çıkış işlemi için kullanılır.
Örneğin:
DO 4 TIMES.
IF SY-INDEX = 2.
CONTINUE.
ENDIF.
WRITE SY-INDEX.
ENDDO.
Ekran çıktısı:
1 3 4
Örneğin:
DO 4 TIMES.
CHECK SY-INDEX BETWEEN 2 and
3. WRITE SY-INDEX.
ENDDO.
Ekran çıktısı:
2 3
24
Dahili Tablolar – Internal Tables
Dahili tablolar (ITAB) ABAP’ ta hafıza üzerinde çalışan, belli bir structure kullanarak veri çekme ve işleme için
kullanılır. Itab içinde bulunan veri hafızada satır olarak tutulur ve her satır aynı tiptedir. Abap programlama dilinde
kullanılan Dahili Tablolar diğer programlama dillerinde bulunan Array yapısına bir karşılıktır. ABAP’ ta belirli bir
tipte bulunan veri bloklarını işleyecek olduğumuzda ITAB yapısını kullanmalıyız.
Satır Tipi:
Bir dahili tablonun satır tipi herhangi bir veri tipi olabilir. Normal olarak bunun için bir structure kullanılır. Structure’
ın her elemanı dahili tablo içinde bir sütun demektir. Yinede, bir satır tipi öntanımlı veya başka bir dahili tablo
olabilir.
Anahtar (KEY):
Anahtar tablo satırlarını tanımlar. Dahili tablolar için iki çeşit anahtar bulunmaktadır, kullanıcı tanımlı olanlar ve
standart tanımlı olanlar. Anahtarın UNIQUE veya NON-UNIQUE olacağı belirlenebilir. UNIQUE key olan bir dahili
tabloda tekrarlanan kayıtlar bulunamaz.
Hashed tabloda tabloya erişim sadece anahtar (Key) alan üzerinden yapılmaktadır. Diğer tablo tiplerinde ise anahtar
alan veya tablo indeksine göre erişim yapılabilir.
NOT: Dahili Tablo yapılarının daha kapsamlı açıklamaları için ABAP sözdizimi (syntax) dokümantasyonu
kullanılmalıdır.
TYPE eki dahili tablonun tablo tipini <tabkind>, satır tipini <linetype> ve anahtar alanını <key> belirler.
25
TABLO TİPİ <TABKIND>:
Tablo tipini takip eden resimde görüldüğü gibi tanımlayabiliriz:
-Resim A17-
ANY TABLE
Bu tip tablo yapıları sadece field symbol yapısı kullanılarak yapılabilir. Bu sebepten dolayı indeks erişimi bu tip tablo
yapıları için mümkün değildir.
SORTED TABLE
Sorted tablo yapıları yaratmak için kullanılır.
HASHED TABLE
Hashed tablo yapıları yaratmak için kullanılır.
Özelleştirilmiş tablo yapıları sayesinde, sistemin tablo kayıtlarına anahtar alanlar üzerinden nasıl ulaşılacağı belirlenir.
Arama yapıldığında, standart tablolar için linear arama, sorted tablo yapısı için binary arama, hash tablolar için ise bir
hash algoritması kullanır.
Abap ön tanımlı tipi, lokal olarak tanımlı bir tip veya ABAP Kitaplığından (ABAP DICTIONARY) bir veri tipi
kullanılabilir. Bu şekilde satır tipi tanımlandığında eğer veri özelliklerini kendimiz tanımlamazsak sistem başlangıç
değerleri ile satır tipini oluşturur.
26
ANAHTAR <KEY>:
Anahtar alanın tanımlanması şu şekilde olur:
KEY
Bir anahtar alan belirlemek isteğe bağlıdır. Eğer bir anahtar alan belirlenmez ise sistem otomatik olarak bir anahtar
alan belirler.
UNIQUE veya NON-UNIQUE ekleri tabloda tekrarlayan girdiler olup olmayacağı konusunda belirleyici rolü üstlenir.
COLUMN1 TYPE I,
COLUMN2 TYPE I,
COLUMN3 TYPE I,
END OF LINE.
TYPES ITAB TYPE SORTED TABLE OF LINE WITH UNIQUE KEY COLUMN1.
Örnekte, sistem LINE yapısında bir ITAB tanımlıyor. Bu ITAB Sorted Tablo olarak yaratılıyor ve COLUMN1
alanını anahtar alan olarak atıyor. Bu sayede tablo içerisinde tekrarlanmayan veriler olması amaçlanıyor.
COLUMN1 TYPE I,
COLUMN2 TYPE I,
COLUMN3 TYPE I,
END OF LINE.
TYPES ITAB TYPE SORTED TABLE OF LINE WITH UNIQUE KEY COLUMN1.
FIELD TYPE C,
END OF DEEPLINE.
TYPE veya LIKE eklerini kullanarak yarattığımız dahili tablolara ek olarak DATA ekini kullanarak da dahili tablo
yapıları oluşturabiliriz.
27
DATA eki ile dahili tablo yapısı:
Dahili tabloya INITIAL SIZE eki ile dilediğimiz miktarda hafıza alanı ayırabiliriz. Ek olarak WITH HEADER
LINE ekini kullandığımızda dahili tabloya “work area” dediğimiz çalışma alanı atamış oluruz. Bu çalışma alanı
sayesinde dahili tablonun satır tipinde bir çalışma alanı oluşturulur ve tablo işleme sokulduğunda tablo içindeki veriler
o çalışma alanı üzerinden işleme sokulur.
<itab2> = <itab1>.
Yukarıda bulunan her iki komut bir tablonun bütün içeriğini diğer tabloya atar. Eğer HEADER LINE dediğimiz
çalışma alanını kullanıyorsak, tablo ile çalışma alanının aynı ismi taşıdığını unutmamamız gerekir. Dolayısıyla tablo
içeriğini atamak istiyorsak tablo adından sonra bu iki parantezi [] kullanmayı unutmamalıyız.
Örneğin:
Yukarıda bulunan örnekte LINE tipinde ETAB ve FTAB isimli iki tane STANDARD tablo oluşturuyoruz. ETAB
tablomuzun çalışma alanı bulunmakta. APPEND komutu ile ETAB tablosunu doldurduktan sonra, ETAB’ ın bütün
içeriğini FTAB tablosuna atıyoruz. İşlem bloğundaki parantezlere dikkat edilmesi gerekmektedir.
CLEAR <itab>.
Bu komuttan sonra <itab> tablosuna sistem geri yükleme yapar. Bu geri yükleme sonrasında tablo içinde hiç satır
bulunmaz.
28
Eğer tabloyu WITH HEADER LINE eki ile yaratmışsak, tablo ile çalışma alanının isimlerinin aynı olduğunu
unutmamamız gerekir ve tablo içeriğini temizlemek istiyorsak parantezleri [] kullanmalıyız.
CLEAR <itab>[].
REFRESH <itab>.
CLEAR komutunda tablonun daha önceden kullandığı hafıza alanı korunur. REFRESH komutu ise sadece tablo
alanını temizler ve çalışma alanını etkilemez.
FREE <itab>.
komutunu kullanırız.
Standart olarak tablo büyük değere doğru (ASCENDING) sıralanır. Sıralama düzeni tablonun standart anahtar
alanlarına göre yapılır.
Eğer anahtar alan dışında başka alanlara göre sıralama yapmak istiyorsak takip eden yapıyı kullanırız:
29
-Resim A18-
SATIR EKLEME:
TEK BİR SATIR EKLEME:
Tabloya tek bir satır eklemek istediğimizde takip eden yapıyı kullanırız:
Ekleme yapılan verinin tipi tablo ile aynı olmak zorundadır aksi takdirde sistem ekleme işlemini gerçekleştiremez.
Sistem başarılı bir ekleme işlemi gerçekleştirirse SY-SUBRC değeri 0 olur fakat gerçekleştiremezse SY-SUBRC
değeri 4 olur.
INSERT LINES OF <itab1> [FROM <n1>] [TO <n2>] INTO TABLE <itab2>.
Tablonun yapısına göre değişmek üzere, bu komut kullanıldığında tabloya satır ekleme işlemi bir döngü içinde satır
satır ekleme yapmaya göre ortalama olarak 20 kat daha hızlı çalışmaktadır.
Veya
READ TABLE <itab> WITH TABLE KEY <k1> = <f1> ... <kn> = <fn> <result>.
İlk kullanım şeklinde anahtar alanların verileri <wa> çalışma alanının anahtar alanlarından alınır. Bunun olması için
ise <wa> veri öğesinin tipinin <itab> ile aynı olması gerekir.
İkinci kullanım şeklinde ise arama yapılacak her anahtar alan için verileri kendimiz belirleriz.
30
FARKLI BİR ALANA GÖRE ARAMA KRİTERİ BELİRLEME:
Tablonun anahtar alanı dışında başka bir alana göre arama yapmak istediğimizde takip eden yapıları kullanırız:
veya
READ TABLE <itab> WITH KEY <k1> = <f1> ... <kn> = <fn> <result>.
İlk kullanım şeklinde tablonun satır tipinin tamamı arama kriteri olarak kullanıldı.
İkinci kullanım şeklinde ise arama kriteri <k1> <kn> değerleri arasındaki herhangi bir tablo alanına göre oluştu.
SATIR DEĞİŞTİRME:
Dahili tablo yapısında bir satırı değiştirmek için takip eden yapı kullanılır:
Bu komutun çalışması için <wa> ile <itab> satır tipi olarak aynı yapıda olması gerekmektedir. Eğer bir değişiklik
varsa sistem değişiklik olan satırları günceller. TRANSPORTING ekini kullanarak anahtar olmayan alanlardaki atama
işlemleri mümkün olur.
MODIFY <itab> FROM <wa> TRANSPORTING <f1> <f2> ... WHERE <cond>.
SATIR SİLME:
Tablodan satır silmek için kullanılan yapılar:
Veya
DELETE TABLE <itab> WITH TABLE KEY <k1> = <f1> … <kn> = <fn>.
şeklindedir.
İlk yapıda silme işlemi, anahtar alan verileri çalışma alanı olan <wa> dan alınarak yapılmaktadır.
İkinci yapıda ise anahtar alanları ve değerlerini kendimiz belirleyerek silme işlemini gerçekleştirmekteyiz.
yapısını kullanırız.
Yapısını kullanırız.
31
LOOP AT <itab> <result> <condition>.
<statement block>
ENDLOOP.
Yukarı bulunan yapıda tablo satırları okunur ve işlem bloğunda tanımlanan sıraya göre işleme sokulur. <condition>
ekini kullanarak işleme sokulacak tablo satırlarını belirlediğimiz koşullara göre sınırlayabiliriz.
Döngü her çalıştığında tablonun bir satırı çalışma alanı olan <wa> içine atanır ve tanımlanan işlem bloğunda işleme
sokulur.
APPEND İŞLEMİ:
Bir indeks tablosuna satır eklemek için takip eden yapıyı kullanırız:
Üstteki yapıda satır tipi olan <line> yapısı <itab> a eklenir. Bunun yanında INITIAL LINE eki kullanılarak <itab> a
boş bir satır eklenebilir.
Yukarıda bulunan yapıda <itab1> in içindeki bütün veriler <itab2> ye eklenir. <itab1> in satır tipi <itab2> ile aynı
olmak zorundadır.
INDEX KULLANIMI:
Dahili tablolarda INDEX kullanarak satır eklemesi, satır okuma, satır değiştirme ve satır silme işlemleri
gerçekleştirilebilir.
Bu kullanım şeklinde <idx> ile belirtilen satır <result> kısmında belirlenen kritere göre okunur.
MODIFY <itab> FROM <wa> [INDEX <idx>] [TRANSPORTING <f1> <f2> ... ].
Bu kullanım şeklinde <itab> içinde <idx> ile belirlenen satır <wa> içinde bulunan veriye göre değiştirilir. <wa> ile
<itab> yapısal olarak birbirinin aynı olmak
32
Bu kullanım şeklinde <itab> içinde <idx> ile belirtilen satır silinir.
HEADER LINE olmadan tablo işlemleri HEADER LINE ile tablo işlemleri
Tabloya göre değişmeyen işlemler
INSERT <wa> INTO TABLE INSERT TABLE ITAB.
<itab>. COLLECT <wa> INTO COLLECT <itab>.
<itab>. READ TABLE <itab> ...
READ TABLE <itab> ... INTO <wa>. MODIFY TABLE <itab> ...
MODIFY TABLE <itab> FROM <wa> ... MODIFY <itab> ... WHERE
MODIFY <itab> FROM <wa> ...WHERE ... DELETE TABLE <itab>.
... DELETE TABLE <itab> FROM <wa>. LOOP AT ITAB ...
LOOP AT ITAB INTO <wa> ...
INDEX tabloları için kullanılabilen işlemler
APPEND <wa> TO <itab>. APPEND <itab>.
INSERT <wa> INTO <itab> INSERT <itab> ...
... MODIFY <itab> ...
MODIFY <itab> FROM <wa> ...
-Tablo A2-
NOT: INDEX kullanımı ile çoklu satır işlemleri için ABAP sözdizimi (syntax) dokümantasyonu incelenmelidir.
33
Alt Rutin İşlemleri – Form & Perform
Alt rutinler (FORM) ABAP programlama dilinde tanımladığımız işlem yöntemidir. Tanımladığımız alt rutinleri başka
programlar içinden de çağırabilmekteyiz. Alt rutin ile yapılan işlemler lokal olarak program içinde kullanılmaktadır.
Eğer sistem içinde çalışabilen bir yapı kurmak istiyorsak FUNCION BUILDER ekranını kullanmamız gerekmektedir.
Yukarıda bulunan yapıda <subr> alt rutinin ismi olarak tanımlanıyor. İsteğe bağlı olan USING ve CHANGING
kullanımları parametreleri belirliyor. Yaratılan alt rutinler programın sonlarında yer almaktadır.
Örnek kodlama:
FORM DATATEST.
TYPES WORD(5) TYPE C.
DATA TEXT TYPE WORD.
TEXT = 'ABCDEFGHJK'. WRITE /
TEXT. ENDFORM.
1234567890
ABCDE
1234567890
34
ALT RUTİN PARAMETRELERİ:
USING ve CHANGING parametrelerinin kullanım amacı, alt rutin içerisine kullanmak veya değiştirmek için
veri göndermek. USING parametresi ile gönderilen veriler alt rutin içerisinde kullanılmaktadır, CHANGING
parametresi ile gönderilen veriler ise alt rutin içerisinde değiştirilebilmektedir.
Alt rutin içerisine gönderilen <itabi> standart ve çalışma alanı olan bir tablo olarak tanımlanıyor ve alt rutin içerisine
gönderiliyor. Eğer çalışma alanı olmayan bir tablo alt rutin içerisine gönderilirse sistem lokal olarak bir çalışma
alanı ataması yapar.
Örneğin:
PERFORM TERMINATE.
WRITE 'Program sonu.
FORM TERMINATE.
WRITE '1'.
WRITE '2'.
WRITE '3'.
EXIT.
WRITE '4'.
ENDFORM.
USING ve CHANGIN kullanımlarında alt rutine giriş yapan parametrelerin giriş sırası çok önemlidir.
35
Alt rutinleri örnekleri:
DATA
:
DATE1 TYPE D,
DATE2 TYPE T,
STRING1(6) TYPE C,
STRING2(8) TYPE C,
NUMBER1 TYPE P DECIMALS 2,
NUMBER2 TYPE P,
COUNT1 TYPE I,
COUNT2 TYPE I.
DATA: T.
DESCRIBE FIELD NOW TYPE T.
WRITE: / 'Type of NOW is', T.
DESCRIBE FIELD TXT LENGTH
T.
WRITE: / 'Length of TXT is', T.
DESCRIBE FIELD NUM DECIMALS
T.
WRITE: / 'Decimals of NUM are',
T. DESCRIBE FIELD INT TYPE T.
WRITE: / 'Type of INT is',
T. ENDFORM.
Sum of 2 and 4 is 6
Sum of 7 and 11 is 18
36
Fonksiyon Modülleri
Temel Bilgiler
Fonksiyon modülleri, fonksiyon grupları altında tanımlanan ve ABAP içinde herhangi bir programdan çağırılabilen
işlem yöntemleridir. Fonksiyon grupları fonksiyon modülleri için taşıyıcı görevi görmektedir.
-Resim A19-
Yukarıda bulunan resim fonksiyon modüllerinin yaratıldığı ekranın görüntüsüdür. İşlevsellik olarak SE38 ekranı ile
aynı yapıya sahiptir.
Fonksiyon yaratma esnasında sistem bizden fonksiyonun bağlı olacağı fonksiyon grubunu ve fonksiyonun kısa
tanımını ister.
37
-Resim A20-
Fonksiyonun bağlı olduğu grubu ve kısa tanımını belirttikten sonra fonksiyon için gerekli olan içe aktarım (IMPORT),
dışa aktarım (EXPORT), değiştir (CHANGING), tablolar (TABLES) ve istisna (EXCEPTIONS) parametreleri isteğe
göre doldurulur.
Fonksiyonlar sistem içerisinde herhangi bir yerde kullanıldığı için, parametre aralığı sadece sistemde tanımlı veri
tipleri olabilir. Bunlar ABAP ön tanımlı veri tipleri, sistem tanımlı veri tipleri ve ABAP kitaplığında tanımlı olan veri
tipleri olabilir. Bir veri öğesine referans verildiğinde LIKE eki kullanılamaz.
-Resim A21-
Yukarıda görünen resimde IMPORT kısmında bulunan veriler fonksiyon içerisine aktarılmaktadır.
38
-Resim A22-
EXPORT kısmında olan veriler dışarıya aktarılacak olan verileri içermektedir. EXCEPTIONS kısmında ise fonksiyon
içerisinde bir hata olursa ve fonksiyon buna göre sonlanırsa, hatanın nerede alındığı konusunda belirlediğimiz kriterler
doğrultusunda bize yol gösterir.
FUNCTION READ_SPFLI_INTO_TABLE.
*"------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(ID) LIKE SPFLI-CARRID DEFAULT 'LH '
*" EXPORTING
*" VALUE(ITAB) TYPE SPFLI_TAB
*" EXCEPTIONS
*" NOT_FOUND
*"------------------------------------------------------------
SELECT * FROM SPFLI INTO TABLE ITAB WHERE CARRID = ID.
IF SY-SUBRC NE 0.
MESSAGE E007(AT) RAISING
NOT_FOUND. ENDIF.
ENDFUNCTION.
REPORT DEMO_FUNCTION_MODULE.
PARAMETERS CARRIER TYPE
S_CARR_ID. DATA: JTAB TYPE SPFLI_TAB,
WA LIKE LINE OF JTAB.
39
OTHERS = 2.
CASE SY-SUBRC.
WHEN 1.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO.
WHEN 2.
MESSAGE E702(AT).
ENDCASE.
40
Fonksiyon Grupları
Her fonksiyon modülü sistemde tanımlanmış bir fonksiyon grubuna bağlı olmak zorundadır. Fonksiyon grupları
fonksiyonlar için bir taşıyıcı görevi görmektedir. Sistemde yeni bir fonksiyon grubu tanımlamak istediğimizde SE80
ekranından yeni bir fonksiyon grubu oluşturabilmekteyiz.
-Resim A23-
Fonksiyon grubunun adını yazdıktan sonra görüntüle tuşunu kullanıyoruz, eğer sistemde böyle bir fonksiyon grubu
mevcut değilse karşımıza çıkan ekranda istenen bilgileri tamamlayarak fonksiyon grubunu yaratabiliriz.
-Resim A24-
41
-Resim A25-
Yukarıda bulunan resimde görüldüğü gibi gerekli olan bilgileri sağladıktan sonra ve SAVE tuşu ile kayıt işlemini
yapıyoruz. Yarattığımız fonksiyon grubunu artık fonksiyonlarımız için kullanabiliriz.
42
Diyalog Programlama
Seçim Ekranları
Seçim ekranları programda kullanıcılara seçim kriteri girmelerine yardımcı olur. Büyük bir tablodan veri çekerken
belirtilen kriterler sayesinde tam olarak istenilen verinin elde edilmesini sağlar.
-Resim A26-
Sistem tarafından otomatik veri tipi kontrolü gerçekleştirilir. Örneğin tarih alanına karakter tipinde giriş yapılırsa
sistem hata mesajı verir.
Giriş alanı veri elemanı (data element) veya tablo alanı ile tanımlandıysa;
kullanılabilir. Ayrıca alan açıklamaları için kitaplık referansı (dictionary referance) alınabilir. Bu durumda alan
açıklaması, tanımlandıysa kullanıcının sisteme giriş yaptığı dilde görüntülenir.
43
-Resim A27-
Şekillerinde tanımlanır. Sistem seçim ekranında tek değer girişine izin verir.
Tanımlanan parametre programda SELECT sorgusunun WHERE cümlesinde veri sınırlama kriteri olarak
kullanılabilir.
Giriş alanı OBLIGATORY anahtar sözcüğü ile zorunlu alan haline getirilebilir. Kullanıcı bu alanı
doldurmadan programı çalıştıramaz.
Seçim ekranında CHECKBOX veya RADIOBUTTON tanımlanabilir. Checkbox seçilmemiş ise boşluk ‘ ‘,
seçilmişse ‘X’ değeri parametreye atanır. Radiobutton’da ise gruptan sadece bir seçenek seçilebilir. Seçili
parametrenin değeri ‘X’, diğerleri boşluktur.
PARAMETERS: a AS CHECKBOX,
b AS CHECKBOX DEFAULT 'X'.
44
s1 RADIOBUTTON GROUP rad2,
s2 RADIOBUTTON GROUP rad2,
s3 RADIOBUTTON GROUP rad2 DEFAULT 'X'.
Şeklinde tanımlanır. Seçim ekranında aynı veri tipinde iki giriş alanı ve karmaşık seçim kümeleri yaratmaya yarayan
bir buton görüntülenir.
sign: Bu alan girilen değerin dahil mi (I), hariç mi (E) tutulacağını belirtir.
option: Operatör alanı (EQ, NE, LE, LT, GE, GT, BT, NB, CP, NP).
low: Alt limiti veya tek değeri tutar.
High: Üst limiti tutar.
Tanımlanan parametre programda SELECT sorgusunun WHERE cümlesinde veri sınırlama kriteri olarak
kullanılabilir.
Giriş alanı OBLIGATORY anahtar sözcüğü ile zorunlu alan haline getirilebilir. Kullanıcı bu alanı doldurmadan
programı çalıştıramaz.
NO-EXTENSION ile çoklu değer veya çoklu aralık seçimi engellenebilir. Kullanıcı tek değer veya tek aralık
seçebilir.
45
SELECTION) bloğu çalışır. Veri tipi dışındaki değer kontrolleri AT SELECTION-SCREEN bloğunda
gerçekleştirilir.
-Resim A28-
-Resim A29-
46
Listeler
Listeler minimum programlama yapılarak verilerin görüntülenmesi için kullanılır. Dilden bağımsızdır, metinler ve
başlıklar sisteme giriş dilinde görüntülenebilir.
Listelere Liste Başlığı ve dört satıra kadar Sütun Başlığı eklemek için iki yöntem mevcuttur:
Çalıştırılabilir programlarda listeler içinde bulundukları olay bloğu çalıştıktan sonra görüntülenirler. Bir bloğun liste
içermesi için WRITE, SKIP veya ULINE cümlesi barındırması gerekir.
Çalıştırılabilir programlarda satır detayları ile ilgili işlemler için AT LINE-SELECTION olay bloğu kullanılır.
Program ilk çalıştığında sy-lsind sistem değişkeninin değeri 0’dır. AT LINE-SELECTION olay bloğunun çalışıp
detay listesinin ekrana gönderilmesinin ardından sy-lsind değeri 1 artırılır. Bir önceki seviyeye geri dönüldüğünde
ise sy-lsind 1 azaltılır.
-Resim A30-
-Resim A31-
47
Örnek program çalıştırıldığında ekran görüntüsü şekildeki gibidir:
-Resim A32-
Satıra çift tıklanarak AT LINE-SELECTION bloğu çalıştığında ise aşağıdaki çıktı elde edilir.
-Resim A33-
Varsayılan rapor satır genişliği 83 karakter, sayfa uzunluğu 60.000 satırdır. Bu değerler REPORT cümlesinde LINE-
SIZE <columns> ve LINE-COUNT <lines_per_page> ile değiştirilebilir.
TOP-OF-PAGE olayı ile sayfa başlıkları yaratılabilir. Genellikle program çalıştırılırken girilen sorgu kriterlerinin
görüntülenmesi için kullanılır. İlk WRITE, SKIP veya ULINE cümlesiyle karşılaşıldığında çalışır.
FORMAT ile yapılan biçim ayarları bir sonraki WRITE cümlesinden itibaren etkin olur ve FORMAT COLOR
OFF veya FORMAT RESET ile sonlandırılana kadar (aynı olay bloğu içinde) etkin kalır. Her yeni olay bloğunda
biçim ayarları sıfırlanır.
48
WRITE CÜMLESİ SENTAKSI:
49
Ekranlar
Ekranda giriş alanları, çıktı alanları, radyo butonları, checkbox, botunlar kullanılarak tasarım yapılabilir. Kullanıcıdan
veri okumak ve veri görüntülemek için kullanılır.
Attributes: 4 basamaklı sayıdan oluşan ekran adı, tanımı, ekran türü gibi bilgiler.
Layout: Ekranda yer alan elemanlardan oluşur.
Element List: Ekran öğelerinin konum, boyut, veri tipi gibi özelliklerini içerir.
Flow Logic: Ekran görüntülenmeden önceki PROCESSING BEFORE OUTPUT (PBO) ve
kullanıcı hareketinden sonraki PROCESSING AFTER INPUT (PAI) işlemlerinin yönetimi yapılır.
Ekranlar programdan CALL SCREEN <screen_number>. komutuyla çağrılır. Ekran numarasına çift tıklayarak
yaratılabilir.
-Resim A34-
50
-Resim A35-
MODULE STATUS_0100 bloğunda ekran görüntülenmeden önce yapılacak işlemler yer alır.
MODULE USER_COMMAND_0100 bloğunda ise kullanıcı herhangi bir tuşa veya butona bastığında yapılacak işlemler
belirlenir. Şekildeki Layout butonuna basılarak ekran tasarımı için Grafik Düzen Editörü’ne gidilir.
51
GRAFİK DÜZEN EDİTÖRÜ İLE EKRAN TASARIMI:
-Resim A36-
Nesneleri seçer. Seçilen nesne sürükle bırak yöntemi ile ekranda istenen yere konumlandırılabilir.
Input/Output ekler. Alanın veri girişi veya veri görüntülemede kullanılması ile ilgili bilgiler öğe
özelliklerinden yönetilir.
Checkbox ekler.
Radiobutton ekler.
Buton ekler.
Ekran alanlarına alan özelliği atamanın iki yöntemi vardır:
Kitaplıktan veri kopyalanması: Herhangi bir ABAP Kitaplık nesnesinin özellikleri ekrandaki bir
alana kopyalanabilir. Kitaplık nesnesinin adı ekrandaki alan adı olarak atanır.
Programdan veri kopyalanması: Programda tanımlanmış bir alanın özellikleri ekran alanına kopyalanabilir.
52
Program ve ekranda tanımlanan alanların adları aynı olduğu takdirde ekranda girilen alan değerleri PAI modülü içinde
programa otomatik olarak aktarılır. Programda yapılan düzenlemeler de PBO modülü içinde ekrana otomatik olarak
aktarılır.
-Resim A37-
53
Ekranda bir butona basıldığında butonun fonksiyon kodu genellikle ok_code olarak adlandırılan özel bir değişkene
atanır. PAI bloğunda hangi butona basıldığı tespit edilerek ilgili işlemler yapılabilir. Butonun fonksiyon kodu
yukarıdaki şekilde FctCode alanına yazılır.
********************************************
* Flow Logic
Ekran çağrıldığında sistem imleci otomatik olarak ekrandaki ilk giriş alanına konumlandırır. İmlecin başka bir alana
konumlandırılması istenirse PBO modülünde değiştirilebilir.
********************************************
* Flow Logic
54
PROCESS BEFORE OUTPUT.
MODULE CURSOR.
-Resim A38-
PBO modülünde SET PF-STATUS ve SET TITLEBAR komutlarıyla araç çubukları ve program başlığı düzenlenir.
55
Mesajlar
Kullanıcıyı programın akışıyla ilgili bilgilendirmek için mesajlar kullanılır. MESSAGE komutu program akışını
durdurarak belirtilen metni görüntüler. Mesajın nasıl görüntüleneceğini ve programın akışının nasıl devam edeceğini
mesaj tipi belirler.
SAP tarafından sağlanan standart mesajlar görüntüleneceği gibi kullanıcı kendi istediği metni de mesaj olarak
kullanabilir. SAP’de altı adet mesaj tipi bulunmaktadır:
S: Durum mesajı. Bir sonraki ekranda durum çubuğunda görüntülenir. Genellikle işlemin
başarılı gerçekleştiğini bildirmek için kullanılır.
E: Hata mesajı. Mesaj metni anında ekranda veya durum çubuğunda görüntülenir ve program akışı durdurulur.
W: Uyarı mesajı. Mesaj metni ekranda veya durum çubuğunda görüntülenir.
I: Bilgilendirme Mesajı. Mesaj metni popup penceresinde görüntülenir. Program kaldığı yerden akışına
devam eder.
A: Sonlandırma. Metin popup penceresinde görüntülenir ve program sonlanır.
X: Mesaj metni görüntülenmez, program short dump verir.
1. msg:
Sistemde T100 tablosunda bulunan standart mesajlardır. Mesaj tipi, mesaj numarası ve mesaj sınıfı belirtilebilir. t
mesaj tipini, n mesaj numarasını, id de mesaj sınıfını belirtir. SE91 işlem kodundan standart mesaj sınıfları
görüntülenebilir ve yeni mesaj sınıfları yaratılabilir.
SABAPDOCU mesaj sınıf varsayılan mesaj sınıfıdır. Mesaj komutunda mesaj sınıfı belirtilmezse
SABAPDOCU sınıfı kullanılır.
... { tn }
| { tn(id) }
| { ID mid TYPE mtype NUMBER num }
| { oref TYPE mtype } ... .
MESSAGE i014.
MESSAGE i014(sabapdocu).
DATA: mid TYPE sy-msgid VALUE 'SABAPDOCU',
mtype TYPE sy-msgty VALUE 'I',
num TYPE sy-msgno VALUE '014'.
2. txt:
Mesaj sınıfı belirtilmeksizin kullanıcı istediği bir metni mesaj olarak görüntüleyebilir.
56
3. Mesaj Seçenekleri:
... DISPLAY LIKE dtype
Kodu kullanıldığında Test Message metni durum çubuğunda hata simgesi ile görüntülenir.
-Resim M1-
Display Like kullanılarak program akışını etkilemeden metnin farklı bir türde görüntülenmesi sağlanabilir.
-Resim M2-
57
ABAP Kitaplığı
Temel Bilgiler
-Resim K1-
Se11; Abap’ın data tiplerinin yaratıldığı ve yönetildiği işlemdir. Sistemde kullanılan tüm data tipleri SE11 içerisinde
tanımlıdır. Burada tanımlı bir data tipinde yapılan değişiklik, tüm sistemde etkili olacaktır. Bu şekilde, sistemdeki veri
bütünlüğü, güvenilirliği ve güvenliği sağlanır.
Burada, tanımlı belli başlı data tipleri kullanılarak, database ile ilintili bir çok ( tablo, yapı, vs..) nesne yaratılabilir. Bu
nedenle Abap Dictionary, geliştirmelerde kullanılan nesnelerin mantıksal yapısını tanımlamanın yanı sıra database ile
olan ilintilerini görüntülemekte de yardımcı olur. Aynı zamanda SE11 yardımı ile bir ekran alanına girdi yardımı
sağlanabilir.
SE11 ‘de tanımlanabilen veri tipleri; Tables, Views, Data Elements, Structures, Table Types, Type Groups, Domains,
Search Helps, Lock Objects olarak sayılabilir. Giriş ekranında da görülebildiği gibi bu tiplerden biri seçilerek
görüntülenebilir, değiştirilebilir veya bu tiplerden bir yenisi yaratılabilir.
58
-Resim K2-
Burada bir database tablosu adı girip “Display” tuşladığımızda, bu tablo içeriğini (tanımı, tipini, içerisinde var olan
alanları, oluşturulma esaslarını) görüntüleyebiliriz.
59
-Resim K3-
1 23 45
Gelen ekran üzerinde bazı gerekli işlemler için numaralandırılan tuşlara
Aynı şekilde Se11’in diğer işlevleri için de aynı tuşlar, aynı kullanım özellikleri ile mevcuttur.
60
Örneğin;
Data Element sekmesine bir alan adı girildiğinde aşağıdaki gibi o alana ait açıklamaları görmek mümkündür:
-Resim K4-
-Resim K5-
61
Bir tablo tipi için;
-Resim K6-
-Resim K7-
Burada bir tablo oluştururken veri sözlüğü kullanılmaktadır ve bu süreçte Domain,Data Element ve Tablo ilişki
içindedir. Burdan yola çıkarak veri tiplerini incelersek;
62
Bir domain aslında bir fielddır. Domaini oluştururken domainin int mi, string mi, tarih mi, ağırlık ölçü
birimi mi gibi seçimleri belirtiriz. Ayrıca domain ile verinin kaç karakter uzunluğunda olacağını, decimal
ise ondalık kısmının uzunluğunun ne olacağını belirleriz.
Data element ise domain ile tablo arasında kalan bir geçiş yapısıdır. Burada fieldı tabloya koyduğumuzda
verinin kısa açıklamasını, daha kısa açıklamasını, en kısa açıklamasını yazabiliriz. Bu yazım tamamen
raporlama ile alakalıdır. Mesela bir ALV raporunda gösterilen alanın başlığı burdan gelmektedir.
Tablo için ise, bir veritabanı tablosunu göz önüne aldığımızda; kendi içerisinde tanımlı alanların adları
vardır ve bu alanlara data elementler veya predefined type dediğimiz tiplerden biri atanır. Sap’nin kendi
standart tabloları vardır. Özel bir sebep gerekmedikçe tablo oluşturulmaz.
Table view ise bir çok farklı tablonun alanlarının bir arada kullanılmasıyla oluşturulan bir görüntüleme
yapısıdır. Birleştirilecek tablolar arasında ortak anahtar alanlar belirtilerek ve istenirse şartlar da
eklenerek,bu tabloların istenen alanları görüntülenir.
Data Structure ise yine bir raporlama ya da görüntüleme işleminde kullanılmak üzere, database’de yer
tutmayan ,üzerinde alan bilgileri(fields) tutan yapıdır.
-Resim K8-
Search Help tipi, bir seçim ekranında girilen parametreler için F4 tuşuna basılarak çağırılan, olası
seçilebilecek(önerilen) verileri listelemek için kullanılan yardım menüsüdür. Burada yardım menüsü
oluşturulacak parametre ile birlikte onu daha iyi açıklayıcı ve destekleyici diğer yan alanlarla da
tanımlanır.
Lock Object bir nesnenin bir başka kullanıcı tarafından değiştirilmesini önlemek için kullanılır. İçerisinde
kullanıcı tarafından belirlenen kilitleme bilgisini tutar. Bir başka kullanıcının ve uygulamanın o an kullanılan
nesneye ya da örneğe erişmesini engeller.
63
Tablo Oluşturma
Yeni bir database tablosu oluşturmak için SE11’de database table alanına Z ile başlamalayan bir isim giriyoruz. Tablo
alanına ZDENEME yazıp ve create tuşuna basılır. Önce tabloda zorunlu alanları doldurmak zorundayız. Tablonun
kısa açıklamasını yazıp Delivery Class’ı A ve de Data browser/ Table View Maintenance alanı gösterim ve bakım
tercihlerine göre seçilir.
-Resim K9-
Sonra Fields tabına geçerek ilk alan adını yazalım. İlk alan adımız database tablolarda Mandt(Üst birimi temsil eder)
olmak zorunda. Biz eğer tablo oluşturacaksak ilk field mutlaka mandt ve data element mandt olmak zorunda .
-Resim K10-
Ekranda initial values yazan yerin işaretli olması bu tabloya eklenen kayıtta mutlaka mandt dolu olması gerektiğini
gösterir. Bunun gibi alan adları ve data elementleri belirtilerek tabloya alanlar eklenebilir. Bunun haricinde predefined
type butonuna basarak, data element ismi yazmak yerine direkt o alanın veri tipini kendimiz yazabiliriz. Bunu
yaparken F4′e yardımı da kullanılabilir.
64
-Resim K11-
Örneğin ilk alan için numc karakterini seçelim bir ID gibi hem integer hem string veri girebilmek mümkün olsun,
Ayrıca bu tabloya kaç karakterlik veri girebilmeliyiz bunu belirten bir sayı numc’in yanına yazıyoruz. Mesela standart
id numaraları tutmak için 10 haneli numc diyelim . İnitial values’i ve keyi bu alanda da seçmeliyiz. Anahtar alansız ve
mandtsiz tablo yaratılamaz.
-Resim K12-
65
Bundan sonra kişi adı ve soyadı alanları oluşturalım:
-Resim K13-
Isim alanı için “Name1” data elementini seçtik. Name1 zaten sistemde varolan bir data elementtir.
Şimdi soyad için biz kendimiz bir data element oluşturalım. Data element yazan yere ZSOYAD yazıp Üzerine çift
tıklayınca tablodan çıkmadan önce bize değişikleri kaydedip kaydetmeyeceği sorusu gelecektir ‘yes’ olarak
yanıtlayarak devam edelim. Bize yeni bir data element oluşturmamız gerektiğini sorar buna da ‘yes’ diyerek ilk data
elementimizi oluşturacağımız ekrana geçelim. Domainin kısa açıklamasını yazdıktan sonra (Elementary type
sekmesinde var olan bir veri tipi seçilebilir) Predefined seçeneğini seçip data type’ı char uzunluğunu 40 yapalım.
Sonra Field label yazan yere gelerek. Farklı uzunluklardaki açıklamaları yazalım.
66
-Resim K14-
-Resim K15-
67
Data elementini aktif hale getirdikten sonra tabloya geri dönelim.( Eğer ilerde 40 karakter uzunluğu yetmezse
predefined type ile boyutunu değiştirebiliriz. Eğer data elementi değiştirirsek ona bağlı tüm tablolarda field uzunluğu
değişir.)
Şimdi tabloya cins alanı ekleyelim. Data elementi ise ZCINS olsun. ZCINS data elementini oluşturalım. Bu sefer bu
data elementi bir domain ile bağlayalım. Domain ismine ZDOMCINS ismini verip çift tıklayalım.
-Resim K16-
Domainin kısa açıklamasını yazdıktan sonra karakter tipini char uzunluğunu 1 verelim. Sonra value range tıklayıp F-
Bayan, M-Erkek yazalım.
68
-Resim K17-
69
-Resim K18-
Domain’ i aktif hale getirelim. Domaini aktif hale getirirken çıkan pencerede zcins’i de seçersek aynı anda hem
domain hem data elementi aktifleştirilmiş olur. Sonra yeniden tabloya geri dönelim.
-Resim K19-
En son tablomuzu aktif edebilmek için ‘Technical Settings’ denilen ayarları yapmalıyız. Bunu ise Technical Settings
butonu ya da menüden GOTO-> Tecnihcal settings’den ayarlıyoruz. Orada Data Class’ ı APPL0 ve Size Category’ i
seçiyoruz. Size category tabloda kaç kayıt olacağı ile ilgilidir. Tabloda kaç kayıt olacağını önceden tahminen oraya
yazarsanız büyük performans farklılıkları görebilirsiniz.
70
-Resim K20-
-Resim K21-
71
View Oluşturma
Bir view bir tablodan farklı olarak databasede saklanıp yer tutmayan bir veri tipidir. Bir ya da daha çok database
tablosunun sadece istenilen alanlarından(fields) oluşturulur. İki tabloyu birbirine inner join yardımıyla bağlayıp
istenen verileri çekerken kısıtlamalar da belirlenebilir.
-Resim K22-
Her uygulama için özel olarak şekillendirilebilecek ve abap uygulamalarında en çok uygulanan database view türü bir
veri oluşturalım:
72
-Resim K23-
Gelen sayfada önce kısa açıklama kısmına tanımı daha sonra Tables sekmesine birleştirilecek tabloların adlarını
yazıyoruz. Daha sonra “join conditions” bölümüne inner join işleminde olduğu gibi; tablolar arasında ortak olan
anahtar alanları yani hangi alanlar üzerinden birleşeceklerini yazarız. Tabloda görüntülenecek alanları ise ‘View Flds’
sekmesinden seçiyoruz.
73
-Resim K24-
Burada “table fields” butonuna basarak ilk ekranda girmiş olduğumuz tabloların alanlarını görüntülemek ve viewda
görüntülenmek istenen alanları, gelen ekrandaki checkboxları tıklayarak seçmek mümkündür. Burada tanımlanan
bütün tablolardan istediğimiz kadar alan seçimi yapmak mümkündür.
View’da görüntülenecek alanlara kısıtlamalar belirlemek için ‘selection conditions’ sekmesine giriyoruz;
-Resim K25-
Yine ‘table fields’ butonunu kullanarak elimizdeki tabloların alanlarını seçebilir ve o alanlar için istediğimiz
operatörleri ve karşılaştırma değerlerini girebiliriz. Burada aynı bi select cümlesinde olduğu gibi mantıksal
operatörleri ve de And/Or gibi bağlaçlarla şartları birbirine bağlamayı unutmamalıyız.
74
Bunları ayarladıktan sonra ‘ Save’ butonuna basarak yaptığımız viewı aktif hale getirdikten sonra abap programlarında
kullanmamız mümkündür.
75
Tablo Bakım Ekranı
Tablo bakımı yaratıcısı, bir tablo ya da view ‘a veri eklemek için bir bakım ekranı yaratmak üzere kullanılır. Tabloyu
ve alanlarını yarattıktan sonra aktif hale getirip, o tabloya bakım yapabilmek için Utilities>Table Maintenance
Generator tıklayarak başlatılır.
-Resim K26-
76
Gelen ekranda;
-Resim K27-
İlk olarak bir authorization group( giriş yetkisi olan grup) seçilir bu seçim tablo veya viewa bakım yapabilecek
kullanıcıları sınırlamak içindir. “&NC&” seçimi tüm kullanıcıların erişebilmesini sağlar.
Function group ise bakım modullerinin hangi fonksiyon grubu içerisinde yaratılacağını belirtmek için seçilir. Biz
burada ‘ZTEST’ adıyla kendi grubumuzu yaratıyoruz.
Maintenance type (one - two-step dialog) getirilecek bakım ekranının bir ya da iki aşamalı olması için seçilir. One-
step diyalog tablo ya da view’daki bütün alanları içeren yalnızca bir genel bakış ekranı getirir.two-step diyalogda ise,
yalnızca anahtar alanlar ve text alanları ilk ekranda, diğer alanlar ise ikinci detay ekranında gösterilir.
Maintenance screen no bakım ekranlarının numarasını,recording routine ise ekrandan girilen alanların nasıl bir iletişim
yoluyla kayda alınacağına dair bir seçimdir.
Biz one step seçtikten sonra, ‘Find Screen Number’ butonuna tıklayarak bakım ekranı için numara alıyoruz.
77
-Resim K28-
Bu seçimi de yaptıktan sonra üst soldaki ‘Create’ tuşuna basarak bakım ekranlarını yaratmış oluyoruz. Bundan sonra
yapılacak olan SM30 transactionını kullanarak yarattığımız tabloya eleman eklemek olacak.
-Resim K29-
SM30 ekranında bakım yapılacak tablo/view adı yazılıp ‘Maintain’ butonuna basıldığında, gelen ekranda;
78
-Resim K30-
‘Yeni girişler’ toolbar butonuna basılarak yeni giriş yapmak, kalem butonuna basarak da mevcut girişlerin anahtar
alanları hariç diğer field’ ları düzenlemek mümkündür.
79
SE16
Sap giriş ekranında transaction alanına ‘se16’ yazdıktan sonra gelen tablo görüntüleme işlemidir.
-Resim D1-
1 2 3
Burada görünen girdi alanına görüntülenmek istenen tablonun adı girilir ve (1) nolu butona basılır ise tabloyu
görüntülemek için seçim yapmak üzere tablo alanları görüntülenir.
-Resim D2-
1 Numaralı butonu tıklayarak gelen seçim ekranında tablonun alanları için kısıtlar belirlenebilir. F4
help özelliği olan alanlar için yardım alınabilir.
2 Numaralı create entries butonu ise abap kitaplığında yer alan ve tablo bakımı yaratılarak, izin verilmiş
tablolar için değişiklik yapma, eleman ekleme işlemi yapmak üzere kullanılır.
3 Numaralı buton ile görüntüleme seçeneklerini değiştirmek mümkündür:
80
-Resim D3-
Bu menüde görüntüleme seçeneklerini; Alv grid görüntüsü olarak, Alv list olarak veya kendi standardında
listelemek mümkündür. ‘Keyword’ bölümü ise, listenin sütun başlıklarının; ‘Field name’ seçili ise alan adları, eğer
’Field label’ seçili ise alan adlarının açıklamalarının görüntülenmesini sağlar.
-Resim D4-
81
Bu ekranda daha önce de SE11’de çağrıldığı ve kullanıldığı gibi tabloda görüntülenmek istenen kayıtlar için kısıtlar
belirlemek, f4 help seçeneği olan giriş alanları için yardım almak mümkündür.
Ayrıca bir tablo için hazırlanan sorgu alanlarının bileşenlerini tek bir varyant altında saklamak ve gerektiğinde aynı
alanlara aynı değerleri tekrar girmek yerine bu varyantı çağırarak bu tekrardan kurtulmak mümkündür. Bu işlem için
menüden Goto>Variants sekmesini kullanıyoruz;
-Resim D5-
Burada ’Get’ seçildiğinde var olan varyantın bileşenlerini ekran alanlarına getirme, ‘display’ ile görüntüleme, ‘delete’
ile silme ve ‘save as variant’ ile de varyantı kayıt etme işlemi yapılır.
Variant kaydetmek için; ‘Save as Variant’ denildiğinde aşağıdaki ekran gelir;
-Resim D6-
Burada varyant adı ve varyant tanımı girilmesi mecburidir. Kayıt ekranındaki diğer bileşenlerle ise varyantın seçim
ekranı üzerinde istenen değişiklikleri yapmak mümkündür. Variant save edildikten sonra ‘Goto>Variants>Get’
menüsünden çağırılabilir.
Giriş ekranında istenen seçimler yapıldıktan sonra ‘F8’ ya da ‘execute’ butonuna basılmasıyla tablonun
görüntülenmesi sağlanır.
82
83
Smart Forms
SAP’ nin sunduğu Smart Form yapısı, basit grafik araçlarını kullanarak form yapısı oluşturmayı sağlar. Bir çıktı almak
istenildiğinde ihtiyaç olunan şeyler bir form yapısı ve verinin gönderileceği programdır. Smart Forms başlangıç
ekranına “SMARTFORMS” işlem kodu ile girmekteyiz.
-Resim S1-
-Resim S2-
Bir Smart Form yaratıldığında, sol tarafta bulunan ağaç yapısı iki ana başlık içerir:
Genel ayarlar
Sayfalar ve Pencereler
84
Genel Ayarlar
Form ile ilgili genel ayarların yapıldığı kısım başlığıdır. Bulunduğu başlık altında Form Niteliği, Form Arayüzü ve
Genel Tanımlar başlıkları bulunmaktadır.
Form Niteliği
Bu kısımda Smartform ile ilgili tanımları yapıyoruz. Çıktı seçenekleri kısmında Smartform’ un bize verecek olduğu
çıktıyla ilgili ayarlamaları yapıyoruz.
Form Arayüzü
Bu kısımda Smartform’ a giriş ve çıkış yapacak olan parametreleri belirliyoruz. Smartform’ un daha kolay anlaşılması
için bu yapıyı bir fonksiyon gibi düşünebilirsiniz. İçe aktar, Dışa aktar ve Tablolar kısmında, standart olarak
tanımlanmış olan parametreleri işleve göre değişen şekilde kullanabilmekteyiz.
Genel Tanımlar
Bu kısımda ise Smartform içinde kullanacak olduğumuz genel veri tanımlamalarını yapıyoruz. Örneğin; Smartform
içinde bir veriyi birden çok yerde kullanacaksak bu veriyi her yerde ayrı ayrı tanımlamak yerine “Genel Tanımlar”
kısmında tanımlamak ve kullanmak performans ve düzen açısından bize hız katacaktır.
Sayfalar ve Pencereler
Bir Smartform Sayfalar, Çıktı Alanları, Adresler, Grafikler, Veriler ve Kelimelerden oluşur. Bir çıktı alanında
dinamik ve statik tablo tiplerini satırlarda ve sütunlarda verileri görüntülemek için kullanabiliriz. Daha fazla yapılar
için satır tiplerini ve satır formatlarını kullanabiliriz. SAP çıktı alanlarını “Pencere” olarak tanımlamaktadır. Bu
pencereleri istediğimiz gibi sayfa içine yerleştirebilmekteyiz. Verileri görüntülemek için iki çeşit çıktı alanı
bulunmaktadır: Ana Pencere(Sistem tarafından standart olarak sunulan) ve Yeni Pencere (Kullanıcı tarafından
yaratılan).
-Resim S3-
Her Pencereyi birbirinden ayrı olarak yapılandırabildiğimiz için her pencerenin içerisine yukarıda bulunan resimde
göründüğü gibi öğeler ekleyebiliyoruz.
Sayfayı taslak olarak görmek istediğimizde “Form Painter” tuşunu kullanarak sayfayı görüntüleyebilmekteyiz.
85
-Resim S4-
-Resim S5-
86
Düzenleyici
Smart Forms içinden bulunan düzenleyici sayesinde form içinde görüntülenecek olan yazıları ve verileri
belirlediğimiz ve istediğimiz şekilde şekillendirerek ekrana getirebiliriz.
-Resim S6-
Bunlara ek olarak eğer Pencerelere eklediğimiz Metin alanlarında form içerisinde olan verileri veya ABAP
programından Smart Forma gönderilmiş olan verileri kullanmak istersek aşağıda bulunan resimde gösterildiği gibi
verilere ulaşabiliriz.
87
-Resim S7-
Resimde gösterildiği üzere ilk olarak “Form Painter” tuşunun hemen yanındaki “Alan Listesi Aç/Kapa” tuşunu
kullanıyoruz ve sol alt kısımda kırmızı çerçeve ile gösterilen “Alan Adı” kısmı ekranda görüntüleniyor. Daha sonra
kullanmak istediğimiz veriyi orada bulunan liste içerisinden seçerek metin alanına sürüklüyoruz ve bırakıyoruz. Artık
istediğimiz veriyi Metin alanında gösterebilmekteyiz.
88
Table Painter
Table Painter dediğimiz düzenleyiciyi bir pencere içerisinde şablon ve tablo tasarlamak için kullanırız.
Table Painter’ ın sunduğu özelliklerden bazıları şunlardır:
Satırlar ve sütunlar çizmek
Satırlar üzerinde kes, kopyala, ekle ve sil gibi işlemlerin yapılması
Hücre boyutlarını ve hücrelerin dış çerçevelerini yapılandırmak
-Resim S8-
Yukarıda bulunan resimde tablo için tanımlanan satırları görebilmekteyiz. Bunlar; ORTAALAN, USTALAN ve
USTALAN2. Bu satır tiplerini tablo içine herhangi bir yerde satır eklediğimizde kullanabiliriz. Resimde görünen
“AYRINTILAR” tuşu ise satır bilgilerinin daha teknik görünümü için kullanılmaktadır:
89
-Resim S9-
Hemen üst kısımda bulunan resimde TABLO sekmesinin altında bulunan “AYRINTILAR” kısmının detayları
görünmektedir.
90
Veri Gönderme İşlemi
KULLANIM
Bir form bastırılacağı zaman sadece iki fonksiyon modülü kullanılmaktadır. İlk fonksiyon sistem tarafından
oluşturulan fonksiyon modülünün ismini bulmak için form ismini kullanmaktadır.
Sistem tarafından Smart Form için üretilen fonksiyon modülü bir sistem için tek bir isim taşır ve başka bir sisteme
taşındığında bu isim değişebilir. Bu yüzden form adını kullanarak bahsettiğimiz ilk fonksiyon modülünü kullanmak
Smart Form için yaratılan fonksiyon isminin bulunması açısından çok önemlidir.
PROSEDÜR
İlk olarak “rs381_fnam” tipinde bir veri yaratıyoruz;
Daha sonra sistem tarafından üretilen form adının alınması için 'SSF_FUNCTION_MODULE_NAME' fonksiyonunu
çağırıyoruz;
Bu fonksiyonu programımız içinde çağırdıktan sonar “lf_fm_name” isimli veri öğemizin içinde
“ZTEST_SMART_FORMS” isimli form için üretilen fonksiyon modülünün ismi bulunmaktadır.
Yaptığımız SMART FORMS’ u çağırmak için ise “CALL FUNCTION” komutundan sonra “lf_fm_name” değerimizi
gönderiyoruz;
91
Çağırdığımız form ile program arasında fonksiyonun EXPORTING, IMPORTING ve TABLES kısımlarını kullanarak
veri alışverişi sağlayabiliyoruz.
-Resim S10-
92
Smart Styles
Smartform’da metin alanlarının paragraf ve karakter biçimlerini gruplamak ve standartlaştırmak için stillerden
(SMART STYLES) yararlanırız. Stillerle ilgili işlemleri SMARTSTYLES işlem koduyla gerçekleştirmekteyiz.
-Resim S11-
-Resim S12-
93
Smart Styles ile yaratılan stiller Smart Form’un tamamına veya formun belli öğelerine atanabilir.
Her formda:
Varsayılan paragraf
Varsayılan sekme aralıkları
Yazı tipi ve büyüklüğü belirtilmelidir.
-Resim S13-
Smart Styles editöründeki ağaç yapısından Paragraf biçimi seçilip Yarat butonuna tıklayarak yeni paragraf biçimi
yaratabiliriz.
Grnt. ve aralıklar sekmesinden paragraf hizalaması, sağ – sol kenar boşlukları, girinti, ve satır aralık değerlerini
belirleriz.
Yazı tipi sekmesinden yazı türü, yazı büyüklüğü, yazı stili ve yazı rengini seçebiliriz.
Sekmelerden “Tab” tuşuna basıldığında yaratılacak girintinin konumunu belirleriz.
Numaralandırma ve gruplama sekmesinden maddelendirme ve numaralandırma bilgilerini yönetiriz.
94
-Resim S14-
Standart ayarlar sekmesinden alt simge, üst simge ve barkod özelliklerini yönetebiliriz.
Yazı tipi sekmesinden aynı paragraf biçimindeki gibi yazı türü, yazı büyüklüğü, yazı stili ve yazı rengini
seçebiliriz.
95
-Resim S15-
96