Code: Alles auswählen.
data:
* Referenzvariablen deklarieren
cc_100 type ref to cl_gui_custom_container, "Hauptuntergrund
"Untergrund für Baumstruktur
l_docking type ref to cl_gui_docking_container,
tree type ref to cl_gui_column_tree, "Baumstrukture
G_APPLICATION TYPE REF TO LCL_APPLICATION, "Klasse für Events
* Tabellen und Variablen für die Baumstruktur
node_table TYPE treev_ntab,
item_table TYPE standard table of mtreeitm,
node LIKE mtreesnode,
item TYPE mtreeitm.
create object cc_100
exporting
container_name = '100_CC_01'. "100_CC_01 = CuCtr
* Klasse mit einer Instanzmethode als Behandlermethode für ein Ereignis
* (LINK_CLICK) der Klasse (CL_GUI_COLUMN_TREE)
*---------------------------------------------------------------------*
* CLASS LCL_APPLICATION DEFINITION
*---------------------------------------------------------------------*
CLASS LCL_APPLICATION DEFINITION.
public section.
data: tmp_node_key type TV_NODEKEY,
tmp_item_name(10) type c.
methods:
HANDLE_LINK_CLICK
FOR EVENT LINK_CLICK
OF CL_GUI_COLUMN_TREE
IMPORTING NODE_KEY ITEM_NAME.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS LCL_APPLICATION IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS LCL_APPLICATION IMPLEMENTATION.
METHOD HANDLE_LINK_CLICK.
clear: tmp_node_key, tmp_item_name.
tmp_node_key = node_key.
tmp_item_name = item_name.
*Musst du noch erstellen um auf einen Event zu reagieren
*perform event_ausfuehren using tmp_node_key tmp_item_name.
ENDMETHOD.
ENDCLASS.
*Start
perform voreinstellungen.
*dann musst du die node_table und item_table füllen:
data: verladeziel_key(10) type c,
verladeziel_name(25) type c.
field-symbols: <verladeziel_icon> type any.
assign ICON_WS_TRANSPORT to <verladeziel_icon>.
verladeziel_key = 'Knoten1'.
verladeziel_name = 'Knotentext1'.
perform node_fill
using verladeziel_key "node_key
' ' "relatkey
' ' "relatship
'X' "isfolder
'X' "expander(aufreisen)
<verladeziel_icon>."n_image
perform item_fill
using verladeziel_key "node_key
'col_01' "item_name
cl_gui_column_tree=>item_class_text "class
verladeziel_name "text
' '. "image
*...weiter befüllen....
*und dann an die Baumstruktur übergeben...
CALL METHOD tree->add_nodes_and_items
EXPORTING
node_table = node_table
item_table = item_table
item_table_structure_name = 'MTREEITM'
EXCEPTIONS
FAILED = 1
CNTL_SYSTEM_ERROR = 3
ERROR_IN_TABLES = 4
DP_ERROR = 5
TABLE_STRUCTURE_NAME_NOT_FOUND = 6.
IF SY-SUBRC <> 0.
MESSAGE s001(Z1) with 'Fehler'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form voreinstellungen
*&---------------------------------------------------------------------*
* Hier werden Voreinstellungen für die Ausgabe der Baumstruktur
* vorgenommen
*----------------------------------------------------------------------*
FORM voreinstellungen.
* Überschrieft für die im Baumstrukture
data: hierarchy_header TYPE treev_hhdr.
* UNTERGRUND AUFBAUEN
* Instanz der Klasse CL_GUI_CUSTOM_CONTAINER erzeugen, wenn
* sie nicht schon erzeugt ist
if cc_100 is initial.
create object cc_100
exporting
container_name = '100_CC_01'.
endif.
* Untergrund aufteilen
* Wie beim Explorer, einen Kasten Links
* (Ist dafür nötig, damit man später die Baumstruktur auch
* zur Seite scrollen kann). Wenn mann die Baumstruktur auf den
* Hauptcontainer aufbaut, dann kann es vorkommen des man nicht alle
* Spalten der Baumstruktur sieht
create object l_docking
exporting
side = cl_gui_docking_container=>dock_at_left
extension = 1260.
* Baumstruktur in den linken Kasten definieren
* und eine Spalte (erste) erstellen
hierarchy_header-heading = 'Baum'.
hierarchy_header-width = 50.
create object tree
exporting
parent = l_docking
node_selection_mode =
cl_gui_column_tree=>node_sel_mode_single
item_selection = 'X'
hierarchy_column_name = 'col_01'
hierarchy_header = hierarchy_header.
* Spalten 2 bis 6 erstellen
perform:
Baumstrukture_spalte_erstellen using 'col_02' '10' 'INFO',
Baumstrukture_spalte_erstellen using 'col_03' '40' '',
* EVENTS REGISTRIEREN
data: G_EVENT(30),
event type cntl_simple_event,
EVENTS TYPE CNTL_SIMPLE_EVENTS.
* Link Klick
event-eventid = CL_GUI_COLUMN_TREE=>EVENTID_LINK_CLICK.
event-appl_event = 'X'.
append event to events.
CALL METHOD TREE->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = EVENTS
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
ILLEGAL_EVENT_COMBINATION = 3.
IF SY-SUBRC <> 0.
MESSAGE s001(z1) with 'Fehler'.
ENDIF.
SET HANDLER G_APPLICATION->HANDLE_LINK_CLICK FOR TREE.
ENDFORM. " voreinstellungen
*&---------------------------------------------------------------------*
*& Form node_fill
*&---------------------------------------------------------------------*
* Hier wird die Node Tabelle befüllt
* Sie enhält den bezug einer übergeordneten Zeile (P_RELATKEY)
* mit einer untergeordneten
*----------------------------------------------------------------------*
FORM node_fill using P_NODE_KEY P_RELATKEY P_RELATSHIP
P_ISFOLDER P_EXPANDER P_N_IMAGE.
CLEAR node.
node-node_key = P_NODE_KEY.
node-relatkey = P_RELATKEY. "Bezug auf übergeordneten Ordner
node-relatship = P_RELATSHIP.
node-isfolder = P_ISFOLDER.
node-expander = P_EXPANDER.
node-n_image = P_N_IMAGE. "symbol des Ordners
node-exp_image = P_N_IMAGE.
APPEND node TO node_table.
ENDFORM. " node_fill
*&---------------------------------------------------------------------*
*& Form item_fill
*&---------------------------------------------------------------------*
* Hier wird die Item Tabelle befüllt
* Sie enthält die Informationen einer Zeile
* (Spalte1, Spalte2,...)
*----------------------------------------------------------------------*
FORM item_fill USING P_node_key
p_item_name
P_class
P_item-text
p_image.
CLEAR item.
item-node_key = P_node_key. "Bezug
item-item_name = p_item_name. "Ausgabe bei welcher Spalte
item-class = P_class. "Text zeile
item-text = P_item-text.
ITEM-T_IMAGE = p_image.
APPEND item TO item_table.
ENDFORM. " item_fill