Текущее время: Чт, июл 17 2025, 21:45

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


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

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


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

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