Текущее время: Ср, июл 30 2025, 20:27

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: refresh alv_tree
СообщениеДобавлено: Вт, май 27 2008, 11:41 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Вт, апр 03 2007, 05:58
Сообщения: 44
Доброго ремени суток!
Как срефрешить al_tree?
Прочитала здесь http://sapdev.co.uk/reporting/alv/alvtr ... efresh.htm, что надо сначало удалить дерево а потом заново создать, но почему то не работает... Если у кого-то получалась дайте примерчик пожалуйста.
Что не так?
LOOP AT it_topnodes INTO wa_topnodes.
CALL METHOD g_alv_tree->delete_subtree
EXPORTING
i_node_key = wa_topnodes-nodekey.
ENDLOOP.
CALL METHOD cl_gui_cfw=>flush.
CLEAR g_alv_tree.
PERFORM init_tree.
FORM init_tree.
DATA: l_tree TYPE REF TO cl_gui_alv_tree.
DATA l_hierarchy_header TYPE treev_hhdr.
DATA: l_tree_container_name(30) TYPE c,
lt_layout_item TYPE lvc_t_layi,
ls_layout TYPE lvc_s_layo.

l_tree_container_name = 'CONTAINER1'.
CREATE OBJECT g_custom_container
EXPORTING
container_name = l_tree_container_name
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
IF sy-subrc <> 0.
MESSAGE x208(00) WITH 'ERROR'(100).
ENDIF.
CREATE OBJECT g_alv_tree
EXPORTING
parent = g_custom_container
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
item_selection = 'X'
no_html_header = 'X'
no_toolbar = ''
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
illegal_node_selection_mode = 5
failed = 6
illegal_column_name = 7.
IF sy-subrc <> 0.
MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT
ENDIF.

PERFORM build_hierarchy_header CHANGING l_hierarchy_header.
PERFORM build_fieldcatalog.

ls_layout-cwidth_opt = 'X'.
ls_layout-excp_fname = 'EXCEPTION'.
ls_layout-excp_led = 'X'.
DATA: ls_variant TYPE disvariant.
ls_variant-report = sy-repid.
REFRESH t_block.
CALL METHOD g_alv_tree->set_table_for_first_display
EXPORTING
i_structure_name = 'ZBLOCK'
is_hierarchy_header = l_hierarchy_header
i_save = 'A'
is_variant = ls_variant
CHANGING
it_fieldcatalog = gt_fieldcatalog
it_outtab = t_block. "table must be empty !


CLEAR lt_layout_item.
PERFORM define_layout
CHANGING
lt_layout_item
g_alv_tree.
PERFORM get_data.
PERFORM create_hierarchy
USING lt_layout_item.
PERFORM register_events.
CALL METHOD g_alv_tree->update_calculations.

CALL METHOD g_alv_tree->frontend_update.
CALL METHOD cl_gui_cfw=>flush.

ENDFORM. " init_tree


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 27 2008, 11:56 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
При добавлении новых данных достаточно добавить нод при помощи метода ADD_NODE. При удалении нода или узла приходится вызывать DELETE_ALL_NODES, а потом пересобирать дерево заново через цикл с ADD_NODE.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 27 2008, 12:43 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
А обязательно ли делать DELETE_ALL_NODES, есть же DELETE_SUBTREE ? И пересобирать потом не неадо.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Последний раз редактировалось Lars Вт, май 27 2008, 13:55, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 27 2008, 13:05 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Вт, апр 03 2007, 05:58
Сообщения: 44
John Doe написал:
При добавлении новых данных достаточно добавить нод при помощи метода ADD_NODE. При удалении нода или узла приходится вызывать DELETE_ALL_NODES, а потом пересобирать дерево заново через цикл с ADD_NODE.

Все пропало, все дерево, хотя потом в цикле еще раз пересобираю дерево той же процедурой init_tree.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, май 27 2008, 15:16 
Директор
Директор
Аватара пользователя

Зарегистрирован:
Пн, дек 20 2004, 16:05
Сообщения: 1080
Откуда: 4.0B
Пол: Мужской
А зачем вам каждый раз создавать контейнер и дерево ? Это делается один раз.
Посмотрите пример BCALV_TREE_MOVE_NODE_TEST, там есть обновление дерева.

_________________
Я слышу и забываю,
Я вижу и помню долго,
Я делаю и — понимаю.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, май 28 2008, 06:25 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Вт, апр 03 2007, 05:58
Сообщения: 44
Всем спасибо, получилось с использованием методов change_node и frontend_update. :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re:
СообщениеДобавлено: Пт, янв 15 2010, 09:48 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, ноя 07 2006, 09:49
Сообщения: 303
John Doe написал:
При добавлении новых данных достаточно добавить нод при помощи метода ADD_NODE. При удалении нода или узла приходится вызывать DELETE_ALL_NODES, а потом пересобирать дерево заново через цикл с ADD_NODE.


Делаю так, как написано. Но возникает проблема: изменяется нумерация узлов. Например, у меня в дереве всего 20 узлов и итемов. Если отрабатывать событие двойного клика, то значение node_key изменяется от 1 до 20. Если же удалить иерархию с помощью DELETE_ALL_NODES, а потом пересобрать (без нулевых строк, допустим) с помощью ADD_NODE, то нумерация уже будет начинаться с 21! Если еще раз проделать удаление всех узлов и пересборку (вернуть нулевые строки), то начальный номер также будет увеличен (больше 21).

Все бы ничего, но на номер узла завязано проваливание. Однако! Метод GET_SELECTED_ITEM также возвращает неправильное (по логике) значение нода, и затем с помощью метода GET_OUTTAB_LINE можно получить верное(!) значение E_NODE_TEXT.

Однако же, интересует вопрос с этим внутренним счетчиком нодов. По идее, он должен обнуляться методом DELETE_ALL_NODES, только он почему-то инкрементируется с каждым вызовом ADD_NODE.

Как это объяснить?

_________________
* * *


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB