Текущее время: Пт, июл 18 2025, 08:41

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Tree List Problem
СообщениеДобавлено: Чт, июн 19 2014, 17:04 
Ассистент
Ассистент

Зарегистрирован:
Вс, ноя 25 2012, 15:31
Сообщения: 26
Привет все.

Столкнулся с проблемой.
Может быть кто знает, в чем дело и как решить.

Использую Лист Три.

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 ).


Этот меняет текст айтема, привязанного к ноду дерева.
Если нод и айтем существует - все хорошо.
Но если я передаю несуществующие ноды/айтемы, то метод эксепшн не возвращает!
Т.е. субрц = 0. Но зато при флаше экрана падает в дамп(
Может кто сталкивался и знает в чем дело, помогите плиз.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Tree List Problem
СообщениеДобавлено: Пт, июн 20 2014, 00:34 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Приведите текст дампа.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tree List Problem
СообщениеДобавлено: Пт, июн 20 2014, 09:47 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Настораживает слово "NEW" в имени переменной узла :roll:
Вы добавляете узлы в динамике? Если да, то неплохо бы синхронизировать Control и таблицу узлов на Application Server (см. cl_gui_cfw=>flush() ) перед обращением к новому узлу. Если узел добавлен некорректно, упадете в дамп уже при синхронизации.

To Удав: Дамп, очевидно, стандартный, ни о чем, - возникает при ошибочном описании иерархии в таблице узлов дерева. Мне кажется, код возврата нулевой, поскольку узел действительно есть. Но добавлен как-то неправильно, с нарушением иерархии.

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Tree List Problem
СообщениеДобавлено: Пт, июн 20 2014, 10:36 
Ассистент
Ассистент

Зарегистрирован:
Вс, ноя 25 2012, 15:31
Сообщения: 26
Спасибо за ответы!

Сейчас распишу поподробнее.
У меня есть драг энд дроп из алв-грида в дерево.
При первом перетаскивании появляется новый нод и айтем, в котором стоит едиинчка.
Затем, если я еще раз перетащу туда, то нод этот останется, но только текст айтема изменится - станет двойкой.
И т.д.
Таким образом, если я первый раз перетаскиваю строку в дерево, то создается нод и айтем.
Если второй раз, то меняется только айтем.

Я, вообще говоря, не смог догадаться и найти, как проверить, существует ли в дереве нод с определенный ИД.
Поэтому что я решил делать:
Сразу пытаюсь изменить текст с помощью выше упомянутого метода.
Если он выдает эксепшн двойку, то я создаю новый нод и айтем.
А если эксепшена нет, то текст айтема успешно обновляется и все.
Но эксепшн не выдается (

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.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Tree List Problem
СообщениеДобавлено: Пт, июн 20 2014, 11:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Могу посоветовать следующее:
1) Узнать, существует ли node/item - попробовать его выбрать (метод select_item(...)). Не уверен, что код возврата будет актуальный - надо попробовать.
2) Можно создать "буфер" - перекодировщик, который позволит вам хранить все добавленные узлы с внешним идентификатором. Промежуточный шаг - посмотреть в буфер, добавлен ли этот узел, и определить его код в дереве.

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Tree List Problem
СообщениеДобавлено: Пт, июн 20 2014, 11:56 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Cube написал(а):
А вот место дамба

Хотелось бы еще стек вызовов увидеть...

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Tree List Problem
СообщениеДобавлено: Пт, июн 20 2014, 12:15 
Ассистент
Ассистент

Зарегистрирован:
Вс, ноя 25 2012, 15:31
Сообщения: 26
nicky555

Метод тоже не возвращает эксепшенов(
Про буфер да, так пока и сделал. Но все же, должен же быть способ проверки существования нода..
Да и хотелось бы все же разобраться, почему эксепшенов нет..

Удав,
Code:
Depth   Type   Name                            Program                                   Include
10      METHOD  FLUSH                           CL_GUI_CFW====================CP        CL_GUI_CFW====================CM002
9       METHOD  HANDLE_ALV_DROP_COMPLETE        Z_ALV_STOCK_MAHAGEMENT                  Z_ALV_STOCK_MANAGEMENT_TOP
8       METHOD  IF_DRAGDROP~ONDROPCOMPLETE      CL_GUI_ALV_GRID===============CP        CL_GUI_ALV_GRID===============CM027
7       METHOD  HANDLE_DRAGDROP_EVENT           CL_GUI_CFW====================CP        CL_GUI_CFW====================CM00M
6       METHOD  DISPATCH_SYSTEM_EVENTS          CL_GUI_CFW====================CP        CL_GUI_CFW====================CM00K
5       FORM    CONTROL_DISPATCH                SAPFGUICNTL_CFW                         SAPFGUICNTL_CFW
4       FORM    CONTROL_DISPATCH                SAPFGUICNTL                             SAPFGUICNTL
3       FORM    %_CTL_INPUT                     SAPMSSYD                                SAPMSSYD
2       (PAI)   %_CTL_INPUT1                    SAPMSSYD                                SAPMSSYD
1       EVENT   START-OF-SELECTION              Z_ALV_STOCK_MAHAGEMENT                  Z_ALV_STOCK_MAHAGEMENT


Можно флаш убрать из хэндлера, тогда когда экран сам обновляется, получается следующий стек:
Code:
No.   Ty.          Program                             Include                             Line
      Name

    7 METHOD       CL_GUI_CFW====================CP    CL_GUI_CFW====================CM00P    16
      CL_GUI_CFW=>UPDATE_VIEW
    6 FORM         SAPFGUICNTL_CFW                     SAPFGUICNTL_CFW                        58
      HANDLE_FLUSH_SYSTEM_EVENTS
    5 FORM         SAPFGUICNTL_CFW                     SAPFGUICNTL_CFW                        34
      CONTROL_DISPATCH
    4 FORM         SAPFGUICNTL                         SAPFGUICNTL                            20
      CONTROL_DISPATCH
    3 FORM         SAPMSSYD                            SAPMSSYD                              288
      %_CTL_INPUT
    2 MODULE (PAI) SAPMSSYD                            SAPMSSYD                              236
      %_CTL_INPUT1
    1 EVENT        Z_ALV_STOCK_MAHAGEMENT              Z_ALV_STOCK_MAHAGEMENT                 22
      START-OF-SELECTION


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

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


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

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


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

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