ALV Raporlarında ASCII Sembolleri

SAP Abap ile geliştirdiğimiz ALV raporlarının bazı alanlarında sayısal veya yazı değerleri yanı sıra ASCII olarak ifade edilen sembolleride kullanabiliriz. ASCII, American Standard Code for Information Interchange kelimelerinin kısaltılmasından oluşmaktadır. Aslında bu sembollerin amacı, ifade etmek istediğimiz bir sonucu çeşitli semboller ile kullanıcıların anlayabileceği şekilde gösterimlere çevirmektir. Bununla ilgili olarak küçük bir senaryo ile bu sembolelri ALV raporlarında nasıl gösterebileceğimize bakacağız.

Senaryo gereği ALV raporumuz Projeler ve bu Projelerin durumlarını semboller ile gösterimini gerçekleştireceğiz. Tablomuz, Proje Adı, Level 1, Level 2, Level 3 kolonlarından oluşacaktır. Level kolonları projenin durumuna göre ASCII sembolleri ile ifade edilecektir.

İlk olarak ASCI kodlarımızı bize döndürecek olan sınıfı oluşturuyoruz. Sınıfımız içerisinde yer alan GET_SYMBOLS metodu ile SAP içerisinde tanımlanmış SYM_ kodu ile başlayan ASCII sembolleri listesini döndürüyor olacağız. Geri döndüreceğimiz sembol listesinin tipi ZLRNG_TY_SYMBOLS ve bir tablo tipidir ve SYMBOL => CHAR1 ile NAME=>STRING alanlarından oluşan structure’ı referans almaktadır.

CLASS ZLRNG_CL_SYMBOLS DEFINITION
  PUBLIC
  CREATE PUBLIC .

  PUBLIC SECTION.

    CLASS-METHODS GET_SYMBOLS
      EXPORTING
        VALUE(ET_SYMBOLS)    TYPE ZLRNG_TY_SYMBOLS

  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS ZLRNG_CL_SYMBOLS IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZLRNG_CL_SYMBOLS=>GET_SYMBOLS
* +-------------------------------------------------------------------------------------------------+
* | [--->] I_SYMBOL_NAME                  TYPE        STRING(optional)
* | [<---] ET_SYMBOLS                     TYPE        ZLRNG_TY_SYMBOLS
* | [<---] E_SEL_SYMB                     TYPE        ZLRNG_S_SYMBOLS
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD GET_SYMBOLS.

    ET_SYMBOLS = VALUE #(
    ( SYMBOL = SYM_SPACE              NAME = 'SYM_SPACE             ' )
    ( SYMBOL = SYM_PLUS_BOX           NAME = 'SYM_PLUS_BOX          ' )
    ( SYMBOL = SYM_MINUS_BOX          NAME = 'SYM_MINUS_BOX         ' )
    ( SYMBOL = SYM_PLUS_CIRCLE        NAME = 'SYM_PLUS_CIRCLE       ' )
    ( SYMBOL = SYM_MINUS_CIRCLE       NAME = 'SYM_MINUS_CIRCLE      ' )
    ( SYMBOL = SYM_FILLED_SQUARE      NAME = 'SYM_FILLED_SQUARE     ' )
    ( SYMBOL = SYM_HALF_FILLED_SQUARE NAME = 'SYM_HALF_FILLED_SQUARE' )
    ( SYMBOL = SYM_SQUARE             NAME = 'SYM_SQUARE            ' )
    ( SYMBOL = SYM_FILLED_CIRCLE      NAME = 'SYM_FILLED_CIRCLE     ' )
    ( SYMBOL = SYM_HALF_FILLED_CIRCLE NAME = 'SYM_HALF_FILLED_CIRCLE' )
    ( SYMBOL = SYM_CIRCLE             NAME = 'SYM_CIRCLE            ' )
    ( SYMBOL = SYM_FILLED_DIAMOND     NAME = 'SYM_FILLED_DIAMOND    ' )
    ( SYMBOL = SYM_DIAMOND            NAME = 'SYM_DIAMOND           ' )
    ( SYMBOL = SYM_BOLD_X             NAME = 'SYM_BOLD_X            ' )
    ( SYMBOL = SYM_NOTE               NAME = 'SYM_NOTE              ' )
    ( SYMBOL = SYM_DOCUMENT           NAME = 'SYM_DOCUMENT          ' )
    ( SYMBOL = SYM_CHECKED_DOCUMENT   NAME = 'SYM_CHECKED_DOCUMENT  ' )
    ( SYMBOL = SYM_DOCUMENTS          NAME = 'SYM_DOCUMENTS         ' )
    ( SYMBOL = SYM_FOLDER             NAME = 'SYM_FOLDER            ' )
    ( SYMBOL = SYM_PLUS_FOLDER        NAME = 'SYM_PLUS_FOLDER       ' )
    ( SYMBOL = SYM_MINUS_FOLDER       NAME = 'SYM_MINUS_FOLDER      ' )
    ( SYMBOL = SYM_OPEN_FOLDER        NAME = 'SYM_OPEN_FOLDER       ' )
    ( SYMBOL = SYM_BOLD_MINUS         NAME = 'SYM_BOLD_MINUS        ' )
    ( SYMBOL = SYM_BOLD_PLUS          NAME = 'SYM_BOLD_PLUS         ' )
    ( SYMBOL = SYM_CHECKBOX           NAME = 'SYM_CHECKBOX          ' )
    ( SYMBOL = SYM_RADIOBUTTON        NAME = 'SYM_RADIOBUTTON       ' )
    ( SYMBOL = SYM_LEFT_TRIANGLE      NAME = 'SYM_LEFT_TRIANGLE     ' )
    ( SYMBOL = SYM_RIGHT_TRIANGLE     NAME = 'SYM_RIGHT_TRIANGLE    ' )
    ( SYMBOL = SYM_UP_TRIANGLE        NAME = 'SYM_UP_TRIANGLE       ' )
    ( SYMBOL = SYM_DOWN_TRIANGLE      NAME = 'SYM_DOWN_TRIANGLE     ' )
    ( SYMBOL = SYM_LEFT_HAND          NAME = 'SYM_LEFT_HAND         ' )
    ( SYMBOL = SYM_LEFT_ARROW         NAME = 'SYM_LEFT_ARROW        ' )
    ( SYMBOL = SYM_RIGHT_ARROW        NAME = 'SYM_RIGHT_ARROW       ' )
    ( SYMBOL = SYM_UP_ARROW           NAME = 'SYM_UP_ARROW          ' )
    ( SYMBOL = SYM_DOWN_ARROW         NAME = 'SYM_DOWN_ARROW        ' )
    ( SYMBOL = SYM_CHECK_MARK         NAME = 'SYM_CHECK_MARK        ' )
    ( SYMBOL = SYM_PENCIL             NAME = 'SYM_PENCIL            ' )
    ( SYMBOL = SYM_GLASSES            NAME = 'SYM_GLASSES           ' )
    ( SYMBOL = SYM_LOCKED             NAME = 'SYM_LOCKED            ' )
    ( SYMBOL = SYM_UNLOCKED           NAME = 'SYM_UNLOCKED          ' )
    ( SYMBOL = SYM_PHONE              NAME = 'SYM_PHONE             ' )
    ( SYMBOL = SYM_PRINTER            NAME = 'SYM_PRINTER           ' )
    ( SYMBOL = SYM_FAX                NAME = 'SYM_FAX               ' )
    ( SYMBOL = SYM_ASTERISK           NAME = 'SYM_ASTERISK          ' )
    ( SYMBOL = SYM_RIGHT_HAND         NAME = 'SYM_RIGHT_HAND        ' )
    ( SYMBOL = SYM_SORTED_UP          NAME = 'SYM_SORTED_UP         ' )
    ( SYMBOL = SYM_SORTED_DOWN        NAME = 'SYM_SORTED_DOWN       ' )
    ( SYMBOL = SYM_CUMULATED          NAME = 'SYM_CUMULATED         ' )
    ( SYMBOL = SYM_DELETE             NAME = 'SYM_DELETE            ' )
    ( SYMBOL = SYM_EXECUTABLE         NAME = 'SYM_EXECUTABLE        ' )
    ( SYMBOL = SYM_WORKFLOW_ITEM      NAME = 'SYM_WORKFLOW_ITEM     ' )
    ( SYMBOL = SYM_CAUTION            NAME = 'SYM_CAUTION           ' )
    ( SYMBOL = SYM_FLASH              NAME = 'SYM_FLASH             ' )
    ( SYMBOL = SYM_LARGE_SQUARE       NAME = 'SYM_LARGE_SQUARE      ' )
    ( SYMBOL = SYM_ELLIPSIS           NAME = 'SYM_ELLIPSIS          ' ) 
).

  ENDMETHOD.
ENDCLASS.

Sınıfımızı oluşturduktan sonra ALV raporumuzu yazacağımız programı oluşturabiliriz. ALV raporumuz için ekrana bastıracağımız tablo tanımlasını ve Field Catalog değerlerini doldurduktan sonra, yukarıda oluşturduğumuz sınıfı çağırarak tüm ASCII sembollerini elde ediyoruz. Daha sonra ALV tabosuna append ediyoruz. Burada dikkat edilmesi gereken en önemli nokta, Field Catalog değerlerini doldururken ASCII ile ifade edeceğimiz alanlar için SYMBOL = ABAP_TRUE olarak belirtmemiz gerekli. Aksi takdirde bu alanlara ASCII sembolleri yerine karşılığı olan klavyemizdeki standart ifadeler gözükecektir. Tüm tablo içerisinden ihtiyacımız olan sembolün adı ile alv içerisinde belirlediğimiz yere referans vererek ekrana bastırıyoruz.

REPORT ZLRNG_P_SYBMOLS.


  TYPES : BEGIN OF TY_PROJECT_GANTT,
            PROJECT_NAME(10),
            PROJECT_LEVEL_1(1),
            PROJECT_LEVEL_2(1),
            PROJECT_LEVEL_3(1),
          END OF TY_PROJECT_GANTT.

  DATA : LT_SYMBOLS TYPE ZLRNG_TY_SYMBOLS.
  DATA : LS_PROJECT_GANTT TYPE TY_PROJECT_GANTT.
  DATA : LT_PROJECT_GANTT TYPE TABLE OF TY_PROJECT_GANTT.

  DATA : FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.

  " Set Field Catalog
  FIELDCATALOG-FIELDNAME   = 'PROJECT_NAME'.
  FIELDCATALOG-SELTEXT_M   = 'Project Name'.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'PROJECT_LEVEL_1'.
  FIELDCATALOG-SELTEXT_M   = 'Level 1'.
  FIELDCATALOG-SYMBOL      = ABAP_TRUE.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'PROJECT_LEVEL_2'.
  FIELDCATALOG-SELTEXT_M   = 'Level 2'.
  FIELDCATALOG-SYMBOL      = ABAP_TRUE.   " Set Symbol for Field
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'PROJECT_LEVEL_3'.
  FIELDCATALOG-SELTEXT_M   = 'Level 3'.
  FIELDCATALOG-SYMBOL      = ABAP_TRUE. " Set Symbol for Field
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR FIELDCATALOG.


  " Get Symbols
  ZLRNG_CL_SYMBOLS=>GET_SYMBOLS(
    IMPORTING
      ET_SYMBOLS = LT_SYMBOLS ).

  " Append Project Info Table
  LS_PROJECT_GANTT-PROJECT_NAME = 'Project 1'.
  READ TABLE LT_SYMBOLS INTO DATA(LEVEL_1) WITH KEY NAME = 'SYM_FILLED_CIRCLE'.
  LS_PROJECT_GANTT-PROJECT_LEVEL_1 = LEVEL_1-SYMBOL.
  READ TABLE LT_SYMBOLS INTO DATA(LEVEL_2) WITH KEY NAME = 'SYM_HALF_FILLED_CIRCLE'.
  LS_PROJECT_GANTT-PROJECT_LEVEL_2 = LEVEL_2-SYMBOL.
  READ TABLE LT_SYMBOLS INTO DATA(LEVEL_3) WITH KEY NAME = 'SYM_CIRCLE'.
  LS_PROJECT_GANTT-PROJECT_LEVEL_3 = LEVEL_3-SYMBOL.

  APPEND LS_PROJECT_GANTT TO LT_PROJECT_GANTT.

  CLEAR : LEVEL_1 , LEVEL_2 , LEVEL_3 , LS_PROJECT_GANTT.

  LS_PROJECT_GANTT-PROJECT_NAME = 'Project 2'.
  READ TABLE LT_SYMBOLS INTO LEVEL_1 WITH KEY NAME = 'SYM_FILLED_SQUARE'.
  LS_PROJECT_GANTT-PROJECT_LEVEL_1 = LEVEL_1-SYMBOL.
  READ TABLE LT_SYMBOLS INTO LEVEL_2 WITH KEY NAME = 'SYM_HALF_FILLED_SQUARE'.
  LS_PROJECT_GANTT-PROJECT_LEVEL_2 = LEVEL_2-SYMBOL.
  READ TABLE LT_SYMBOLS INTO LEVEL_3 WITH KEY NAME = 'SYM_SQUARE'.
  LS_PROJECT_GANTT-PROJECT_LEVEL_3 = LEVEL_3-SYMBOL.

  APPEND LS_PROJECT_GANTT TO LT_PROJECT_GANTT.

  " Display Alv Report
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      IT_FIELDCAT              = FIELDCATALOG[]
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      I_SAVE                   = 'X'
    TABLES
      T_OUTTAB                 = LT_PROJECT_GANTT
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.

Ekran görüntüsü aşağıdaki gibi olacaktır.

 

Aşağıdaki listede tüm ASCII sembollerinin listesi ve isimlerini bulabilirsiniz…


Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s