abap 6.0 yenilikler

30
Dr. Kerem Köseoğlu Tesuji Consulting 2/19/2009 6.0 ABAP Yenilikleri

Upload: dr-kerem-koseoglu

Post on 06-Nov-2015

75 views

Category:

Documents


3 download

DESCRIPTION

6.0 ile birlikte gelen ABAP yeniliklerini bu dokümanda örnekleriyle birlikte görebilirsiniz.

TRANSCRIPT

  • Dr. Kerem Kseolu

    Tesuji Consulting

    2/19/2009

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

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

    *&---------------------------------------------------------------------* *& 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 13

    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. "check_company_codes ENDCLASS. "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 15

    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 17

    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 19

    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 21

    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 23

    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 25

    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 27

    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:

    ...

    ... ... ... ...

    ...

  • 6.0 ABAP Yenilikleri 29

    ...

    ... ... ... ...

    ... ...

    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