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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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