Текущее время: Чт, июн 26 2025, 10:09

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


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

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


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

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