You are on page 1of 30

6.

0 ABAP Yenilikleri

Dr. Kerem Kseolu


Tesuji Consulting
2/19/2009

Table of Contents
Checkpoints ....................................................................................................................................... 3
SAAB Ekran ............................................................................................................................................. 3
Break-Point ............................................................................................................................................. 5
Assert ...................................................................................................................................................... 5
Log-Point ................................................................................................................................................. 8
Unit Test ............................................................................................................................................. 9
Unit Test Nedir? ...................................................................................................................................... 9
Unit Test rnei .................................................................................................................................... 10
nemli Noktalar .................................................................................................................................... 13
Yaplabilecek Kontroller ..................................................................................................................... 13
Programn almas ......................................................................................................................... 14
Modler Yap htiyac ........................................................................................................................ 14
Method oklama ............................................................................................................................... 14
Enhancement ................................................................................................................................. 14
Enhancement Nedir? ............................................................................................................................ 14
Enhancement Yapma rnei ................................................................................................................ 16
Memory Inspector ........................................................................................................................ 18
Try...Catch ....................................................................................................................................... 20
Genel Kullanm ...................................................................................................................................... 20
Exceptionlarn Bulunmas ..................................................................................................................... 21
Sk Kullanlanlar ..................................................................................................................................... 22
Regular Expressions (REGEX) .................................................................................................. 22
Kullanm ekli ........................................................................................................................................ 22
Regex Listesi .......................................................................................................................................... 24
XML Transformation ................................................................................................................... 25
Dier ABAP Yenilikleri ............................................................................................................... 29
Literal Yerine Variable Kullanm ........................................................................................................... 29
Dinamik Internal Table Tanmlama ....................................................................................................... 30


6.0 ABAP Yenilikleri 3


Checkpoints
6.0 ile birlikte gelen kavramlardan biri, CheckPoint kavramdr. Daha nceki srmlerde bu kapsamda
sadece break-point komutu mevcutken, 6.0da assert ve log-point komutlar da eklenmitir. Bunun
yan sra, SAAB ilem kodu zerinde Checkpointlerin aktif veya pasif hale getirilmesi mmkn
klnmtr.
Bu dorultuda; rnein ortak bir amaca hizmet eden (belli bir senaryonun testi gibi) tm break-
pointlerin topluca etkinletirilmesi veya pasif hale getirilmesi mmkndr.
ncelikle SAAB ilem kodunu inceleyelim.

SAAB Ekran
Bu ekranda, Checkpoint komutlarnn topluca aktive / deaktive edilmesini salayan Checkpoint
Grouplar tanmlayabiliriz. Aadaki rnekte, ZKEREM1 adl grubu grebilirsiniz:


Dikkat ederseniz; break-point, assert ve log-point komutlar iin ayr ayr blmler tanmlanm halde.
u anda 3 komut da pasif haldedir.
SAAB ekranndaki ayarlarn etkilerini birlikte deneyelim. Bu denemeler srasnda, rnek olmas iin
Break-Point komutunu kullanacaz. Aadaki basit kodu inceleyin.
*&---------------------------------------------------------------------*
*& Report ZDUMMY_CHECKPOINT
*&---------------------------------------------------------------------*
REPORT

zdummy_checkpoint.

PARAMETERS: p_dummy(1).
START-OF-SELECTION.
* Break Point
BREAK-POINT.

* kt retelim
NEW-LINE.
WRITE 'Program bitti'.
END-OF-SELECTION.


Bu program yrttmzde, her halukarda bu Break-Pointte duracaktr. imdi, Break-Pointin
yanna SAABdaki grubumuzun adn ekliyoruz:

*&---------------------------------------------------------------------*
*& Report ZDUMMY_CHECKPOINT
*&---------------------------------------------------------------------*
REPORT

zdummy_checkpoint.

PARAMETERS: p_dummy(1).
START-OF-SELECTION.
* Break Point
BREAK-POINT ID zkerem1.
* kt retelim
NEW-LINE.
WRITE 'Program bitti'.
END-OF-SELECTION.


Bunu yaptmzda; SAAB ilem kodunda ZKEREM1 grubuna ait Break-Point blm etkin ise, program
bu Break-Pointte duracaktr. Etkin deilse, durmayacaktr.


Burada yaptnz deiiklerden sonra, ilk SAAB ekranna geri dnp grubunuzu etkinletirmeyi
unutmayn.
SAAB ilem kodundaki bu aktif / pasif hale getirme mantnn zellikle kullanlabilecei rnek
senaryolar unlar olabilir:

Zaman zaman sistemde dank olan Break Pointler ortak bir amaca hizmet etmektedir.
rnein; belli bir senaryonun testinde hem User Exitlere, hem Enhancementlara, hem de Zli
bir programa Break Point konmu olabilir. Bu Break Pointlerde ID ekini kullanmak, ayn
senaryoyu ileride tekrar test etme ihtiyac ktnda ayn Break Pointler tekrar ekleme
zahmetini ortadan kaldracaktr. SAABda o senaryoya zel bir grup tanmlandnda, Break
Pointlerin etkinlii oradan alp kapatlabilir.
Developer kullancsnn ortak olduu sistemlerde; dorudan break-point veya break
evreng komutu kullanmak, ayn kullanc ile gelitirme yapan dier programclar olumsuz
etkilemektedir. Standart bir ilem koduna girip onlarca Break Pointe taklmak, ileri

6.0 ABAP Yenilikleri 5


yavalatmaktadr. Bu yzden; kii veya senaryo bazl SAAB grubu yaratmak bu problemi
ortadan kaldrabilir.
SAAB gruplar kullanldnda, pasif halde tutmak kaydyla, Break Pointlerin canlya
gitmesinde hibir saknca bulunmamaktadr. Ortaya kan bir problemi canlda incelemek
gerektiinde, dank haldeki Break Pointleri canldaki SAAB ileminden aktive edebilir, analiz
bittiinde yine SAABdan kapatabiliriz. Bu esnada hibir ABAP ilemi yapm olmayz, ve
dank Break Pointlerin yerlerini hatrlamak gibi bir zahmetten kurtulmu oluruz.

Break-Point
Bu Checkpoint komutu bir nceki balkta zaten incelendii iin, burada tekrar anlatmyorum.

Assert
Assert komutu, koullu bir Break-Point komutudur. u kodu inceleyelim:
REPORT

zdummy_checkpoint.

PARAMETERS: p_dummy(1).
START-OF-SELECTION.
* Break Point
if p_dummy eq 'X'.
BREAK-POINT ID zkerem1.
endif.
* kt retelim
NEW-LINE.
WRITE 'Program bitti'.
END-OF-SELECTION.


Eer SAABda Asserte ait blmde Break seenei iaretlenirse; bu kodun alma ekli ile,
aadaki kodun alma ekli arasna hibir fark yoktur:
REPORT

zdummy_checkpoint.

PARAMETERS: p_dummy(1).
START-OF-SELECTION.
* Break Point
ASSERT
id zkerem1
CONDITION p_dummy = ''.
* kt retelim
NEW-LINE.
WRITE 'Program bitti'.
END-OF-SELECTION.


P_DUMMYnin bo olduu durumda, Debuggern burada durduunu grebiliriz:


Assert komutunun kullanm alan, SAAB ilem kodundaki ayarlar sayesinde daha da geniletilebilir.


Burada yaplan ayar sayesinde; Foreground ve Background proseslerde Assert komutunun nasl
davranaca belirlenebilir.

Inactive: Sistem, Assert komutunu grmezden gelir.


Break: Eer koul salanmazsa (rneimizde p_dummy = X deilse), sistem Break-Point
varm gibi davranr. Az nceki rnek, bu ekilde yrtlmt.
Log: Eer koul salanmazsa (rneimizde p_dummy = X deilse), sistem bir Log tutar
(detaylar az sonra). Bu; zellikle, uzun alan kark programlarn koddaki belli yerlere
dp dmediini, veya belli bir koulun gerekleip gereklemediini (PBi TRY olmayan bir
belgenin gelmesi gibi) anlayabilmek iin kullanlabilir.

6.0 ABAP Yenilikleri 7


Abort: Eer koul salanmazsa (rneimizde p_dummy = X deilse), sistem bir Short Dump
retir. Bu; zellikle riskli iler yapan programlarda, temel baz koullar yerine gelmezse
programn devam etmemesini salamak iin kullanlabilir.

Log komutu ile yaplan loglamalar, SAAB ilem kodunda grlebilir:


Dilersek, burada kodumuzdaki deikenlerin deerlerini de saklayabiliriz:
* Deikenleri dolduralm
SELECT * INTO TABLE lt_t001 FROM t001.
lv_test = 'KEREM'.
* Break Point
ASSERT
ID zkerem1
FIELDS lt_t001 lv_test
CONDITION p_dummy = 'X'.
* kt retelim
NEW-LINE.
WRITE 'Program bitti'.


Bu rnek sonucunda, SAABda yeni bir satr belirecektir.


Bu satra ift tklayarak detaylarn (deiken deerleriyle birlikte) grebiliriz.

Log-Point
Bu komut; Assert komutunun Log zellii ile birlikte kullanlmas ile ayn ekilde almaktadr.
Ancak; Assert komutunun esas kullanm amac Loglama yapmak deil, belli bir koulda program
durdurmaktr. Loglama yapmak, ek bir ilev olarak sunulmutur. Maksat sadece Log tutmak ise, Log-
Point komutunu kullanmak daha anlalr olacaktr.
Log-Point komutu, zellikle arka planda alp Debug etmesi zor programlarda belli koullarda
deikenlerdeki deerleri saklayp sonradan incelemek iin kullanlabilir. Zli tablolar yaratp deerleri
oraya Loglamak yerine, bu ii standart zerinden yapmak daha pratiktir.
Dier Checkpoint komutlarnda olduu gibi, Log-Pointin davran da SAAB ilem kodundan
uyarlanabilir.


Aadaki kodu inceleyin:
* Deikenleri dolduralm
SELECT * INTO TABLE lt_t001 FROM t001.
lv_test = 'KEREM'.
* Log tutalm
log-point
ID zkerem1
FIELDS lt_t001 lv_test.


Bu kod, SAAB ekrannda yle bir Log retecektir:

6.0 ABAP Yenilikleri 9



Unit Test
Unit Test Nedir?
Unit Test, SE38de gelitirdiimiz programn devamnda yazdmz ek kodlar sayesinde programn
kendi kendini test etmesini salayan bir yapdr. Bu zellik sayesinde; programn doru almas
gereken koullar program iine bir Unit Test olarak gmyoruz. Program her deitiinde, Unit TestI
tekrar altrp sonularn doru olup olmadn grebiliyoruz.


Unit Test kodlamas iin, programmz ierisine lokal bir test snf tanmlayp, kontrollerimizi bu snf
ierisinden yapyoruz. Snf tanmnda FOR TESTING ifadesini eklediiimize dikkat edin. Hata, uyar,
vs retmemiz gerektiinde, CL_AUNIT_ASSERT snfnn Methodlarn kullanyoruz.

Unit Test rnei


Elimizde, aadaki basit program olduunu varsayalm. Bu program, T001 tablosundan irket
kodlarn okuyarak ekrana yazdrmaktadr.
*&---------------------------------------------------------------------*
*& Report ZDUMMY_UNIT
*& Unit Test
*&---------------------------------------------------------------------*
REPORT

zdummy_unit.

*&---------------------------------------------------------------------*& V E R
T A N I M L A R I
*&---------------------------------------------------------------------TABLES t001.
DATA:
gt_t001 TYPE STANDARD TABLE OF t001 WITH HEADER LINE.
*&---------------------------------------------------------------------*& P R O G R A M
B A L A N G I
N O K T A S I
*&---------------------------------------------------------------------START-OF-SELECTION.
* irket kodlarn seelim
PERFORM get_t001 TABLES gt_t001.
* Ekranda gsterelim
PERFORM write_data.
END-OF-SELECTION.
*&---------------------------------------------------------------------*& R U T N L E R
*&----------------------------------------------------------------------

6.0 ABAP Yenilikleri 1


1

*&---------------------------------------------------------------------*
*&
Form GET_T001
*&---------------------------------------------------------------------*
FORM get_t001 TABLES e_t001 STRUCTURE t001.
SELECT * INTO TABLE e_t001
FROM t001.
ENDFORM.

" GET_T001

*&---------------------------------------------------------------------*
*&
Form WRITE_DATA
*&---------------------------------------------------------------------*
FORM write_data .
LOOP AT gt_t001.
NEW-LINE.
WRITE: gt_t001-bukrs, ` `, gt_t001-butxt.
ENDLOOP.
ENDFORM.

" WRITE_DATA


Bu program ierisine; T001 tablosundan mutlaka bir veri dnmelidir eklinde bir Unit Test
tanmlamak istediimizi varsayalm. Bu i iin, programn en sonuna u kodu ekliyoruz:
*&---------------------------------------------------------------------*& U N I T
T E S T
*&---------------------------------------------------------------------*&-----------------------------*& Unit Test snf tanm
*&-----------------------------CLASS lcl_test DEFINITION FOR TESTING. "#AU Risk_Level Harmless
PRIVATE SECTION.
METHODS:
check_company_codes FOR TESTING.
ENDCLASS.
"lcl_test DEFINITION
*&-----------------------------*& Unit Test snf uygulamas
*&-----------------------------CLASS lcl_test IMPLEMENTATION.
*&---------*& irket kodu kontrol
*&---------METHOD check_company_codes.
DATA:
lt_t001 TYPE STANDARD TABLE OF t001,
lf_t001 LIKE LINE OF lt_t001,
lv_count TYPE i,
lv_fail(1).
*

irket kodlarn ekelim


PERFORM get_t001 TABLES lt_t001.

Sistemde en az bir irket kodu mevcut olmal


DESCRIBE TABLE lt_t001 LINES lv_count.
CALL METHOD cl_aunit_assert=>assert_differs
EXPORTING
exp
= 0
act
= lv_count
msg
= 'Sistemde hi irket kodu yok'
RECEIVING
assertion_failed = lv_fail.
CHECK lv_fail IS INITIAL.
ENDMETHOD.

"check_company_codes

ENDCLASS.

"lcl_test IMPLEMENTATION


Eklediimiz kodu analiz edecek olursak;

nce lcl_test diye bir test snf tanmladk. Bunu dier snflardan, ...for testing ekiyle
ayryoruz.
Bu snf ierisinde check_company_codes diye bir test Methodu atk. Her bir Unit Test iin
ayr ayr Methodlar amak iyi bir fikir olacaktr.
Snfn Implementasyon ksmndaki CHECK_COMPANY_CODES ierisinde;
o get_t001 formunu ararak irket kodlarnn listesini elde ettik
o CL_AUNIT_ASSERT snf ierisindeki ASSERT_DIFFERS Methodunu ararak,
lv_countun mutlaka 0dan farkl olmas gerektiini ifade ettik.

Kodun bu halinde; eer get_t001 sonrasnda en az bir irket kodu dnyorsa program hata
retmeyecektir. Aksi takdirde, hata retecektir.
Programmz Unit Testlerden geirmek iin, Program Deneme Modl Denemesi mensn
altryoruz. Sistemde en az bir irket kodu mevcut olduu iin, Unit Testlerin baaryla
sonulandna dair bir mesaj alacaz.

imdi, bir de Unit Testlerin nasl hata rettiini grmek iin, kasten hata retecek bir kontrol daha
ekleyelim. Bu kontrolde, T001 tablosunda mutlaka 1234 diye bir irket kodu olmasn art
koacaz. Yeni eklenen ksm iaretlenmitir:
*&---------------------------------------------------------------------*& U N I T
T E S T
*&---------------------------------------------------------------------*&-----------------------------*& Unit Test snf tanm
*&-----------------------------CLASS lcl_test DEFINITION FOR TESTING. "#AU Risk_Level Harmless
PRIVATE SECTION.
METHODS:
check_company_codes FOR TESTING.
ENDCLASS.
"lcl_test DEFINITION
*&-----------------------------*& Unit Test snf uygulamas
*&-----------------------------CLASS lcl_test IMPLEMENTATION.
*&---------*& irket kodu kontrol
*&---------METHOD check_company_codes.
DATA:
lt_t001 TYPE STANDARD TABLE OF t001,
lf_t001 LIKE LINE OF lt_t001,
lv_count TYPE i,
lv_fail(1).
*

irket kodlarn ekelim


PERFORM get_t001 TABLES lt_t001.

Sistemde en az bir irket kodu mevcut olmal

6.0 ABAP Yenilikleri 1


3


DESCRIBE TABLE lt_t001 LINES lv_count.
CALL METHOD cl_aunit_assert=>assert_differs
EXPORTING
exp
= 0
act
= lv_count
msg
= 'Sistemde hi irket kodu yok'
RECEIVING
assertion_failed = lv_fail.
CHECK lv_fail IS INITIAL.
*

Sistemde '1234' irket kodu mevcut olmal


READ TABLE lt_t001 INTO lf_t001 WITH KEY bukrs = '1234'.
CALL METHOD cl_aunit_assert=>assert_initial
EXPORTING
act
= sy-subrc
msg
= 'Sistemde 1234 irket kodu mevcut deil'
RECEIVING
assertion_failed = lv_fail.
ENDMETHOD.

ENDCLASS.

"check_company_codes
"lcl_test IMPLEMENTATION


Kasten hata retsin diye eklediimiz bu blm varken Program Deneme Modl Denemesi
mensn altrdmzda, Unit Testlerin baarsz olduunu gsteren bir ekranla karlayoruz.

nemli Noktalar
Unit Testlerle ilgili nemli noktalar unlardr.
Yaplabilecek Kontroller
Unit Test ierisinde yaplabilecek olan kontroller, SE24 ilem kodunda CL_AUNIT_ASSERT snfnda
grlebilir:
ASSERT_BOUND
Ensure the validity of the reference of a reference variable
ASSERT_CHAR_CP Ensure that character string fits template
ASSERT_CHAR_NP Ensure that character string fits template
ASSERT_DIFFERS Esnure difference between two (elementary) data objects
ASSERT_EQUALS Ensure equality of two data objects
ASSERT_EQUALS_F
Save Approximate Consistency of Two Floating Point Numbers
ASSERT_INITIAL Ensure that object has its initial value
ASSERT_NOT_BOUND
Ensure invalidity of the reference of a reference variable
ASSERT_NOT_INITIAL
Ensure that object does NOT have its initial value
ASSERT_SUBRC
Request specific value of return code subrc

Programn almas
Unit Testlerin programn normal almasna hibir etkisi yoktur. Program, bu test snflarn
grmezden gelir. Unit Test, ancak Program Deneme Modl Denemesi mens ile altrlrsa
ilem yapar.
Modler Yap htiyac
Unit Test mantnn dzgn almas iin, programn modler yazlm olmas gerekmektedir. Tek bir
Form ierisinde 4-5 farkl i yaplyorsa, bu formu test etmek zor olacaktr.
Ayn kapsamda; Formlar global deikenler zerinde ilem yapyorsa, Formlarn birer Unit olarak
deerlendirilerek test edilmesi zor olabilir. Bu yzden, deikenlere dorudan mdahele etmek
yerine Exporting / Changing / Tables parametrelerini kullanmalar daha dorudur. Yukardaki rnekte;
get_t001 Formu ierisinde gt_t001 deikenine dorudan veri yazmak yerine verimizi Tables
ierisinde dndrmenin Unit Testi nasl olumlu etkilediine dikkat edin. 15-20 Formdan oluan
kark bir programda sadece global deikenler zerinde ilem yaplyor olsa, bu Formlar birbirinden
bamsz bir ekilde ayr ayr test etmek mmkn olmaz.
Method oklama
Her bir Unit Test iin ayr bir Method amak iyi bir fikir olacaktr. Ayn Form ierisinde 3-4 farkl ilem
yapmak nasl sakncal ise, ayn Unit Test Method ierisinde 3-4 farkl test yapmak da ayn ekilde
sakncaldr.

Enhancement
Enhancement Nedir?
Enhancement, SAPnin koda mdaheleyi (Repair) daha standart bir hale getirmek iin rettii bir
zelliktir. Her bir Formun, Methodun ve Functionun en bana ve en sonuna Enhancement yapabilir
ve kendi kodlarmz ekleyebiliriz. Bu durum; hem standart programlar, hem de Zli programlar iin
geerlidir. Enhancement ile yaplan deiiklikler, Patch / Upgrade srasnda ezilmez, sadece deaktive
edilir.
Aada, bir program ierisinde Enhancement yaplabilecek yerler grlebilir:

6.0 ABAP Yenilikleri 1


5

Enhancement Pointin yan sra, Enhancement Section kavramn da tanyalm:



Aada Enhancement yaplm rnek bir Form grebilirsiniz:

Enhancement Yapma rnei


Fonksiyona SE37den girip, Enhance dmesine tklyoruz.


Edit Enhancement Operations Show Implicit Enhancement Options dmesine tklyoruz. Bunu
yaptmzda, fonksiyonun banda ve sonunda Enhancement yaplabilecek yerler grntlenecektir.

6.0 ABAP Yenilikleri 1


7


Bo blgelerden birini seip Edit Enhancement Options Create Enhancement mensne
tklyoruz.


Bu ilemlerden sonra, fonksiyonun sonunda kod yazabileceimiz alan alacaktr.

Memory Inspector
Bu ara sayesinde, programlarnzn hafza tketimini kontrol edebilirsiniz.
Aada, Memory Inspectora kayt atan rnek bir kod grebilirsiniz:
* Deikenleri dolduralm + Memory Snapshot 1
SELECT * INTO TABLE lt_t001 FROM t001.
lv_test = 'KEREM'.
CALL METHOD cl_abap_memory_utilities=>write_memory_consumption_file
receiving
rc
= lv_rc.
* Deiiklik yapalm + Memory Snapshot 2
lv_test = 'KEREM2'.
CALL METHOD cl_abap_memory_utilities=>write_memory_consumption_file
receiving
rc
= lv_rc.


Bu ilem sonucunda oluan Memory Snapshot Loglarn S_MEMORY_INSPECTOR ilem kodunda
grebilirsiniz.

6.0 ABAP Yenilikleri 1


9


Ayn ilem kodunda; programn farkl noktalarnda alnm Snapshotlar karlatrmak da
mmkndr:

Try...Catch
Genel Kullanm
Java ve .NET programclarnn aina olduu Try...Catch komutu, artk ABAP ierisinde de
kullanlabiliyor. zetle; her bir ABAP komutunun trettii baz Exceptionlar bulunmaktadr. Bu
Exceptionlar ortaya ktnda, programmz bir Short Dump ile krlmaktadr.
Mesela; bir tutar alanna ok byk bir deer gelmesi durumunda Overflow, sfra blme
durumunda Division By Zero, alfanumerik bir malzeme kodunu Unpack yapmaya altmzda
Convert No Number eklinde bir Short Dump mesaj alrz ve programn ak durur.
Try...Catch bloklar, bu tarz hatalar Short Dump olmadan yakalamamza imkan tanmaktadr. Aada,
Syntax mantn grebilirsiniz:


Aada rnek bir kullanm ekli grlebilir:

6.0 ABAP Yenilikleri 2


1


Dikkat ederseniz; Try komutundan sonra Exception (yani Short Dump) retebilecek kodlar yazlyor.
Sonrasnda; aradaki kodun retebileceinden endie edilen Exception, Catch ile yakalanyor ve Catch
sonrasnda hataya dair program ne yapabilirse o yaplyor.
Bir Try...Endtry arasnda birden fazla Catch komutu kullanlabilir.

Exceptionlarn Bulunmas
Hangi komutun hangi Exceptionlar verebilecei, ABAP Helptan baklabilir. rnein; Unpack
komutunun retebilecei Exceptionlar grmek iin, SE38de kodun iindeyken Unpack komutunu
iaretleyip ve F1e basn. Alan yardm sayfasnn en sonunda, yakalanabilecek Exceptionlarn listesi
yer alacaktr.


Bu bilgi dorultusunda; rnek bir Unpack kullanm yle olabilir:
Try.
Unpack lv_matnr to lv_matnr_txt.
Catch cx_sy_conversion_no_number.
Write: Malzeme kodu alfanumerik deilmi, Unpacke gerek yok.
Endtry.


Toplama ve karma gibi matematik ilemlerinde ortaya kabilecek Exceptionlar iin Compute
komutunun yardmna bakabilirsiniz.

Sk Kullanlanlar
Try...Catchin sk kullanlma alanlarna, u durumlar rnek verilebilir:

Pack / Unpack ile saysal veya alfanumerik olabilecek bir alanda ilem yapma
Overflow kontrol (alana ok byk bir deer gelmesi)
Blme ileminde paydada sfr olma riski

Regular Expressions (REGEX)


Kullanm ekli
Stringler zerinde Find ve Replace komutlarn kullananlarn ilerini kolaylatrmak iin, 6.0 itibariyle
ABAPa Regular Expressions (REGEX) destei getirilmitir. Regexin ne olduunu anlatmann en kolay
yolunun rnekleri incelemek olduunu dnyorum.

6.0 ABAP Yenilikleri 2


3



Bu rnekteki FIND satrna dikkat edin. Bu satr; u anlama gelmektedir: Names deikeninde Bert
veya Burt geiyor mu? Keli parantez sayesinde e ve u karakterlerinin birbirine alternatif olarak
ifade edildiine dikkat edin.


Yukardaki rneklerde; a karakterinden nce herhangi bir karakter olsun, ve sonrasnda en az bir t
karakteri olsun koulu aranmaktadr.


Bu rnekte, Regexlerin hem Find hem de Replace komutuyla birlikte kullanlabildiini gryoruz.

Regex Listesi
Kullanlabilecek olan Regular Expressionlarn listesi, aadaki tabloda grlebilir.

6.0 ABAP Yenilikleri 2


5


Repetionlarn detayl rnekleri ise yledir:

XML Transformation
ABAP ile XML dosyalarn Parse etmek veya Internal Tablelar XMLe evirmek, 6.0 ile ok kolay bir
hale geldi. Bu ekilde; Web Service zerinden veya File Systemda yer alan bir XML dosyas okumamz
veya yazmamz gerektiinde, Looplar ierisinde karmak String ilemleri yapmak yerine bu ii
Kernela ykabiliriz.


Bu i iin; XSLT_TOOL ilem kodunda bir Transformation tanmlyoruz. Transformation ile, XML
dosyasnn formatn sisteme tantm oluyoruz.
Bu tanmlamadan sonra, Call Transformation komutu ile ham veriyi XMLe, ya da XML formatndaki
veriyi ham veriye evirebiliriz.
Bu srecin Data XML ynndeki rnei, aadaki emada grlebilir:


Buradaki Transformation Taglerini elle yazmaya gerek yoktur. XLST_TOOL ilem kodunda, hazr bir
Structuredan Transformation Tagleri tretilebilir. XML formatnda olabilecek Nested yaplara
karlk, Structure ierisinde Nested Table Typelar kullanlabilir.

6.0 ABAP Yenilikleri 2


7


Aadaki rnekte; T001 tablosunu birebir XML Parsing yapmak istiyoruz diyelim. XLST_TOOL
ierisinde, T001 Structurena kyasla bir Transformation yaratyoruz.

Grdnz gibi, ilgili Tagleri kendisi oluturuyor:


Aada, Nested tablo ieren bir XML yaps iin rnek bir Transformation kodu incelenebilir. LT_XML
tablosunun her bir satrnda Customer diye bir alt Structure olduuna; bu Structureda da Action,
Access ve Key1 diye 3 farkl Structure krlm olduuna dikkat edin.
* Musteri verilerinin XML tablosuna aktarm
LOOP AT lt_musteri.
CLEAR lt_xml.
lt_xml-customer-action = 'UPDATE_INSERT'.
PACK lt_musteri-kunnr TO lt_xml-customer-access-kunden_nummer.
SHIFT lt_xml-customer-access-kunden_nummer LEFT DELETING LEADING space.

lt_xml-customer-access-suchname = lt_musteri-name1.
lt_xml-customer-access-companyaddress = lt_musteri-name2.
lt_xml-customer-access-companycity = lt_musteri-ort01.
PACK lt_musteri-vkbur TO lt_xml-customer-access-state.
SHIFT lt_xml-customer-access-state LEFT DELETING LEADING space.
CONCATENATE
lt_xml-customer-access-state
` - `
lt_musteri-vkbez
INTO lt_xml-customer-access-state.
CONCATENATE
lt_musteri-brsch
` - `
lt_musteri-brtxt
INTO lt_xml-customer-access-companymainzip.
PACK lt_musteri-parnr TO lt_xml-customer-access-txtcontactname.
SHIFT lt_xml-customer-access-txtcontactname LEFT DELETING LEADING: space, '0'.
CONCATENATE
lt_xml-customer-access-txtcontactname
` - `
lt_musteri-pnamv
` `
lt_musteri-pnam1
INTO lt_xml-customer-access-txtcontactname.
lt_xml-customer-access-txtcontacttelephone = lt_musteri-ptelf.
lt_xml-customer-access-salesoffice = gf_08-fssal.

PACK lt_musteri-pernr_y2 TO lt_xml-customer-access-salesgroup.


SHIFT lt_xml-customer-access-salesgroup LEFT DELETING LEADING space.
CONCATENATE
lt_musteri-vorna_y2
` `
lt_musteri-nachn_y2
INTO lt_xml-customer-access-tsrvan.
lt_xml-customer-key1-kunden_nummer = lt_xml-customer-access-kunden_nummer.
APPEND lt_xml.
ENDLOOP.
* XML donusumu
CALL TRANSFORMATION zfss_customer_out
SOURCE fsscustomermsgtype = lt_xml[]
RESULT XML lv_xml.

Bu rnein XML grnts yle olacaktr:


<xml>
<customers>
<customer>
<action> ...</action>
<access>
<kunden_nummer> ... </kunden_nummer>
<suchname> ... </suchname>
<company_address> ... </company_address>
...
</access>
<key1>
<kunden_nummer> ... </kunden_nummer>
</key1>
</customer>

6.0 ABAP Yenilikleri 2


9

<customer>
<action> ...</action>
<access>
<kunden_nummer> ... </kunden_nummer>
<suchname> ... </suchname>
<company_address> ... </company_address>
...
</access>
<key1>
<kunden_nummer> ... </kunden_nummer>
</key1>
</customer>
...
</customers>
</xml>


XML ITAB eklindeki bir dnmn rnek kodu ise yledir:
PERFORM upload_xstring USING gt_in-path CHANGING lv_xml.
CALL TRANSFORMATION zfss_equipment_in
SOURCE XML lv_xml
RESULT fssequichangemsgtype = lt_equi[].

Dier ABAP Yenilikleri


zel bir balk amaya deecek kadar byk olmayan dier yenilikler, unlardr.

Literal Yerine Variable Kullanm

Dinamik Internal Table Tanmlama

You might also like