SAP uygulama geliştirme sırasında ekran tasarımı ve kolaylık açısından fayda sağlayacak olan bir yapı simple tree view model…
Bu yapı sayesinde, hiyerarşik bir ağaç yapısı ile oluşturacağınız bir liste ile liste elemanlarına ait alt listeler oluşturarak, kısa ve kolay yoldan istediğiniz veriye erişim sağlayacak bir menü gibi tasarım sunmaktadır.
Örnek olarak, Üretim yerleri altında hangi malzemelerin olacağına dair bir ağaç yapısı oluşturmak istersek aşağıdaki gibi CL_SIMPLE_TREE_MODEL yapısını kullanarak gerçekleştirebiliriz.
İlk olarak module pool ekranı tasarlayarak ekran üzerine sadece bir custom container ekliyoruz. Daha sonra bu container içerisine oluşturacağımız ağaç yapısını model üzerinden ekleyeceğiz.

Ekranı oluşturduktan sonra, Process Before Ouput kısmında yer alan Module status_001 alanı içerisinde program çalıştığı ve ilgili ekran numarası çağırıldığında, ağaç yapısını oluşturup container içerisine atamasını yapacağız.

Yukarıda senaryodan bahsettiğim gibi, ZDEMO_TABLE içerisinde malzemeler ve malzemelere ait üretim yerleri listesi bulunmakta. Yani üretim yerine göre malzeme bilgisini hiyerarşik olarak ağaç yapısına giydirmemiz gerekiyor. Bunun için ilk olarak treeview model yapısını oluşturup bu yapı içerisinde NODE olarak üretim yeri ve eklenen NODE altına malzeme numarası bilgisini ekleyerek ilerleyeceğiz.
REPORT ZLRNG_P_DEMO1. CLASS CL_GUI_CFW DEFINITION LOAD. DATA: G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER, G_TREE TYPE REF TO CL_SIMPLE_TREE_MODEL, G_OK_CODE TYPE SY-UCOMM. DATA: ITEM_TABLE TYPE TREEMLITAB, ITEM TYPE TREEMLITEM. DATA: OK_CODE_CHART TYPE SY-UCOMM, FIRST_CALL TYPE I, VALUES TYPE TABLE OF GPRVAL WITH HEADER LINE, COLUMN_TEXTS TYPE TABLE OF GPRTXT WITH HEADER LINE. DATA: EVENT TYPE CNTL_SIMPLE_EVENT, EVENTS TYPE CNTL_SIMPLE_EVENTS. CALL SCREEN 0001. *&---------------------------------------------------------------------* *& Module STATUS_0001 OUTPUT *&---------------------------------------------------------------------* MODULE STATUS_0001 OUTPUT. IF G_TREE IS INITIAL. CREATE OBJECT G_TREE EXPORTING NODE_SELECTION_MODE = CL_SIMPLE_TREE_MODEL=>NODE_SEL_MODE_SINGLE EXCEPTIONS ILLEGAL_NODE_SELECTION_MODE = 1. CREATE OBJECT G_CUSTOM_CONTAINER EXPORTING CONTAINER_NAME = 'TREE_CONTAINER' EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 LIFETIME_ERROR = 4 LIFETIME_DYNPRO_DYNPRO_LINK = 5. CALL METHOD G_TREE->CREATE_TREE_CONTROL EXPORTING PARENT = G_CUSTOM_CONTAINER EXCEPTIONS LIFETIME_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 FAILED = 4 TREE_CONTROL_ALREADY_CREATED = 5. EVENT-EVENTID = CL_SIMPLE_TREE_MODEL=>EVENTID_NODE_DOUBLE_CLICK. EVENT-APPL_EVENT = ABAP_TRUE. APPEND EVENT TO EVENTS. CALL METHOD G_TREE->SET_REGISTERED_EVENTS EXPORTING EVENTS = EVENTS EXCEPTIONS ILLEGAL_EVENT_COMBINATION = 1 UNKNOWN_EVENT = 2. PERFORM ADD_NODES. CALL METHOD G_TREE->EXPAND_NODE EXPORTING NODE_KEY = 'F-WERKS' EXCEPTIONS NODE_NOT_FOUND = 1. ENDIF. ENDMODULE. FORM ADD_NODES. CALL METHOD G_TREE->ADD_NODE EXPORTING NODE_KEY = 'F-WERKS' ISFOLDER = ABAP_TRUE TEXT = 'Üretim Yerleri' EXCEPTIONS OTHERS = 1. SELECT * INTO TABLE @DATA(LT_WERKS) FROM ZDEMO_TABLE. SORT LT_WERKS BY WERKS. DELETE ADJACENT DUPLICATES FROM LT_WERKS COMPARING WERKS. DATA : LV_WERKS_KEY TYPE TM_NODEKEY, LV_WERKS_TXT TYPE TM_NODETXT. DATA : LV_MATNR_KEY TYPE TM_NODEKEY, LV_MATNR_TXT TYPE TM_NODETXT. LOOP AT LT_WERKS ASSIGNING FIELD-SYMBOL(<FS_WERKS>). CLEAR : LV_WERKS_KEY, LV_WERKS_TXT. LV_WERKS_KEY = 'F-' && <FS_WERKS>-WERKS. LV_WERKS_TXT = <FS_WERKS>-WERKS. CALL METHOD G_TREE->ADD_NODE EXPORTING NODE_KEY = LV_WERKS_KEY RELATIVE_NODE_KEY = 'F-WERKS' RELATIONSHIP = CL_SIMPLE_TREE_MODEL=>RELAT_LAST_CHILD ISFOLDER = ABAP_TRUE TEXT = LV_WERKS_TXT EXCEPTIONS OTHERS = 1. SELECT * INTO TABLE @DATA(LT_MATNR) FROM ZDEMO_TABLE WHERE WERKS EQ @<FS_WERKS>-WERKS. LOOP AT LT_MATNR ASSIGNING FIELD-SYMBOL(<FS_MATNR>). CLEAR : LV_MATNR_KEY, LV_MATNR_TXT. LV_MATNR_KEY = <FS_MATNR>-MATNR. LV_MATNR_TXT = <FS_MATNR>-MATNR. CALL METHOD G_TREE->ADD_NODE EXPORTING NODE_KEY = LV_MATNR_KEY RELATIVE_NODE_KEY = LV_WERKS_KEY RELATIONSHIP = CL_SIMPLE_TREE_MODEL=>RELAT_LAST_CHILD ISFOLDER = ABAP_FALSE TEXT = LV_MATNR_TXT EXCEPTIONS OTHERS = 1. ENDLOOP. ENDLOOP. ENDFORM.
Folder olarak eklenecek node başına F- etiketini yerleştiriyorum ki karışıklığa yol açmasın. Her bir node KEY-TEXT ilişkisine dayanmaktadır. Yani seçilen bir node, gözüken adı ne olursa olsun belirtilen bir key’e tekabül etmektedir.
Yukarıda ki kod çıktısında aşağıdaki şekilde ağaç yapısını görebilirsiniz.
