1: method WDDOINIT .
2: DATA:
3: lr_current_node type ref to if_wd_context_node,
4: lr_current_element type ref to if_wd_context_element.
5:
6: lr_current_node = wd_context->get_child_node( 'ROOT' ).
7: lr_current_element = lr_current_node->get_lead_selection( ).
8: create_node(
9: exporting
10: cur_element = lr_current_element
11:
12: node_name = 'PARENT').
13: endmethod.
14:
15: method CREATE_NODE .
16: DATA:
17: lr_cur_node type ref to if_wd_context_node.
18:
19: * create the new node by requesting it as a child node
20: lr_cur_node = cur_element->get_child_node( node_name ).
21:
22: * create its elements
23: create_element(
24: exporting
25: cur_element = cur_element
26: cur_node = lr_cur_node
27: node_name = node_name ).
28: endmethod.
29:
30: method CREATE_ELEMENT .
31: DATA:
32: ls_parent TYPE wd_this->element_parent,
33: wa_parent TYPE wd_this->element_parent,
34: itab_parent TYPE TABLE OF wd_this->element_parent,
35: lr_cur_element TYPE REF TO if_wd_context_element,
36: loop_counter TYPE i.
37:
38: ****************************************************************************
39: * Add code to select data from hierarchy and text data into itab_parent
40: ****************************************************************************
41:
42: SORT itab_parent BY PARENT_ID.
43:
44: IF NODE_NAME = 'PARENT'.
45: " Set Root Node
46: READ TABLE itab_parent
47: INTO ls_parent
48: WITH KEY NAME = [root node name].
49:
50: lr_cur_element = cur_node->create_element( ).
51: lr_cur_element->set_attribute( name = 'NAME' value = ls_parent-NAME ).
52: lr_cur_element->set_attribute( name = 'DESCRIPTION' value = ls_parent-description ).
53: lr_cur_element->set_attribute( name = 'ID' value = ls_parent-ID ).
54: lr_cur_element->set_attribute( name = 'HAS_CHILDREN' value = abap_true ).
55: cur_node->bind_element( new_item = lr_cur_element set_initial_elements = abap_false ).
56: ELSE.
57: " Set CHILD Node
58: CUR_ELEMENT->get_static_attributes(
59: IMPORTING
60: static_attributes = ls_parent ).
61:
62: loop_counter = 0.
63:
64: LOOP AT itab_parent INTO wa_parent
65: WHERE PARENT_ID = ls_parent-ID.
66:
67: " Determine if node has children
68: READ TABLE itab_parent
69: TRANSPORTING NO FIELDS
70: WITH KEY PARENT_ID = wa_parent-ID BINARY SEARCH.
71:
72: IF SY-SUBRC = 0.
73: wa_parent-has_children = abap_true.
74: ELSE.
75: wa_parent-has_children = abap_false.
76: ENDIF.
77:
78: lr_cur_element = cur_node->create_element( ).
79: lr_cur_element->set_attribute( name = 'NAME' value = wa_parent-name ).
80: lr_cur_element->set_attribute( name = 'DESCRIPTION' value = wa_parent-description ).
81: lr_cur_element->set_attribute( name = 'ID' value = wa_parent-id ).
82: lr_cur_element->set_attribute( name = 'HAS_CHILDREN' value = wa_parent-has_children ).
83:
84: " Only set the initial element on first child
85: IF loop_counter = 0.
86: cur_node->bind_element( new_item = lr_cur_element set_initial_elements = abap_true ).
87: ELSE.
88: cur_node->bind_element( new_item = lr_cur_element set_initial_elements = abap_false ).
89: ENDIF.
90:
91: loop_counter = loop_counter + 1.
92: ENDLOOP.
93: ENDIF.
94: endmethod.