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

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


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

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


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

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