Professional Documents
Culture Documents
0 ABAP Yenilikleri
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
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
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.
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.
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:
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.
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
*&----------------------------------------------------------------------
*&---------------------------------------------------------------------*
*&
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).
*
"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).
*
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.
*
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:
Aada
Enhancement
yaplm
rnek
bir
Form
grebilirsiniz:
Edit
Enhancement
Operations
Show
Implicit
Enhancement
Options
dmesine
tklyoruz.
Bunu
yaptmzda,
fonksiyonun
banda
ve
sonunda
Enhancement
yaplabilecek
yerler
grntlenecektir.
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.
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:
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
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.
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.
Aadaki
rnekte;
T001
tablosunu
birebir
XML
Parsing
yapmak
istiyoruz
diyelim.
XLST_TOOL
ierisinde,
T001
Structurena
kyasla
bir
Transformation
yaratyoruz.
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.
<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[].