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

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


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

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


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

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