ALV Telefon Rehberi Uygulaması (sap-abap)

ALV Telefon Rehberi Uygulaması ( Sap – Abap ) :

&---------------------------------------------------------------------*
 *& Report  ZALVREHBER
 *&
 *&---------------------------------------------------------------------*
 *&
 *&
 *&---------------------------------------------------------------------*
 
 REPORT  ZALVREHBER.
 
 TABLES ZTREHBER.
 
 data:
       g_alv type ref to cl_gui_alv_grid,
       g_cust type ref to cl_gui_custom_container,
       gt_ztrehber type standard table of ztrehber,
       gt_fcat type lvc_t_fcat,
       gs_fcat type lvc_s_fcat,
       TELID(3TYPE C,
       ADI(15TYPE C,
       SOYADI(15TYPE C,
       ADRES(35TYPE C,
       TELEFON(11TYPE C.
 
 start-of-selection.
   set screen 0100.
 
 
 *&---------------------------------------------------------------------*
 *&      Form  load_data
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 form load_data.
 
   select from ztrehber
     into corresponding fields of table gt_ztrehber
     up to 10 rows.
 
 endform.                    "
 
 *&---------------------------------------------------------------------*
 *&      Form  prepare_fcat
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 form prepare_fcat.
 
   define add_fcat.
     clear gs_fcat.
     gs_fcat-col_pos      &1.
     gs_fcat-fieldname    &2.
     gs_fcat-coltext      &3.
     gs_fcat-outputlen    &4.
     append gs_fcat to gt_fcat.
   end-of-definition.
 
   add_fcat:
   'TELID'   'Rehber Sırası' 3,
   'ADI'     'Adı'          15,
   'SOYADI'  'Soyadı'       15,
   'ADRES'   'Adres'        35,
   'TELEFON' 'Telefon'      11.
 
 endform.                    "prepare_fcat
 
 
 
 *&---------------------------------------------------------------------*
 *&      Module  STATUS_0300  OUTPUT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 MODULE STATUS_0300 OUTPUT.
 
   set pf-status '0300'.
 
   if g_cust is initial.
 
     create object g_cust
       EXPORTING
         container_name
         ='CCONTROL'
       EXCEPTIONS
         cntl_error                  1
         cntl_system_error           2
         create_error                3
         lifetime_error              4
         lifetime_dynpro_dynpro_link 5
         others                      6.
 
     if sy-subrc <> 0.
       message id sy-msgid type sy-msgty number sy-msgno
               with sy-msgv1 sy-msgv2 sy-msgv4.
     endif.
 
     create object g_alv
       EXPORTING
         i_parent          g_cust
       EXCEPTIONS
         error_cntl_create 1
         error_cntl_init   2
         error_cntl_link   3
         error_dp_create   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.
 
     perform load_data.
     perform prepare_fcat.
 
     call method g_alv->set_table_for_first_display
       CHANGING
         it_outtab                     gt_ztrehber
         it_fieldcatalog               gt_fcat
       EXCEPTIONS
         invalid_parameter_combination 1
         program_error                 2
         too_many_lines                3
         others                        4.
     if sy-subrc <> 0.
       message id sy-msgid type sy-msgty number sy-msgno
               with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
     endif.
 
   endif.
 
 ENDMODULE.                 " STATUS_0300  OUTPUT
 *&---------------------------------------------------------------------*
 *&      Module  USER_COMMAND_0300  INPUT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 MODULE USER_COMMAND_0300 INPUT.
 
   case sy-ucomm.
     when 'BACK'.
       leave to screen 0.
     when 'EXIT'.
       leave program.
     when 'ANASAYFA'.
       call screen 0100.
   endcase.
 
 ENDMODULE.                 " USER_COMMAND_0300  INPUT
 *&---------------------------------------------------------------------*
 *&      Module  STATUS_0200  OUTPUT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 MODULE STATUS_0200 OUTPUT.
   SET PF-STATUS '0200'.
   SET TITLEBAR '0200'.
 
 
 
 ENDMODULE.                 " STATUS_0200  OUTPUT
 *&---------------------------------------------------------------------*
 *&      Module  USER_COMMAND_0200  INPUT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 MODULE USER_COMMAND_0200 INPUT.
 
   case sy-ucomm.
     when 'BACK'.
       leave to screen 0.
     when 'EXIT'.
       leave program.
     when 'KEKLE'.
       perform KEKLE.
     when 'KDUZENLE'.
       perform KDUZENLE.
     when 'KSIL'.
       perform KSIL.
     when 'ANASAYFA'.
       call screen 0100.
   endcase.
 
 ENDMODULE.                 " USER_COMMAND_0200  INPUT
 *&---------------------------------------------------------------------*
 *&      Module  STATUS_0100  OUTPUT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 MODULE STATUS_0100 OUTPUT.
   SET PF-STATUS '0100'.
   SET TITLEBAR '0100'.
 
 ENDMODULE.                 " STATUS_0100  OUTPUT
 *&---------------------------------------------------------------------*
 *&      Module  USER_COMMAND_0100  INPUT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 MODULE USER_COMMAND_0100 INPUT.
 
   case sy-ucomm.
     when 'BACK'.
       leave to screen 0.
     when 'EXIT'.
       leave program.
     when 'KEKLE'.
       CALL SCREEN 0200.
     When 'KLISTELE'.
       CALL SCREEN 0300.
 
   endcase.
 
 ENDMODULE.                 " USER_COMMAND_0100  INPUT
 *&---------------------------------------------------------------------*
 *&      Form  KEKLE
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  
 *----------------------------------------------------------------------*
 FORM KEKLE .
 
   ZTREHBER-TELID    TELID.
   ZTREHBER-ADI      ADI.
   ZTREHBER-SOYADI   SOYADI.
   ZTREHBER-ADRES    ADRES.
   ZTREHBER-TELEFON  TELEFON.
 
   INSERT ZTREHBER.
   IF SY-SUBRC 0.
     MESSAGE 'Yeni kayıt eklendi.' type 'I'.
     CLEAR :TELID,ADI,SOYADIADRES,TELEFON.
   ENDIF.
 
 ENDFORM.                    " KEKLE
 *&---------------------------------------------------------------------*
 *&      Form  KDUZENLE
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  
 *----------------------------------------------------------------------*
 FORM KDUZENLE .
 
   UPDATE ZTREHBER SET ADI ADI SOYADI SOYADI ADRES ADRES TELEFON TELEFON WHERE TELID TELID.
 
   IF SY-SUBRC 0.
     MESSAGE 'Kayıt Güncellendi.' type 'I'.
     CLEAR :TELID,ADI,SOYADIADRES,TELEFON.
   ENDIF.
 
 ENDFORM.                    " KDUZENLE
 *&---------------------------------------------------------------------*
 *&      Form  KSIL
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  
 *----------------------------------------------------------------------*
 FORM KSIL .
 
   DELETE FROM ZTREHBER WHERE TELID TELID.
 
   IF SY-SUBRC 0.
     MESSAGE 'Kayıt Silindi.' type 'I'.
     CLEAR :TELID,ADI,SOYADIADRES,TELEFON.
   ENDIF.
 
 ENDFORM.                    " KSIL

Bu slayt gösterisi için JavaScript gerekir.

ALV / GUI Status (sap-abap)

 

♦ ALV / GUI Status Oluşturma :

GUI Status ile oluşturduğumuz Screen lerin üst kısmında bulunan butonlara Back, Exit gibi fonksiyonlar ekleyebiliriz.

‘zscreens’ programımıza sağ tıklayıp Create > GUI Status u seçiyoruz.
Veya ‘SE41’ işlem komutu ile gui status u oluşturabiliriz.

89

90

Bağlı olduğu programı, ismini ve kısa açıklamayı girip onaylıyoruz.

91

İşlev tuşlarına gelip Back  – Exit – Exit  giriyoruz. Kayıt edip Aktif hale getiriyoruz.

92

Programın kod kısmına gelip daha önce oluşturduğumuz Screen in Input kısmına geliyoruz.
Program çalıştıktan sonra gerçekleşecek tüm eylemleri buraya tanımlıyoruz.

Sy-ucomm ile kullanıcıdan gelen değeri yani hangi button u seçtiğinin bilgisini alıyoruz ve işlem tanımlıyoruz.

MODULE USER_COMMAND_0100 INPUT.
   CASE SY-UCOMM.
     WHEN 'EXIT'.
       LEAVE PROGRAM.
     WHEN 'BACK'.
       LEAVE PROGRAM.
   ENDCASE.
 ENDMODULE

start-of-selection.
set screen ***.
kısmı ile program çalıştığında aktif olan sayfayı belirliyoruz.

REPORT  ZSCREENS.
 start-of-selection.
 set screen 0100.

Module Output kısmınıda aktif edip kayıt ediyoruz ve çalıştırıyoruz.

93

Karşımıza önceden oluşturduğumuz Screen gelmektedir. Ve yukarıda Back ve Exit button ları da GUI Status ile aktif hale gelmiştir.

ALV / Screens (sap-abap)

88

♦ ALV / Screens  Oluşturma :

Sap programlarında arayüzü Screen Painter ile hazırlamaktayız. Screen Painter ile Text, Button, listeleme için Container gibi birçok özelliği sürükle bırak yöntemi ile kendi arayüzümüzü kolaylıkla oluşturabiliriz. Burada önemli olan arayüz bileşenlerine tanımlanan isimlerdir. Program içinde rahatlıkla kullanabileceğimiz akılda kalan bir ‘FctCode’ seçmeliyiz.

Screen oluşturabilmek için önce programımızı oluşturuyoruz.

76

‘zscreens’ adında örnek bir program oluşturduk.

77

Sol kısımda ‘Repository Browser’ dan programımızın üstüne gelip Create > Screen seçeneğini seçiyoruz. Repository Browser (Nesne Listesi Görüntüsü) eğer aktif değilse
Ctrl + Shift + F5 ile görünür hale getirebiliriz.

Ayrıca Screen oluşturmak için  ‘SE51‘  işlem komutunu da kullanabiliriz.

78

Screen number için 0100 sayısını girdik. Bu bizim birinci sayfamız olduğunu göstermektetir. Screen i program içinde oluşturduğumuz için ‘zscreeen’ program ismimiz otomatik olarak gelmektedir. Fakat işlem komutu ile oluştursaydık program ismini de kendimiz girmemiz gerekecekti.

79

80

‘0100’ isimli birinci ekranımızı oluşturmuş bulunmaktayız. Arayüz düzenlemesi için ‘Layout‘ u seçiyoruz.

81

Yeni bir pencerede Screen Painter ekranı karşımıza gelmektedir. Bu pencere aktifken Sap programında işlem yapamayız.Şimdi örnek bir Text  ve Button u sürükle bırak ile oluştup isim vereceğiz.

82

Öncelikle text kısmını oluşturduk. Sağ pencereden isimlerini verdik. Ve ayrıca Icon Name kısmında açılır pencere ile bir icon seçtik.

83

Aynı şekilde bir button ekledik ve Kaydet (Ctrl + S) ile kaydettik.
Abap Düzenleyici sayfamıza geri dönmek için Flow Logic i seçtik.

84

PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.
 *
 PROCESS AFTER INPUT.
  MODULE USER_COMMAND_0100.

Module Status ve Module User  yorum satırılarını * kaldırarak aktif ediyoruz. Program içinde ekranımızın giriş çıkış kodlarını yazmak için aktif olan output kısmını çift tıklıyoruz.

85PBO module ün , Main Program içinde oluşmasını onaylıyoruz.

86

Kaydedip aynı işlemi PAI  (input) için de yapıyoruz.

87

88

 

Sol pencerede programımızda aktif olan modüllerimiz gözükmektedir. Ayrıca eklediğimiz her fonksiyon bu pencereye eklenecektir. Uzun ve karmaşık kodlarda buradan istediğimiz alana kolaylıkla ulaşabiliriz.

 

Ortak Kontrol Durumları / Check (sap-abap)

 

♦ Ortak Kontrol Durumları  ◊  Check :

72

REPORT  ZORNEK11.
 parameters text(20default 'c::\\\xxx\\yyy'.
 datacurrent,
       next.
 do 19 times varying current from text+0(1next text+1(1range text
             varying next    from text+1(1next text+2(1range text.
 
   check current ca ':\'.
 
   if current next.
     write'   index:'sy-index,'için   ','şu anki karakter-> ',current,'sonraki karakter-> ',next,'aynıdır.'.
   endif.
 enddo.

73

Ortak Kontrol Durumları / Continue (sap-abap)

 

♦ Ortak Kontrol Durumları  ◊  Continue :

72

REPORT  ZORNEK10.
 parameters text(20default 'c::\\\xxx\\yyy'.
 datacurrent,
       next.
 do 19 times varying current from text+0(1next text+1(1range text
             varying next    from text+1(1next text+2(1range text.
   if current na ':\'.
     continue.
   endif.
   if current next.
     write'   index:'sy-index,'için   ','şu anki karakter-> ',current,'sonraki karakter-> ',next,'aynıdır.'.
   endif.
 enddo.

73

Ortak Kontrol Durumları / While (sap-abap)

 

♦ Ortak Kontrol Durumları  ◊  While  :

70

REPORT  ZORNEK9.
 databas,
       son,
       bayrak.
 parameters text(12default '     TR     '.
 while bayrak ' '
   vary bas from text+0(1)  next text+1(1range text
   vary son from text+11(1next text+10(1range text.
   if bas ' ' and son ' '.
      bas son '*'.
   else.
      bayrak 'X'.
      endif.
   endwhile.
 writetext.

 

71

Ortak Kontrol Durumları / Varying (sap-abap)

 

♦ Ortak Kontrol Durumları  ◊  Varying :

68

REPORT  ZORNEK8.
 dataardisik   type i,
       tek       type i,
       cift      type i,
       toplam1   type i,
       toplam2   type i,
       toplam3   type i,
       begin of dizi,
         deger1 type value 1,
         deger2 type value 2,
         deger3 type value 3,
         deger4 type value 4,
         deger5 type value 5,
         deger6 type value 6,
         deger7 type value 7,
         deger8 type value 8,
         end of dizi.
 
 do times varying ardisik from dizi-deger1 next dizi-deger2
            varying tek     from dizi-deger1 next dizi-deger3
            varying cift    from dizi-deger2 next dizi-deger4.
      write/ ardisiktekcift.
      addardisik to toplam1,
           tek     to toplam2,
           cift    to toplam3.
      enddo.
 
 write'    +________   +________   +________',
       / toplam1toplam2toplam3.

 

69

Ortak Kontrol Durumları / Sy-index (sap-abap)

 

Ortak Kontrol Durumları  ◊   Sy-index  :

Döngü içinde sy-index geçerli yineleme numarasını içerir. Örneğin ilk döngü içerisinde sy-index  = 1 olacaktır. İkincisinde sy-index  = 2 olacak ve böyle devam edecektir. Endeksi bittikten sonra sy -index, döngüye girmeden önce sahip olduğu değeri içerir. İç içe do döngülerinde sy-index, içinde bulunduğu döngünün yineleme sayısını içerir.

66

REPORT  ZORNEK7.
 sy-index 77.
 write'ilk sy-index değeri ='sy-index ''.
 
 do times.
   write'döngü 2' sy-index.
   enddo.
 
 do times.
   write'döngü 3' sy-index.
   do times.
     write'döngü 4' sy-index.
     enddo.
   enddo.
 
 write ''.
 
 do 100 times.
   write'döngü 5' sy-index '/'.
   if sy-index 5.
     exit.
     endif.
   enddo.

67

 

Ortak Kontrol Durumları / Case (sap-abap)

 

♦ Ortak Kontrol Durumları  ◊  Case :

if-else ‘den farkı; gerçekleşen durum ile karşılaştırılacak tek bir değer belirtebilirsiniz. Ve değerleri daima eşitlik açısından karşılaştırabilirsiniz. İf-else daha karmaşık ifadelerde kullanılır.

Case Örneği

63

REPORT  ZORNEK5.
 write 'Birden 5 e kadar sayı giriniz.'.
 parameters sayi type default 0.
 
 case sayi.
   when 1.        write ' 1 sayısını girdiniz. '.
   when 2.        write ' 2 sayısını girdiniz. '.
   when 3.        write ' 3 sayısını girdiniz. '.
   when 4.        write ' 4 sayısını girdiniz. '.
   when 5.        write ' 5 sayısını girdiniz. '.
   when others.   write ' yanlış değer girdiniz. '.
   endcase