Текущее время: Ср, май 14 2025, 14:56

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Пт, июл 08 2005, 17:04 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Нашел, спасибо :!:


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 28 2005, 11:57 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Из разряда "что будет на экране"

Code:
*---------------------------------------------------------------------*
CLASS lcl_A DEFINITION.
  PUBLIC SECTION.
    EVENTS: EVENT1,
            EVENT2.
    METHODS raise_events.
ENDCLASS.
*---------------------------------------------------------------------*
CLASS lcl_A IMPLEMENTATION.
  METHOD raise_events.
   RAISE EVENT event1.
   RAISE EVENT event2.
  ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------*
CLASS lcl_B DEFINITION.
  PUBLIC SECTION.
    EVENTS: EVENT2,
            EVENT1.
    METHODS: handler1 FOR EVENT EVENT1 of lcl_B,
             handler2 FOR EVENT EVENT2 of lcl_B.
ENDCLASS.
*---------------------------------------------------------------------*
CLASS lcl_B IMPLEMENTATION.
  METHOD handler1.
    write: / 'handler1'.
  ENDMETHOD.
  METHOD handler2.
    write: / 'handler2'.
  ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------*
DATA: obj TYPE REF TO lcl_A.
DATA: hndl TYPE REF TO lcl_B.

START-OF-SELECTION.

  CREATE OBJECT obj.
  CREATE OBJECT hndl.

  set handler hndl->handler1 for obj.
  set handler hndl->handler2 for obj.

  CALL METHOD obj->raise_events.


Ну и вариация на эту же тему:
Code:
INTERFACE lif.
  EVENTS: event_if.
ENDINTERFACE.
*---------------------------------------------------------------------*
CLASS lcl_a DEFINITION.
  PUBLIC SECTION.
    INTERFACES: lif.
    EVENTS: event_a.
    METHODS raise_events.
ENDCLASS.
*---------------------------------------------------------------------*
CLASS lcl_a IMPLEMENTATION.
  METHOD raise_events.
    RAISE EVENT: lif~event_if.   "<- ОДНО СОБЫТИЕ!
  ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------*
CLASS lcl_b DEFINITION.
  PUBLIC SECTION.
    EVENTS: event_b.
    INTERFACES: lif.
    METHODS: handler_b FOR EVENT event_b of lcl_b.
    METHODS: handler_if FOR EVENT event_if OF lif.
ENDCLASS.
*---------------------------------------------------------------------*
CLASS lcl_b IMPLEMENTATION.
  METHOD handler_b.
    WRITE: / 'handler_b'.
  ENDMETHOD.
  METHOD handler_if.
    WRITE: / 'handler_if'.
  ENDMETHOD.
ENDCLASS.
*---------------------------------------------------------------------*
DATA: obj TYPE REF TO lcl_a.
DATA: hndl TYPE REF TO lcl_b.

START-OF-SELECTION.

  CREATE OBJECT obj.
  CREATE OBJECT hndl.

  SET HANDLER hndl->handler_b  FOR obj.
  SET HANDLER hndl->handler_if FOR obj.

  CALL METHOD obj->raise_events.


ЗЫ. Это для версии 4.6С. На последующих возможна ругань на синтаксис..


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 28 2005, 13:38 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Думаю, что в общем-то правильно будет ругаться. Вы регистрируете обработчики для объекта одного класса, а они описаны как обработчики объектов другого класса.
Если в 4.6 не ругается, то это скорее бага, чем фича.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 28 2005, 13:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Разумеется я не преподношу это как фичу :) Как раз наоборот.
Ясен перец такое надо закрывать :evil:
В общем-то и демонстрируется не то, что в 4.6С можно навесить обработчик на чужое событие, а то, что в результате этого можно "обработать" не то, что ожидаешь :lol:

PS. Так что будет на экране-то? :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 28 2005, 14:30 
Почетный гуру
Почетный гуру

Зарегистрирован:
Вт, авг 17 2004, 10:45
Сообщения: 550
Откуда: SAP_BASIS 640
Если немножко поправить и вместо
Code:
SET HANDLER some_method FOR some_object.

написать
Code:
SET HANDLER some_method FOR ALL INSTANCES.
,
то результат будет вполне предсказуем - в первом случае ничего не выведет, а во втором случае выведет
Цитата:
handler_if

А если не поправлять, то не берусь предсказать.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 28 2005, 15:00 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, май 04 2005, 16:29
Сообщения: 687
Откуда: Нижневартовск->Москва
Пол: Мужской
Из-за того, что события в рантайме идентифицируются не на основе имени, а по порядку декларирования (как показывает эксперимент):

1-й случай:
handler2
handler1

2-й:
handler_b
handler_if

Еще один нехороший момент в том, что если, например, у LCL_A отнести события в PRIVATE, то они всё равно обработаются..

PS а в случае SET HANDLER some_method FOR ALL INSTANCES будет корректная установка обработчиков, поскольку объекты будут выбираться на основе описания этих обработчиков.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу Пред.  1, 2, 3, 4, 5

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


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

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


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

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