Спасибо за ответы!
Сейчас распишу поподробнее.
У меня есть драг энд дроп из алв-грида в дерево.
При первом перетаскивании появляется новый нод и айтем, в котором стоит едиинчка.
Затем, если я еще раз перетащу туда, то нод этот останется, но только текст айтема изменится - станет двойкой.
И т.д.
Таким образом, если я первый раз перетаскиваю строку в дерево, то создается нод и айтем.
Если второй раз, то меняется только айтем.
Я, вообще говоря, не смог догадаться и найти, как проверить, существует ли в дереве нод с определенный ИД.
Поэтому что я решил делать:
Сразу пытаюсь изменить текст с помощью выше упомянутого метода.
Если он выдает эксепшн двойку, то я создаю новый нод и айтем.
А если эксепшена нет, то текст айтема успешно обновляется и все.
Но эксепшн не выдается (
Code:
gr_list_tree->item_set_text(
EXPORTING
node_key = ev_new_node_key
item_name = '2'
text = lv_menge_text
EXCEPTIONS
failed = 1
node_not_found = 2
item_not_found = 3
cntl_system_error = 4
OTHERS = 5 ).
CASE sy-subrc.
WHEN 2.
"create node and add item
APPEND INITIAL LINE TO lt_nodes ASSIGNING <ls_node>.
<ls_node>-node_key = ev_new_node_key.
<ls_node>-relatkey = iv_parent_node_key.
<ls_node>-relatship = cl_gui_column_tree=>relat_last_child.
<ls_node>-isfolder = abap_false.
<ls_node>-dragdropid = space.
APPEND INITIAL LINE TO lt_items ASSIGNING <ls_item>.
<ls_item>-node_key = ev_new_node_key.
<ls_item>-item_name = '1'. "ONLY NUMBERS!
<ls_item>-class = cl_gui_column_tree=>item_class_text.
<ls_item>-alignment = cl_gui_list_tree=>align_auto.
<ls_item>-font = cl_gui_list_tree=>item_font_prop.
<ls_item>-text = iv_node_text.
APPEND INITIAL LINE TO lt_items ASSIGNING <ls_item>.
<ls_item>-node_key = ev_new_node_key.
<ls_item>-item_name = '2'. "ONLY NUMBERS!
<ls_item>-class = cl_gui_column_tree=>item_class_text.
<ls_item>-alignment = cl_gui_list_tree=>align_auto.
<ls_item>-font = cl_gui_list_tree=>item_font_prop.
<ls_item>-text = lv_menge_text.
CALL METHOD gr_list_tree->add_nodes_and_items
EXPORTING
node_table = lt_nodes
item_table = lt_items
item_table_structure_name = space"WHAT IS IT FOR????
EXCEPTIONS
failed = 1
cntl_system_error = 2
error_in_tables = 3
dp_error = 4
table_structure_name_not_found = 5
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE 'Error building right tree' TYPE 'E'.
ENDIF.
WHEN 1 OR 3 OR 4 OR 5.
MESSAGE 'Error adding node' TYPE 'E'.
ENDCASE.
А вот место дамба:
Code:
2 METHOD FLUSH .
3 * ...
4 data: rc like sy-subrc, msgli like sy-msgli.
5
6 CALL FUNCTION 'AC_FLUSH_CALL'
7 EXPORTING
8 SYSTEM_FLUSH = ' '
9 IMPORTING
10 MESSAGE_NR = rc
11 MESSAGE_TEXT = msgli.
12
13 sy-subrc = rc.
14 sy-msgli = msgli.
15
16 CASE SY-SUBRC.
17 WHEN 0.
18 WHEN 1.
19 * system_error
20 MESSAGE ID 'CNDP' TYPE 'X' NUMBER 007 RAISING CNTL_SYSTEM_ERROR.
21 WHEN 2.
22 * method_call_error
>>>>> MESSAGE ID 'CNDP' TYPE 'X' NUMBER 006 RAISING CNTL_ERROR.
24 WHEN 3.
25 * property_set_error
26 MESSAGE ID 'CNDP' TYPE 'X' NUMBER 006 RAISING CNTL_ERROR.
27 WHEN 4.
28 * property_get_error
29 MESSAGE ID 'CNDP' TYPE 'X' NUMBER 006 RAISING CNTL_ERROR.
30 WHEN OTHERS.
31 RAISE CNTL_ERROR.
32 ENDCASE.
33 ENDMETHOD.