Текущее время: Вс, июл 27 2025, 02:42

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Проверить существование класса...
СообщениеДобавлено: Пт, окт 24 2008, 00:33 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Ср, ноя 01 2006, 22:58
Сообщения: 794
Откуда: Заарбрюкен
Пол: Мужской
Всем доброго времени суток...

Возник насущный вопрос (и не смотрите, что время за полночь - бывает и так)...

Как можно элегантно проверить существование класса, если его имя имеется в текстовой переменной?

Как вариант, проверить, имплементирует ли класс заданный интеофейс?

Заранее спасибо...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проверить существование класса...
СообщениеДобавлено: Пт, окт 24 2008, 01:02 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Konstantin Anikeev написал:
Всем доброго времени суток...

Возник насущный вопрос (и не смотрите, что время за полночь - бывает и так)...

Как можно элегантно проверить существование класса, если его имя имеется в текстовой переменной?

Как вариант, проверить, имплементирует ли класс заданный интеофейс?

Заранее спасибо...

CL_ABAP_OBJECTDESCR=>describe_by_name( 'MY_TYPE‘ )

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 24 2008, 01:06 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Ср, ноя 01 2006, 22:58
Сообщения: 794
Откуда: Заарбрюкен
Пол: Мужской
Спасибо...

Так пойдет? Или криво?
Code:
 
  cl_abap_objectdescr=>describe_by_name( lv_clsname ).
  CHECK sy-subrc = 0.

  CALL METHOD (lv_clsname)=>zif_ecs_plugin~get_view
    RECEIVING
      view = lv_viewname.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 24 2008, 07:37 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Konstantin Anikeev написал:
Спасибо...

Так пойдет? Или криво?
Code:
 
  cl_abap_objectdescr=>describe_by_name( lv_clsname ).
  CHECK sy-subrc = 0.

Не уверен что там возвращается sy-subrc. Скорее всего надо ловить эксепшен через try endtry.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 24 2008, 09:14 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
Может лучше написать
Code:
TRY.
    CREATE OBJECT cref TYPE (text_var).
  CATCH ....
ENDTRY.

_________________
С уважением, Сергей Королев


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

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
хотя, в общем случае класс может недопускать создания (если контруктор protected или private).
по поводу проверки интерфйеса, я вот думаю, если экземпляр создан, то может быть достаточно сделать присвоение переменной интерфейса? Опять же с TRY...ENDTRY.

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 24 2008, 10:30 
Модератор
Модератор
Аватара пользователя

Зарегистрирован:
Пт, июн 16 2006, 00:43
Сообщения: 1686
Откуда: Москва <-> Красноярск
Пол: Мужской
В cl_abap_typedescr=>describe_by_name
есть замечательное исключение type_not_found.
Этого достаточно для проверки.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 24 2008, 11:00 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Пономарев Артем написал:
В cl_abap_typedescr=>describe_by_name
есть замечательное исключение type_not_found.
Этого достаточно для проверки.

Да, ещё один ньюанс тогда уж - проверять в возврате атрибут KIND - т.к. мало ли что, вдруг в системе будет структура с таким именем, а не класс.

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 24 2008, 11:23 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Ср, ноя 01 2006, 22:58
Сообщения: 794
Откуда: Заарбрюкен
Пол: Мужской
sy-uname написал(а):
Konstantin Anikeev написал:
Спасибо...

Так пойдет? Или криво?
Code:
 
  cl_abap_objectdescr=>describe_by_name( lv_clsname ).
  CHECK sy-subrc = 0.

Не уверен что там возвращается sy-subrc. Скорее всего надо ловить эксепшен через try endtry.


Сергей Королев написал:
Может лучше написать
Code:
TRY.
    CREATE OBJECT cref TYPE (text_var).
  CATCH ....
ENDTRY.


Да, спасибо, до этого вчера я сам дошел (через пару Short Dumps)...

sy-uname написал(а):
Да, ещё один ньюанс тогда уж - проверять в возврате атрибут KIND - т.к. мало ли что, вдруг в системе будет структура с таким именем, а не класс.


Спасибо, ценноа замечание... Учтем...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 24 2008, 11:25 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Ср, ноя 01 2006, 22:58
Сообщения: 794
Откуда: Заарбрюкен
Пол: Мужской
Сергей Королев написал:
хотя, в общем случае класс может недопускать создания (если контруктор protected или private).
по поводу проверки интерфйеса, я вот думаю, если экземпляр создан, то может быть достаточно сделать присвоение переменной интерфейса? Опять же с TRY...ENDTRY.


Да, такое бы пошло, т.к. дальше используются вызовы только методов интерфейса...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт, окт 24 2008, 11:54 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Еще один способ нашелся: сделать select из таблицы TMDIR. В ФМ RS_TOOL_ACCESS именно такая проверка при операции CHECK.
Code:
CALL FUNCTION 'RS_TOOL_ACCESS'
  EXPORTING
    OPERATION           = 'CHECK'
    OBJECT_NAME         = 'CL_GUI_ALV_GRID'
    OBJECT_TYPE         = 'CLAS'
  EXCEPTIONS
    NOT_EXECUTED        = 1
    INVALID_OBJECT_TYPE = 2
    OTHERS              = 3.
IF SY-SUBRC <> 0.
  MESSAGE 'Not found' TYPE 'S'.
ENDIF.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: re
СообщениеДобавлено: Пт, окт 24 2008, 13:50 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
Code:
  data: cliferr_l            type seoflag
      , cmpkey_l             type seocmpkey.

  cliferr_l  = space.
  cmpkey_l-clsname  = 'ZCLASS'.           "#EC ENHOK
  cmpkey_l-cmpname  = 'ZMETHOD'.  "#EC ENHOK

  call function 'SEO_METHOD_EXISTENCE_CHECK'
    exporting
*     cifkey                  =
      mtdkey                  = cmpkey_l
    importing
      deleted                 = cliferr_l
    exceptions
      others                  = 9.

  if  sy-subrc   eq 0
  and cliferr_l  eq space.

    add bonus to my_wage.

  endif.


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

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


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

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


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

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