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…