Текущее время: Ср, июн 25 2025, 23:32

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: ALV-GRID + Таймер
СообщениеДобавлено: Вт, апр 20 2010, 08:44 
Младший специалист
Младший специалист

Зарегистрирован:
Сб, мар 21 2009, 11:45
Сообщения: 54
Пол: Мужской
Всем привет!
Задача: автоматическое обновление ALV-грида по таймеру.
Для реализации использую простую методику. Запускаю RFC_PING_AND_WAIT, по окончании выполнения запускаю процедуру, в ней запускаю метод raise_event ALV-грида, а в обработчике события опять вызываю процедуру с RFC_PING_AND_WAIT - и так должно работать бесконечно (где-то вычитал, что вместо raise_event люди используют set user-command - но это не подходит для меня).
Итак событие создается, обработчик срабатывает, но при попытке повторно запустить RFC_PING_AND_WAIT вываливается дамп с ДинамОшибкой = RPERF_ILLEGAL_STATEMENT.
Помогите, пожалуйста, разобраться, где я ошибся и как можно все-таки реализовать мою задачу - уход с ALV-грида на другой объект не предлагать. :)
Заранее спасибо

в начале программы запускаю проц. call_rfc_wait.
Code:
form call_rfc_wait using p_update_type.
  data: lv_mssg(80).

  call function 'RFC_PING_AND_WAIT' starting new task '001'
    performing call_task_end on end of task
    exporting
      seconds               = 5
      busy_waiting        = space
    exceptions
      resource_failure   = 1
      communication_failure = 2  message lv_mssg
      system_failure        = 3  message lv_mssg
      others                = 4.
endform.                    "call_rfc_wait

*&---------------------------------------------------------------------*
*&      Form  f_task_end
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->U_TASKNAME text
*----------------------------------------------------------------------*
form call_task_end using u_taskname.
  data: lv_mssg(80).

  receive results from function 'RFC_PING_AND_WAIT'
    exceptions
      resource_failure      = 1
      communication_failure = 2  message lv_mssg
      system_failure        = 3  message lv_mssg
      others                = 4.

  check sy-subrc eq 0.
  call method r_alvg->raise_event
    exporting i_ucomm = 'MY_COMM'
              i_user_command = 'A'
              i_not_processed = 'X'.
endform.

class gc_event_receiver definition.
  public section.
    methods:
      handle_user_command for event after_user_command of cl_gui_alv_grid importing e_ucomm.
  private section.
endclass. 

class gc_event_receiver implementation.
  method handle_user_command.
    if e_ucomm = 'MY_COMM'.
      perform call_rfc_wait using 'fill'.
    endif.
  endmethod.                    "handle_user_command
endclass.


Последний раз редактировалось asoloviyov Вт, апр 20 2010, 08:58, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ALV-GRID + Таймер
СообщениеДобавлено: Вт, апр 20 2010, 08:53 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
asoloviyov написал:
Всем привет!
Задача: автоматическое обновление ALV-грида по таймеру.
Для реализации использую простую методику. Запускаю RFC_PING_AND_WAIT, по окончании выполнения запускаю процедуру, в ней запускаю метод raise_event ALV-грида, а в обработчике события опять вызываю процедуру с RFC_PING_AND_WAIT - и так должно работать бесконечно (где-то вычитал, что вместо raise_event люди используют set user-command - но это не подходит для меня).
Итак событие создается, обработчик срабатывает, но при попытке повторно запустить RFC_PING_AND_WAIT вываливается дамп с ДинамОшибкой = RPERF_ILLEGAL_STATEMENT.
Помогите, пожалуйста, разобраться, где я ошибся и как можно все-таки реализовать мою задачу - уход с ALV-грида на другой объект не предлагать. :)
Заранее спасибо

Вот ссылки
http://www.sapnet.ru/viewtopic.php?t=1382&start=0&postdays=0&postorder=asc&highlight=
http://sapboard.ru/forum/viewtopic.php?f=13&t=2189&start=0&hilit=gui_timer
Не исключено конечно что Вы посещали, если не помогут, то показывайте дамп.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV-GRID + Таймер
СообщениеДобавлено: Вт, апр 20 2010, 09:01 
Младший специалист
Младший специалист

Зарегистрирован:
Сб, мар 21 2009, 11:45
Сообщения: 54
Пол: Мужской
Да, я смотрел эти темы, но все равно спасибо.
В них используется АЛВ-List, а ALV-grid не поддерживает user-comand.
А что конкретно в дамп включить??


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ALV-GRID + Таймер
СообщениеДобавлено: Вт, апр 20 2010, 09:06 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
asoloviyov написал:
Да, я смотрел эти темы, но все равно спасибо.
В них используется АЛВ-List, а ALV-grid не поддерживает user-comand.
А что конкретно в дамп включить??

Если Вы читали, то Вы видели что написано по поводу таймера и грида во второй ссылке.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ALV-GRID + Таймер
СообщениеДобавлено: Вт, апр 20 2010, 09:27 
Младший специалист
Младший специалист

Зарегистрирован:
Сб, мар 21 2009, 11:45
Сообщения: 54
Пол: Мужской
Речь идет вот про это: "Проблема не решается. Callback функции не работают с rfc вызовами"? По-моему, схема с вызовом event и его последующая обработка с callback явно не связана... хотя могу ошибаться.
Прокомментируйте, пожалуйста. :?:


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ALV-GRID + Таймер  Тема решена
СообщениеДобавлено: Вт, апр 20 2010, 12:18 
Почетный гуру
Почетный гуру

Зарегистрирован:
Пт, дек 04 2009, 12:52
Сообщения: 219
Все очень просто. Вот вам класс:
Code:
*----------------------------------------------------------------------*
*       CLASS lcl_periodic_callback DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_periodic_callback DEFINITION.
  PUBLIC SECTION.
    METHODS:
      constructor      IMPORTING i_interval      TYPE int4
                                 i_performing    TYPE c,
      handle_timeout   FOR EVENT finished OF cl_gui_timer.

  PRIVATE SECTION.
    DATA:
      li_timer         TYPE REF TO cl_gui_timer,
      l_performing     TYPE char30.

ENDCLASS.                    "lcl_grid_refresher DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_periodic_callback IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_periodic_callback IMPLEMENTATION.
  METHOD constructor.

    l_performing = i_performing.

*   таймер: инициализация
    CREATE OBJECT:  li_timer.
    li_timer->interval = i_interval.
    SET HANDLER handle_timeout FOR li_timer.

*   таймер: запуск
    li_timer->run( ).

  ENDMETHOD.                    "constructor
  METHOD handle_timeout.

*   таймер: перезапуск
    li_timer->cancel( ).
    li_timer->run( ).

*   callback
    PERFORM (l_performing) IN PROGRAM (sy-cprog) IF FOUND.

  ENDMETHOD.                    "handle_timeout
ENDCLASS.                    "lcl_periodic_callback IMPLEMENTATION


Использовать его примерно так:
Code:
DATA gi_periodic_callback TYPE REF TO lcl_periodic_callback.

CREATE OBJECT gi_periodic_callback
  EXPORTING
    i_interval   = 1                      " -->> время, в секундах
    i_performing = 'REFRESH_ALVGRID'.     " -->> ваша callback-подпрограмма


*&---------------------------------------------------------------------*
*&      Form  REFRESH_ALVGRID
*&---------------------------------------------------------------------*
*       ...а здесь вы обновляете свой грид
*----------------------------------------------------------------------*
FORM refresh_alvgrid.

ENDFORM.                    "REFRESH_ALVGRID


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ALV-GRID + Таймер
СообщениеДобавлено: Вт, апр 20 2010, 12:36 
Младший специалист
Младший специалист

Зарегистрирован:
Сб, мар 21 2009, 11:45
Сообщения: 54
Пол: Мужской
Бородин Игорь, спасибо тебе!
Все сработало как часы! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Уважуха !!!
СообщениеДобавлено: Ср, сен 29 2010, 11:56 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, ноя 02 2006, 11:27
Сообщения: 51
Откуда: Ярославль
Пол: Мужской
Уважуха !!!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: ALV-GRID + Таймер
СообщениеДобавлено: Чт, сен 30 2010, 15:31 
Начинающий
Начинающий

Зарегистрирован:
Пн, ноя 24 2008, 16:36
Сообщения: 5
а как с временем отработки?
в свое время разбирался с автообновлением как раз для объектного ALV,
при запусках с секундным интервалом у нас на системе 4.6С
такой метод давал задержки, где-то +1 доп. секунда в среднем.
в итоге более оперативным методом оказался следующий - описан в этом сообщении. http://sapboard.ru/forum/viewtopic.php?p=200841#p200841
который и принят для дальнейшего использования


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

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


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

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


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

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