ABAP EĞİTİM SETİ (Türkçe)

September 6, 2017 | Author: ibrahim | Category: N/A
Share Embed Donate


Short Description

ABAP EĞİTİM SETİ (Türkçe)...

Description

ABAP EĞİTİM SETİ ABAP Temel Bilgiler Fonksiyon Modülleri ABAP Kitaplığı Diyalog Programlama ABAP Objeleri Smart Forms

1

İçindekiler İçindekiler

2

Abap Temel Bilgiler

3

Başlangıç Ekranı

3

Geliştirme Ekranı

4

Genel Bilgiler

5

Söz Dizimi Yapısı - Syntax

6

İşlem Sonucu – Return Statement

7

Veri Tipleri 8 Aritmetik İşlemler

10

Structure Yapısı

12

Kelime İşlemleri

15

Veri Atama – Move & Write 16 Field Symbols

19

Kontrol Mekanizmaları – If & Case 20 Döngü Mekanizmaları

22

Dahili Tablolar – Internal Tables Alt Rutin İşlemleri

25

34

Fonksiyon Modülleri 37 Temel Bilgiler

37

Fonksiyon Grupları 41 Diyalog Programlama Seçim Ekranları Listeler

47

Ekranlar

50

Mesajlar

56

Abap Kitaplığı

43 43

58

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-

Bu ekranı numaralar üzerinden özetleyecek olursak; 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12)

Programın sözdizimi kontrolü (Sytnax check). Programın aktifleştirilmesi. Programın çalıştırılması. Programın nerelerde-hangi programlar içinde kullanıldığı. Programın içinde kullanılan verilerin bilgilerini görüntüleme. Abap editör yardım düğmesi. Programı silme düğmesi. Programın başka bir kopyasını oluşturma düğmesi. Programı yeniden adlandırma düğmesi. Program içinde hata ayıklama düğmesi. Program içinde varyant ile hata ayıklama düğmesi. Program için hazırda bulunan varyantların görüntülenmesi.

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-

Notepad’dan farklı olarak karşımıza gelen ekranda gözümüze çarpanlar; 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11) 12)

Programın düzenleme – görüntüleme modu arasında geçiş tuşu. Etkin olan ve etkin olmayan sürümler(version) arası geçiş tuşu. Programın içinden veya dışından, başka bir nesneye erişim tuşu. Enhancement kodlamaları. Programın sözdizimi kontrolü (Sytnax check). Programın aktifleştirilmesi. Programın çalıştırılması. Nesne listesi görüntüleme tuşu. Dolaşma penceresi. Programın içine kontrol noktası oluşturma tuşu. Programın içine kullanıcıya özel kontrol noktası oluşturma tuşu. Programın içine dışarıdan aktarma yaparak sorgu, fonksiyon, kontrol mekanizması vs. oluşturmaya yardımcı tuş. 13) Programın kod satırlarının belli bir standarda göre düzenleme tuşu. 14) Programın durumunu gösteren kısım. Bizim örnek resmimizde program aktif olmayan(Inactive) durumdadır.

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-

          

Abap programlama dili yazdığımız talimatların işleme sokulmasıyla çalışır. Yazdığımız her talimat satırı “keyword” dediğimiz tanımlayıcılar ile başlar ve “nokta” ile biter. Talimat satırlarındaki kelimelerin en azından bir boşluk ile birbirinden ayrılması gerekmektedir. Talimat satırları iç içe gelecek şekilde yazılabilir. Talimat satırları birden fazla satır olacak şekilde yazılabilir. Aynı zamanda bir satırda birden fazla talimat yazılabilir. Abap’ ta kodlama yaparken yazılan kod Büyük-Küçük(Case Sensitive) harfe duyarlı değildir. Abap’ ta bir satıra yorum ekleme yapacağımızda satırın başlangıcına yıldız (*) koyarız. Resim A3’de bulunan örneğimizde daha kolay ayırt edilmesi amacıyla tanımlayıcıları büyük harf ile yazmışken diğerleri küçük harf kullanarak belirttik. Kodlama yaparken, kodun iyi görünmesi açısından; Büyük-Küçük harf ayrımı veya blokların birbirinden ayrılması için Resim A2’ de 13 numara ile görünen “Pretty Printer” tuşunu kullanabiliriz. Menü’ den ise: Yardımcı Programlar->Ayarlar->Abap Editör->Pretty Printer ile ulaşabiliriz.

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. Ön tanımlı ABAP tiplerini şemasal olarak gösterecek olursak:

-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. 

Bunların dışında kullandığımız veri tipleri olan: c, n ve x 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.

Örnek veri tanımlamaları: DATA text1(20) TYPE c." 20 karakterlik bir veri öğesi DATA text2 TYPE string." string tipinde veri öğesi DATA number TYPE i." integer tipinde veri öğesi DATA number2(5) TYPE n." 5 karakterlik number tipinde veri öğesi DATA num_dec TYPE p DECIMALS 2." decimal tipinde veri öğesi DATA date TYPE d." date tipinde veri öğesi DATA time TYPE t." time tipinde veri öğesi text1 = 'The number'." uzunluk önceden 20 karakter tanımlı number = 100." ön tanımlı veri aralığı -2.147.483.648 den +2.147.483.647 a kadar number2 = 12345." 5 karakterlik rakamsal veri öğesi text2 = 'is an integer.'." uzunluk dinamik olarak atanıyor num_dec = '1234.55'." virgülden sonra iki rakam olabilir date = '20091230'." yıl ay gün şeklinde atama yapılır (YYYYAAGG) time = '125901'." saat dakika saniye şeklinde atama yapılır (SSDDSS)

9

Aritmetik İşlemler

-Resim A7-

 

ABAP dilinde standart dört işlem yapısı kullanılır. Integer türü verilerde aritmetik işlem yaptığımızda sistem her zaman ondalık sistemin uygun gördüğü şekilde yuvarlama yapar. Örneğin: DATA int TYPE i.



int = 4 / 10. int = 5 / 10.

" sonuç: 0 " sonuç: 1

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-





Bazı durumlarda nested structure kullanamayız, örneğin:  Veri tabanında bulunan bir tablo yapısını FLAT STRUCTURE dediğimiz düz şekilde ele almamız gerekiyor.  Yada kullanıcı menüleri kullanırken bu yapılarda tablo tipi veri alanı kullandığımız için bu tip kullanımlarda basit yapılar kullanmak zorunda oluyoruz (Örneğin, SAP List Viewer yapısı yada Table Control yapısı). Bu gibi durumlarda yine structure’ ı bir bütün olarak ele almak isteyebilirsiniz. Bunu yapmak için ise INCLUDE kullanıyoruz:  Temelde yatan mantık ise bir structure içine ayrı şekilde olmayan şekilde başka bir structure alanlarını eklemek. DATA: BEGIN OF structure_adı, ... . INCLUDE STRUCTURE alt_structure_adı AS ad. DATA: ... , END OF structure_adı.



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 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. MOVE fonksiyonu normal eşitlik mekanizması gibi işlemektedir.

-Resim A13Örnek program satırları: DATA: number TYPE p DECIMALS 2, count TYPE i. MOVE '5.75' TO number. count = number.

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 movecorresponding kullanımı gereklidir. Kullanım şekli: MOVE-CORRESPONDING struc1 TO struc2. Örnek program satırları: DATA: BEGIN OF address, firstname(20) TYPE c VALUE 'Fred', surname(20) TYPE c VALUE 'Flintstone', initials(4) TYPE c VALUE 'FF', street(20) TYPE c VALUE 'Cave Avenue', number TYPE i VALUE '11', postcode(5) TYPE n VALUE '98765', city(20) TYPE c VALUE 'Bedrock', END OF address. DATA: BEGIN OF name, surname(20) TYPE c, firstname(20) TYPE c, initials(4) TYPE c,

16

title(10) TYPE c VALUE 'Mister', END OF name. MOVE-CORRESPONDING address TO 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: DATA text1(10) TYPE c VALUE 'The number'. DATA text2 TYPE string VALUE 'is an integer.'. DATA number TYPE i VALUE 7. WRITE text1. WRITE number. WRITE text2. Örnek ekran görüntüsü:

-Resim A14-

Write komutunun kullanım formatı şu şekildedir: Kullanacağımız veri öğemiz “dobj” olsun, buna göre; WRITE {[AT] [/][pos][(len|*|**)]} dobj [dahili_format_secenegi] [harici_format_secenegi] [listeler] [QUICKINFO kısabilgi].

Dahili Format Seçeneği (int_format_options): Dahili format seçeneği kullanıldığında, veri objesinin yapısıyla ilgili değişiklikleri amaçlar.

Harici Format Seçeneği (ext_format_options): Harici format seçeneği kullanıldığında veri objesinin çıktı düzeyinde vereceği görüntüyü ve fonksiyonları amaçlar. Örnek kodlama: DATA text1(10) TYPE c VALUE 'The number'." DATA text2 TYPE string VALUE 'is an integer.'.

DATA num_dec TYPE p DECIMALS 2 VALUE '1.99'.

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: DATA text1(10) TYPE c. DATA num_dec TYPE p DECIMALS 2 VALUE '6.99'. WRITE num_dec DECIMALS 1 TO text1.

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: TYPE d, TYPE t. ASSIGN: date TO , time TO . = . " Syntax hatası döner



Diğer taraftan takip eden kod satırı runtime hatası verir: FIELD-SYMBOLS: TYPE ANY, TYPE ANY.



Bir field-symbol’ e veri ataması yapılıp yapılmadığını IS ASSIGNED kontrolü ile anlayabiliriz.



UNASSIGN komutu ile field-symbol’ ün atama yaptığı noktayı boşaltma işlemi gerçekleşiyor dolayısıyla bu komuttan sonra 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. Bu kontrol mekanizmalarını başlıklar halinde inceleyecek olursak:

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 bloğu formatı şu şekildedir: 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: EQ = NE >< LT < LE GE >=

Anlamı eşittir eşittir eşit değildir eşit değildir eşit değildir küçüktür küçüktür küçük yada eşittir küçük yada eşittir büyüktür büyüktür büyük yada eşittir büyük yada eşittir -Tablo A1-

Karşılaştırma prosedürü şu şekildedir: 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 . WHEN [OR OR ...] WHEN .[OR OR ...] WHEN [OR OR ...] WHEN ... ...... WHEN OTHERS. ENDCASE.

Yukarıdaki yapıda WHEN koşulu veri öğesinin içerdiği değerin eşleştiği durumlarda işlem bloklarını devreye sokar. WHEN OTHERS koşulu, eğer değeri hiçbir eşleşme yakalayamaz ise devreye girer. Son işlem bloğu ENDCASE koşulu ile bitirilmelidir. Örnek program kodlaması: DATA: TEXT1 TEXT2 TEXT3 STRING

VALUE 'X', VALUE 'Y', VALUE 'Z', VALUE 'A'.

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. Ekran görüntüsü şu şekildedir: String is not X Y Z

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 DO döngüsü. Koşullu döngüler WHILE döngüsü. Internal tabloları ve belirli bir Dataset’ i kullanan LOOP döngüsü. Veri tabanından çekilen Dataset’ i kullanan LOOP döngüsü.

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: DO [ TIMES] [VARYING FROM NEXT ]. ENDDO.

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 değeri kadar döngü çalışır. Eğer 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 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: WHILE [VARY FROM NEXT ]. ENDWHILE.

herhangi bir karşılaştırma kriteri olabilir. WHILE ile ENDWHILE arasındaki işlem bloğu 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 ). WHILE STRING NE SPACE. WRITE STRING(1). LENGTH = SY-INDEX. SHIFT STRING. ENDWHILE. WRITE: / 'STRLEN: ', STRL. WRITE: / 'Kelime uzunlugu:', LENGTH. Çıktının görüntüsü şu şekildedir: Deneme yazısı STRLEN: Kelime uzunluğu:

11 11

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.

Koşulsuz çıkış durumları: Bu gibi durumlarda CONTINUE durumunu kullanırız. Sistem bu durumu gördükten sonra mevcut işlem bloğu durdurulur ve döngü bir sonraki aşamaya geçer. Örneğin: DO 4 TIMES. IF SY-INDEX = 2. CONTINUE. ENDIF. WRITE SY-INDEX. ENDDO. Ekran çıktısı: 1 3 4

Koşullu çıkış durumları: Bu tür çıkış durumlarında, işlem bloğu içerisinde CHECK yapısını kullanırız. Eğer CHECK kontrolü sonrasında eşitlik sağlanmazsa döngü bir sonraki aşamaya geçer. Örneğin: DO 4 TIMES. CHECK SY-INDEX BETWEEN 2 and 3. WRITE SY-INDEX. ENDDO. Ekran çıktısı: 2 3

Döngüden EXIT ile çıkış: Bir döngüden herhangi bir koşula bağlı kalmadan ve acil olarak çıkmak gerektiğinde işlem bloğunda EXIT durumunu kullanırız. Bu çıkış kullanıldığında program döngü çıkışından (ENDDO, ENDWHILE, ENDLOOP, ENDSELECT) sonra işleme devam eder.

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.

Veri tipi olarak Dahili Tablolar: Bir dahili tablonun veri yapısı o dahili tablonun satır tipine, anahtar alanlarına ve tablo tipine göre belirlenmiş olur.

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.

Tablo Tipi (Table Type): Tablo tipi ABAP’ ın belli başlı tablo kayıtlarına erişimini sağlar. Dahili tablolar üç alana ayrılır: Standart Tablolar, Sorted Tablolar ve Hashed Tablolar. 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.

Dahili Tablo Yaratmak (ITAB): Diğer veri tipleri gibi, ITAB yaratmak için TYPE veya LIKE ekini kullanırız, TYPES ekini kullanarak lokal olarak yeni bir ITAB yapısı da oluşturabiliriz. TYPES TYPE|LIKE OF [WITH ] [INITIAL SIZE ].

TYPE veya LIKE ekinden sonra işlem şu şekilde yapılanır: OF [WITH ]

TYPE eki dahili tablonun tablo tipini , satır tipini ve anahtar alanını belirler.

25

TABLO TİPİ : Tablo tipini takip eden resimde görüldüğü gibi tanımlayabiliriz:

-Resim A17-

GENEL TABLO TİPLERİ: INDEX TABLE İndeks yapısı ile erişim sağlayan tablo yapıları. 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.

ÖZELLEŞTİRİLMİŞ TABLO TİPLERİ: STANDARD TABLE veya TABLE Standart tablo yapıları yaratmak için kullanılır. 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.

SATIR TİPİ : Satır tipi için: 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 : Anahtar alanın tanımlanması şu şekilde olur: [UNIQUE|NON-UNIQUE] KEY ... [UNIQUE|NON-UNIQUE] KEY TABLE LINE [UNIQUE|NON-UNIQUE] DEFAULT 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. Örnek Tablo Tanımlamaları: TYPES: BEGIN OF LINE, 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. TYPES: BEGIN OF LINE, COLUMN1 TYPE I, COLUMN2 TYPE I, COLUMN3 TYPE I, END OF LINE. TYPES ITAB TYPE SORTED TABLE OF LINE WITH UNIQUE KEY COLUMN1. TYPES: BEGIN OF DEEPLINE, FIELD

TYPE C,

TABLE1

TYPE VECTOR,

TABLE2

TYPE ITAB,

END OF DEEPLINE. TYPES DEEPTABLE TYPE STANDARD TABLE OF DEEPLINE WITH DEFAULT KEY.

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ı: DATA TYPE|LIKE OF WITH [INITIAL SIZE ] [WITH HEADER LINE].

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.

DAHİLİ TABLO İŞLEMLERİ: DAHİLİ TABLO ATAMALARI: MOVE işlemi dahili tablolar için de daha önceden tanımladığımız şekilde çalışır. MOVE TO .

Veya aynı işlemi gören: = .

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: DATA: BEGIN OF LINE, COL1, COL2, END OF LINE. DATA: ETAB LIKE TABLE OF LINE WITH HEADER LINE, FTAB LIKE TABLE OF LINE. LINE-COL1 = 'A'. LINE-COL2 = 'B'. APPEND LINE TO ETAB. MOVE ETAB[] TO FTAB. LOOP AT FTAB INTO LINE. WRITE: / LINE-COL1, LINE-COL2. ENDLOOP.

Ekran çıktısı şu şekildedir: AB 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. DAHİLİ TABLO SIFIRLAMALARI: Diğer veri öğelerinde olduğu gibi, dahili tablolarda sıfırlama işlemlerini: CLEAR . Bu komuttan sonra 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 []. REFRESH .

CLEAR komutunda tablonun daha önceden kullandığı hafıza alanı korunur. REFRESH komutu ise sadece tablo alanını temizler ve çalışma alanını etkilemez. Eğer tablo için kullanılan hafıza alanını serbest bırakmak istersek FREE .

komutunu kullanırız. DAHİLİ TABLO SIRALAMALARI (SORTING): Program içinde kullandığımız tabloları içindeki verilere göre sıralayabiliriz. Anahtar alana göre sıralama yapmak için aşağıdaki kod yapısını kullanırız: SORT [ASCENDING|DESCENDING] [AS TEXT] [STABLE].

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. ASCENDING ve DESCENDING komutlarını kullanarak sıralama düzenini seçebiliriz. Eğer anahtar alan dışında başka alanlara göre sıralama yapmak istiyorsak takip eden yapıyı kullanırız: SORT [ASCENDING|DESCENDING] [AS TEXT] [STABLE] BY [ASCENDING|DESCENDING] [AS TEXT] ... [ASCENDING|DESCENDING] [AS TEXT].

Örnekte, tablo bizim belirlediğimiz ve alanlarına göre sıralanır. BELİRLİ SATIRLARA GÖRE İŞLEM YAPMA: Aşağıda bulunan işlemler tablonun tek bir satırı için yapılabilir:    

Tabloyu satır satır doldurmak Tabloyu içeriğine satır satır erişmek Belirli satırları düzenlemek Belirli satırları silmek

ÇALIŞMA ALANI İLE ERİŞİM: Belirli tablo kayıtlarına erişerek yapılan işlemlerde, tabloda bulunan veri ile direkt olarak çalışıyor olmayız. Bunun yerine başka bir veri öğesini çalışma alanı olarak atarız ve onun üzerinde çalışırız. Bu veri tipi tablo yapısı ile aynı olmak durumundadır. Tablodan bir kayıta erişim yaptığımızda, o kayıtın içerdiği verileri bir çalışma alanına atarız ve program içinde o veriyi 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: INSERT INTO TABLE .

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.

BİRDEN FAZLA SATIR EKLEME: Bir dahili tabloya birden fazla satır eklemek istediğimizde takip eden yapıyı kullanırız: INSERT LINES OF [FROM ] [TO ] INTO TABLE .

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.

TABLO SATIRLARINI OKUMA: Tablodan tek bir satır okumak istediğimizde takip eden yapıyı kullanırız: READ TABLE .

ARAMA KRİTERİ BELİRLEME: Tablodan bir kritere göre veri okumak istediğimizde takip eden yapıları kullanırız: READ TABLE FROM .

Veya READ TABLE WITH TABLE KEY = ... = .

İlk kullanım şeklinde anahtar alanların verileri çalışma alanının anahtar alanlarından alınır. Bunun olması için ise veri öğesinin tipinin 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: READ TABLE WITH KEY = .

veya READ TABLE WITH KEY = ... = .

İlk kullanım şeklinde tablonun satır tipinin tamamı arama kriteri olarak kullanıldı. İkinci kullanım şeklinde ise arama kriteri 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: MODIFY TABLE FROM [TRANSPORTING ...].

Bu komutun çalışması için ile 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.

KOŞULLU SATIR DEĞİŞTİRME: Belli bir koşula göre güncelleme yapmak istediğimizde takip eden yapıyı kullanırız: MODIFY FROM TRANSPORTING ... WHERE .

SATIR SİLME: Tablodan satır silmek için kullanılan yapılar: DELETE TABLE FROM .

Veya DELETE TABLE WITH TABLE KEY = … = .

şeklindedir. İlk yapıda silme işlemi, anahtar alan verileri çalışma alanı olan dan alınarak yapılmaktadır. İkinci yapıda ise anahtar alanları ve değerlerini kendimiz belirleyerek silme işlemini gerçekleştirmekteyiz.

BELİRLİ BİR KRİTERE GÖRE BİRDEN FAZLA SATIR SİLME: Tablodan bazı koşullara göre birden fazla veri silme işlemi için: DELETE WHERE .

yapısını kullanırız. TEKRARLANAN KAYIT SATIRLARINI SİLME: Tabloda bulunan veriler içerisinde tekrarlanan kayıtlar varsa ve bunları silmek istiyorsak: DELETE ADJACENT DUPLICATE ENTRIES FROM [COMPARING ... |ALL FIELDS].

Yapısını kullanırız.

DÖNGÜ İÇERİSİNDE TABLO KULLANIMI: Dahili tablolar için döngü mekanizmalarını kullanabiliyoruz. 31

LOOP AT . ENDLOOP.

Yukarı bulunan yapıda tablo satırları okunur ve işlem bloğunda tanımlanan sıraya göre işleme sokulur. ekini kullanarak işleme sokulacak tablo satırlarını belirlediğimiz koşullara göre sınırlayabiliriz. ÇALIŞMA ALANI KULLANMA: Tablo satırlarını bir çalışma alanına atayarak işlem yapmak için eki takip eden şekilde doldurulur: LOOP AT INTO .

Döngü her çalıştığında tablonun bir satırı çalışma alanı olan 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: APPEND TO .

Üstteki yapıda satır tipi olan yapısı a eklenir. Bunun yanında INITIAL LINE eki kullanılarak a boş bir satır eklenebilir.

BİRDEN FAZLA APPEND İŞLEMİ: Bir indeks tablosuna dahili tablonun satırlarını eklemek için takip eden yapıyı kullanırız: APPEND LINES OF TO .

Yukarıda bulunan yapıda in içindeki bütün veriler ye eklenir. in satır tipi 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. Satır ekleme işlemleri için kullanılan yapı: INSERT INTO [INDEX ].

Bu kullanımda içinde ile belirtilen satıra eklenir. Satır okuma işlemleri için kullanılan yapı: READ TABLE INDEX . Bu kullanım şeklinde ile belirtilen satır kısmında belirlenen kritere göre okunur. Satır değiştirme işlemleri için kullanılan yapı: MODIFY FROM [INDEX ] [TRANSPORTING ... ]. Bu kullanım şeklinde içinde ile belirlenen satır içinde bulunan veriye göre değiştirilir. ile yapısal olarak birbirinin aynı olmak zorundadır. Satır silme işlemleri için kullanılan yapı: DELETE [INDEX ].

32

Bu kullanım şeklinde içinde 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 INTO TABLE . COLLECT INTO . READ TABLE ... INTO . MODIFY TABLE FROM ... MODIFY FROM ...WHERE ... DELETE TABLE FROM . LOOP AT ITAB INTO ...

INSERT TABLE ITAB. COLLECT . READ TABLE ... MODIFY TABLE ... MODIFY ... WHERE ... DELETE TABLE . LOOP AT ITAB ...

INDEX tabloları için kullanılabilen işlemler APPEND TO . INSERT INTO ... MODIFY FROM ...

APPEND . INSERT ... MODIFY ... -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.

ALT RUTİN TANIMLAMA: FORM [USING ... [VALUE(][)] [TYPE |LIKE ]... ] [CHANGING... [VALUE(][)] [TYPE |LIKE ]... ]. ... ENDFORM.

Yukarıda bulunan yapıda 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.

ALT RUTİNLERDE LOKAL VERİLER: Alt rutinlerde TYPES ve DATA ile tanımlanan veriler alt rutin sona erdiğinde sistem tarafından silinir. Her alt rutin kendi çalışma alanına sahiptir. Bu sebepten dolayı eğer global bir veri ile aynı ismi taşıyan bir veri lokal olarak alt rutin içerisinde tanımlanırsa, global olan veri alt rutin içerisinde kullanılamaz duruma gelir. Bu yüzden alt rutin içerisinde veri tanımlandığında l_ ile başlayan isimler kullanılması kullanım açısından daha faydalı olur. Örnek kodlama: TYPES WORD(10) TYPE C. DATA TEXT TYPE WORD. TEXT = '1234567890'. WRITE / TEXT. PERFORM DATATEST. WRITE / TEXT. FORM DATATEST. TYPES WORD(5) TYPE C. DATA TEXT TYPE WORD. TEXT = 'ABCDEFGHJK'. WRITE / TEXT. ENDFORM. Bu kod satırları çalıştığında ekran çıktısı şu şekildedir: 1234567890 ABCDE 1234567890

34

ALT RUTİN PARAMETRELERİ: FORM USING ... [TYPE |LIKE ] ... CHANGING ... [TYPE |LIKE ] ...

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. FORM TABLES ... [TYPE |LIKE ] ...

Alt rutin içerisine gönderilen 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.

ALT RUTİNLERİ SONLANDIRMA: Bir alt rutin normal olarak ENDFORM durumda sonlanır fakat alt rutini daha erken sonlandırmak istersek CHECK veya EXIT komutlarını kullanırız. EXIT kullanıldığında alt rutin koşulsuz olarak sonlandırılır, CHECK kullanıldığında ise alt rutin belli koşullara göre sonlandırılır. Örneğin: PERFORM TERMINATE. WRITE 'Program sonu. FORM TERMINATE. WRITE '1'. WRITE '2'. WRITE '3'. EXIT. WRITE '4'. ENDFORM.

İşlemin ekran görüntüsü şu şekildedir: 1 2 3 Program sonu

ALT RUTİNLERİ ÇAĞIRMA: Alt rutinleri çağırmak için aşağıdaki yapı kullanılmaktadır: PERFORM... [USING ... ... ] [CHANGING... ... ].

USING ve CHANGIN kullanımlarında alt rutine giriş yapan parametrelerin giriş sırası çok önemlidir.

35

Alt rutinleri örnekleri: DATA: DATE1 DATE2 STRING1(6) STRING2(8) NUMBER1 NUMBER2 COUNT1 COUNT2

TYPE D, TYPE T, TYPE C, TYPE C, TYPE P DECIMALS 2, TYPE P, TYPE I, TYPE I.

PERFORM TYPETEST USING DATE1 STRING1 NUMBER1 COUNT1. SKIP. PERFORM TYPETEST USING DATE2 STRING2 NUMBER2 COUNT2. FORM TYPETEST USING NOW TXT TYPE C VALUE(NUM) TYPE P INT 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. Programın ekran çıktısı şu şekildedir: Sum of Sum of

2 and 7 and

4 is 11 is

6 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.

FONKSİYON MODÜLLERİNİN ÇAĞIRILMASI: Bir ABAP programı içerisinde fonksiyon modülü çağırılacağı zaman CALL FUNCTION komutunu kullanırız. Temel yapısı şu şekildedir: CALL FUNCTION [EXPORTING f1 = a1.... fn = an] [IMPORTING f1 = a1.... fn = an] [CHANGING f1 = a1.... fn = an] [TABLES f1 = a1.... fn = an] [EXCEPTIONS e1 = r1.... en = rn [ERROR_MESSAGE = rE] [OTHERS = ro]].

Yukarıda bulunan yapıyla ilgili olarak:    

Fonksiyonun ismini kısmında tanımlanır. EXPORTING kısmından sonra zorunlu olan (NON-OPTIONAL) alanlara uygun verileri atamak gerekmektedir. IMPORTING kısmından sonra ise fonksiyonun programa gönderdiği veriler, aynı tipte olan veri öğeleri atanarak alınır. CHANGING ve TABLES kısımları için yukarıda bahsedilen prosedürler geçerlidir.

FONKSİYON MODÜLLERİNİN YARATILMASI: Fonksiyon modüllerini (Fonksiyonları) yaratırken ABAP Workbench üzerinde çalışan Function Builder (SE37) kullanılır.

-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. SOURCE CODE kısmına ise fonksiyonda kullanacağımız ABAP kodlamalarını yazıyoruz. Örnek bir fonksiyon kodlaması: 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. Bu fonksiyonun program içerisinde çağırılması ise: REPORT DEMO_FUNCTION_MODULE. PARAMETERS CARRIER TYPE S_CARR_ID. DATA: JTAB TYPE SPFLI_TAB, WA LIKE LINE OF JTAB. CALL FUNCTION 'READ_SPFLI_INTO_TABLE' EXPORTING ID = CARRIER IMPORTING ITAB = JTAB EXCEPTIONS NOT_FOUND = 1

39

OTHERS = 2. CASE SY-SUBRC. WHEN 1. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO. WHEN 2. MESSAGE E702(AT). ENDCASE. LOOP AT JTAB INTO WA. WRITE: / WA-CARRID, WA-CONNID, WA-CITYFROM, WA-CITYTO. ENDLOOP.

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. Seçim ekranında tek değer, çoklu seçim, aralık girilebilir.

-Resim A26-

Ekranda girilen değerler varyant olarak saklanıp tekrar kullanılabilir. 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;  

Giriş Yardımı (F1 yardımı) Olası Giriş Yardımı (F4 yardımı), (veri elemanına arama yardımı bağlanmışsa)

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-

Seçim metinlerinin yönetimi GİT  METİN ÖĞELERİSEÇİM METİNLERİ (GOTOTEXT ELEMENTSSELECTION TEXTS) menüsünden yapılabilir.

TEK SEÇİM KRİTERİ (PARAMETERS): PARAMETERS TYPE PARAMETERS LIKE

Ş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. DATA wa_carrid TYPE spfli-carrid. PARAMETERS p_airline LIKE wa_carrid. SELECT carrid FROM spfli INTO wa_carrid WHERE carrid = p_airline. WRITE / wa_carrid. ENDSELECT.

Parametrelere DEFAULT anahtar sözcüğü ile başlangıç değeri atanabilir. PARAMETERS: value TYPE i DEFAULT 100, name TYPE sy-uname DEFAULT sy-uname, date TYPE sy-datum DEFAULT '20090627'.

Giriş alanı OBLIGATORY anahtar sözcüğü ile zorunlu alan haline getirilebilir. Kullanıcı bu alanı doldurmadan programı çalıştıramaz. PARAMETERS field(10) TYPE c OBLIGATORY.

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'. PARAMETERS: r1 RADIOBUTTON GROUP rad1, r2 RADIOBUTTON GROUP rad1 DEFAULT 'X', r3 RADIOBUTTON GROUP rad1,

44

s1 RADIOBUTTON GROUP rad2, s2 RADIOBUTTON GROUP rad2, s3 RADIOBUTTON GROUP rad2 DEFAULT 'X'.

DEĞER KÜMELERİ (SELECT-OPTIONS): SELECT-OPTIONS FOR Ş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. Select-Options ile dört kolonlu bir dahili tablo yaratılmış olur:    

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. DATA wa_carrid

TYPE spfli-carrid.

SELECT-OPTIONS s_airline LIKE wa_carrid. SELECT carrid FROM spfli INTO wa_carrid WHERE carrid IN s_airline. WRITE / wa_carrid. ENDSELECT.

Seçim opsiyonlarına başlangıç değeri atanabilir. DATA wa_spfli TYPE spfli. SELECT-OPTIONS airline FOR wa_spfli-carrid DEFAULT 'AA' TO 'LH' OPTION nb SIGN i.

Giriş alanı OBLIGATORY anahtar sözcüğü ile zorunlu alan haline getirilebilir. Kullanıcı bu alanı doldurmadan programı çalıştıramaz. SELECT-OPTIONS s_airline LIKE wa_carrid OBLIGATORY.

NO-EXTENSION ile çoklu değer veya çoklu aralık seçimi engellenebilir. Kullanıcı tek değer veya tek aralık seçebilir. SELECT-OPTIONS airline FOR wa_spfli-carrid NO-EXTENSION.

Seçim kriteri olarak aralık girilmesi NO INTERVALS ile engellenebilir. DATA wa_spfli TYPE spfli. SELECT-OPTIONS airline FOR wa_spfli-carrid NO INTERVALS.

SEÇİM EKRANI OLAYLARI Seçim ekranında Enter tuşlandığında, ekrandaki bir butona basıldığında veya menü fonksiyonu çalıştırıldığında önce otomatik veri tipi kontrolü gerçekleştirilir. Veri tipi hatalı girildiyse sistem hata mesajı verir. Doğru tipte veriler girilmişse AT SELECTION-SCREEN olay bloğu çalışır. Program yürütüldüğünde ise sıradaki (START-OF-

45

SELECTION) bloğu çalışır. Veri tipi dışındaki değer kontrolleri AT SELECTION-SCREEN bloğunda gerçekleştirilir.

SEÇİM EKRANI TASARIMI Benzer kriterlerin gruplanması, birden fazla elemanın aynı satırda görüntülenmesi gibi tasarımla ilgili konularda SELECTION-SCREEN anahtar sözcüğü kullanılır. SELECTION-SCREEN BEGIN OF LINE. SELECTION-SCREEN COMMENT 1(10) text-001. PARAMETERS: p1(3) TYPE c, p2(5) TYPE c, p3(1) TYPE c. SELECTION-SCREEN END OF LINE.

-Resim A28SELECTION-SCREEN BEGIN OF BLOCK rad1 WITH FRAME TITLE text-002. PARAMETERS r1 RADIOBUTTON GROUP gr1. PARAMETERS r2 RADIOBUTTON GROUP gr1. PARAMETERS r3 RADIOBUTTON GROUP gr1. SELECTION-SCREEN END OF BLOCK rad1.

-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.    

Renk ve simge eklenerek ekranda görüntülenebilir Çıktı alınabilir Internet ya da İntranette yayımlanabilir. Sistem listeleri HTML formatına otomatik dönüştürür. Yerel dosyalarda harici kullanım için saklanabilir.

Listelere Liste Başlığı ve dört satıra kadar Sütun Başlığı eklemek için iki yöntem mevcuttur:  

ABAP Editöründe: Git  Metin Öğeleri  Liste Başlıkları menüsünden Listeden: Programı kaydedip, aktifleştirdikten sonra bir kere çalıştırarak başlık yönetim ekranına Sistem  Liste  Liste Başlığı menüsünden ulaşılabilir. Bu yöntemde liste ekranda göründüğü için başlıkların hizalaması daha kolay yapılabilir. Yeni başlıklar program tekrar çalıştırıldığında görüntülenir.

Ç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 LINESIZE ve LINE-COUNT ile değiştirilebilir. REPORT ztest_program LINE-SIZE 80 LINE-COUNT 7.

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. Listeler için biçim (FORMAT) seçenekleri:     

COLOR INVERSE HOTSPOT INPUT RESET

[ON|OFF] [ON|OFF] [ON|OFF] [ON|OFF]

Satır arka plan rengini belirler Arka plan/metin rengini tersine çevirir Tek tıklama ile AT LINE-SELECTION olayı çalışır Giriş alanı Tüm biçimleri varsayılan değere döndürü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: WRITE {[AT] [/][pos][(len|*|**)]} dobj [int_format_options] [ext_format_options] [list_elements]. AT: çıktı konumu (pos) ve uzunluğu (len) tanımlamaya yarar. int_format_options: Dahili biçim seçenekleri



LEFT-JUSTIFIED|CENTERED|RIGHT-JUSTIFIED: Metnin hizalaması için kullanılır. Sağa dayalı, sola dayalı

veya ortalanmış seçilebilir.   

WRITE: /(60) 'Left' LEFT-JUSTIFIED, /(60) 'Center' CENTERED, /(60) 'Right' RIGHT-JUSTIFIED. NO-GAP: Elemanlar arasındaki boşluğu kaldırır. WRITE: 'No' NO-GAP, 'Gap'. UNDER other_dobj: Çıktı other_dobj’un yazıldığı kolondan itibaren yazdırılır. DATA: carrid TYPE spfli-carrid, connid TYPE spfli-connid. WRITE: 10 'Carrier', 40 'Connection'. ULINE.

 

SELECT carrid connid FROM spfli INTO (carrid, connid). WRITE: / carrid UNDER 'Carrier', connid UNDER 'Connection'. ENDSELECT. NO-ZERO: Alanın değeri 0 ise boşluk ‘ ‘ yazılır. WRITE float NO-ZERO. DD/MM/YY: Kullanıcı profilinde önceden tanımlanmış tarih biçiminden etkilenmemek için kullanılır. Tarih

alanı WRITE ifadesinde belirtilen biçimde yazılır. 

WRITE sy-datum YYMMDD. AS SYMBOLS, AS ICON: Listede sembol veya simge görüntülemek için kullanılır. Ancak INCLUDE

veya INCLUDE ifadesi de koda eklenmelidir.

SAYFA DÜZENİ İLE İLGİLİ KONULAR:      

NEW-PAGE: Listede yeni sayfa yaratır. NEW-LINE: Liste çıktısında bir alt satıra geçmeye yarar. WRITE / ile aynı işlevi görür. RESERVE LINES: Sayfanın sonunda n satır boşluk bırakır. SKIP : n satır boşluk bırakır. SKIP TO LINE : İmleci sayfadaki n. satıra konumlandırır. POSITION : İmleci satırın n. kolonuna konumlandırır.

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. Bütün ekranlar aşağıdaki bilgilere sahiptir:    

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 . komutuyla çağrılır. Ekran numarasına çift tıklayarak yaratılabilir.

-Resim A34-

50

-Resim A35MODULE 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-

Soldaki araç çubuğundan nesneler kullanılarak istenen ekran tasarımı oluşturulur.

Araç çubuğundaki butonlar: Nesneleri seçer. Seçilen nesne sürükle bırak yöntemi ile ekranda istenen yere konumlandırılabilir. Metin alanı ekler. 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.

Ekran Alanı Özelliklerinin Yönetimi: Alanın veri girişine izin verip vermemesi, veri giriş alanıysa girişin zorunlu olup olmadığı, alanın ekrandaki koordinatları, veri tipi, arama yardımı kullanılmışsa arama yardımı bilgileri gibi özelliklerin yönetilmesini sağlar.

-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. DATA: ok_code TYPE sy-ucomm, save_ok LIKE ok_code, output(8) TYPE c. CALL SCREEN 100. MODULE user_command_0100 INPUT. save_ok = ok_code. CLEAR ok_code. CASE save_ok. WHEN 'BUTTON_EXIT'. LEAVE PROGRAM. WHEN 'BUTTON_1'. output = 'Button 1'(001). WHEN 'BUTTON_2'. output = 'Button 2'(002). WHEN 'BUTTON_3'. output = 'Button 3'(003). WHEN 'BUTTON_4'. output = 'Button 4'(004). WHEN OTHERS. output = save_ok. ENDCASE. ENDMODULE. ******************************************** * Flow Logic PROCESS BEFORE OUTPUT. PROCESS AFTER INPUT. MODULE USER_COMMAND_0100.

Ekran çağrılırken boyutu ve konumu belirtilerek nasıl görüntüleneceği yönetilebilir. CALL SCREEN 200 STARTING AT 37 5 ENDING AT 87 22.

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. PARAMETERS: def RADIOBUTTON GROUP rad, txt RADIOBUTTON GROUP rad. PARAMETERS pos TYPE i. DATA: name(10) TYPE c. CALL SCREEN 100. MODULE cursor OUTPUT. IF def NE 'X'. SET CURSOR FIELD name OFFSET pos. ENDIF. SET PF-STATUS 'SCREEN_100'. ENDMODULE. ******************************************** * Flow Logic

54

PROCESS BEFORE OUTPUT. MODULE CURSOR.

GUI STATUS YARATILMASI: GUI Status Menü Çubuğu, Standart Araç Çubuğu, Uygulama Araç Çubuğu ve fonksiyon tuşu ayarlarından oluşur. Her ekran bir ya da daha fazla GUI Status’a sahip olabilir.

-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. Mesaj komutunun söz dizimi şu şekildedir: MESSAGE { msg | txt } [message_options].

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'. MESSAGE ID mid TYPE mtype NUMBER num.

2. txt: Mesaj sınıfı belirtilmeksizin kullanıcı istediği bir metni mesaj olarak görüntüleyebilir. ... text TYPE mtype... . MESSAGE 'Test Message' TYPE 'I'.

56

3. Mesaj Seçenekleri: ... DISPLAY LIKE dtype

Mesaj tipinin görüntülendiği simgeyi değiştirir. MESSAGE 'Test Message' TYPE 'E'.

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. MESSAGE 'Test Message' TYPE 'E' DISPLAY LIKE 'I'.

-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

4

5

Gelen ekran üzerinde bazı gerekli işlemler için numaralandırılan tuşlara bakarsak, ( 1 ) tuşunu kullanarak tablo üzerinde değişiklik yapmak ( 2 ) tuşunu kullanarak hata denetimi yapmak ( 3 ) tuşunu kullanarak tabloyu etkinleştirmek ( 4 ) tuşunu kullanarak içeriğini görüntülemek ( 5 ) tuşunu kullanarak teknik özelliklerini belirlemek mümkündür. 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 K4Ya da bir structure için;

-Resim K5-

61

Bir tablo tipi için;

-Resim K6Bir table view için;

-Resim K7-

Ekran görünümleri oluşur.

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 FBayan, 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. Se11’de view alanına ZDENEME1 yazarak; gelen view tipleri;    

Projection view – Tek bir tablodan bazı alanları alır. Help View – Arama yardımı için kullanılır. Database View – Bir ya da daha çok tablonun inner join ile birleştirilerek görüntülenmesiyle oluşur. Maintenance View – Bir uygulamada kullanılacak nesnenin yaratılmasını sırasında yardımı olur, bu veri bir çok tablonun arasında dağıtılarak görüntülenebilir .

Projection view ve database view türü olanları abap programlarında kullabiliriz.

-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. Onestep 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 2 3

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. 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. 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-

Sayfanın görünümü şu şekildedir:

-Resim S5-

Form Painter’ ın bize sağladığı fonksiyonlardan bazıları:

    

İçerdiği cetvel yapısı sayesinde sayfayı tasarlama İşaretçinin pozisyonunun cetvel üzerinde görünmesi Bir pencerenin boyutu değiştirilirken boyut bilgilerinin görüntülenmesi Form üzerinde görüntü yakınlaştırma ve uzaklaştırma Arka Plana Taranmış olan resimleri ekleyebilme

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. Diğer sekmelere göz atacak olursak;    

VERİLER: Tablo içinde kullanacak olduğumuz döngüsel verileri tanımlama HESAPLAMALAR: Belli alanlar için matematiksel hesaplamalar yapma ÇIKTI SEÇENEKLERİ: Formun vereceği çıktının hangi stili kullanacağı (SMARTSTYLES) KOŞULLAR: Belli alanlar için koşul belirlenmesi

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; DATA : lf_fm_name TYPE rs38l_fnam.

Daha sonra sistem tarafından üretilen form adının alınması için 'SSF_FUNCTION_MODULE_NAME' fonksiyonunu çağırıyoruz; CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = 'ZTEST_SMART_FORMS' IMPORTING fm_name = lf_fm_name EXCEPTIONS no_form =1 no_function_module = 2 OTHERS = 3. IF sy-subrc 0. MESSAGE 'Form veya fonksiyon modülü bulunamadı!!!' TYPE 'E'. ENDIF.

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; CALL FUNCTION lf_fm_name * EXPORTING * is_eparametre1 = gv_eparametre1 * IMPORTING * is_iparametre1 = gv_iparametre1 * TABLES * is_tparametre1 = gv_tparametre1 EXCEPTIONS formatting_error = 1 internal_error = 2 send_error =3 user_canceled = 4 OTHERS = 5. IF sy-subrc 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. LV_RC = SY-SUBRC. ENDFORM.

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. Bu işlemlerden sonra program içinde SMARTFORM’u çağırmış bulunmaktayız.

-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 değerlerin tutulduğu başlık verisi Girinti ve aralıklar, yazı tipi, sekmeler, numaralandırma ve gruplandırmayı içeren paragraf biçimleri Yazı tipi özellikleri ve standart ayarlarının yer aldığı karakter biçimleri Paragraf ve karakter biçimleri renk özellikleri Önizleme bulunur.

Smart Style Başlık Bilgileri: Başlık bilgilerinde stilin varsayılan değerleri tutulur. Karakter ve paragraf biçimlerinde başka değerler belirtilmezse sistem bu varsayılan değerleri kullanır. Smart Style başlık bilgilerinde:   

Varsayılan paragraf Varsayılan sekme aralıkları Yazı tipi ve büyüklüğü belirtilmelidir.

Paragraf Biçimi Yaratılması:

-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-

Karakter Biçimi Yaratılması: Yeni karakter biçim yaratmak için editördeki ağaç yapısından Karakter bçm.’i seçip yarat butonuna tıklarız.  

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

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF