Текущее время: Ср, июл 23 2025, 22:30

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Не получается создать объект класса динамически
СообщениеДобавлено: Вс, ноя 27 2011, 23:05 
Ассистент
Ассистент

Зарегистрирован:
Пн, янв 31 2011, 16:03
Сообщения: 44
Добрый день!

Почему не получается динамически создать объект класса cl_airplane в коде, приведенном ниже?

Code:
TYPE-POOLS abap.

DATA: class TYPE string VALUE 'cl_airplane',
      r_class TYPE REF TO object,
      r_1 TYPE REF TO cl_airplane
      exc_ref TYPE REF TO cx_root,
      exc_text TYPE string,
      ptab TYPE abap_parmbind_tab,
      ptab_line TYPE abap_parmbind.

ptab_line-name  = 'IM_NAME'.
ptab_line-kind  = cl_abap_objectdescr=>exporting.
GET REFERENCE OF 'hhh' INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.

ptab_line-name  = 'IM_PLANETYPE'.
ptab_line-kind  = cl_abap_objectdescr=>exporting.
GET REFERENCE OF 'ggg' INTO ptab_line-value.
INSERT ptab_line INTO TABLE ptab.

TRY.
    CREATE OBJECT r_class TYPE (class)
                  PARAMETER-TABLE ptab.
  CATCH cx_sy_create_object_error INTO exc_ref.
    exc_text = exc_ref->get_text( ).
    MESSAGE exc_text TYPE 'I'.
ENDTRY.


CREATE OBJECT r_1
  EXPORTING im_name = 'hhh'
    im_planetype = 'ggg'.


Выдается ошибка:
The object could not be created: The class cl_airplane does not exist.

Хотя строчкой ниже успешно создается такой же объект r_1 с явно заданным типом!

Помогите, пожалуйста, начинающему


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Не получается создать объект класса динамически  Тема решена
СообщениеДобавлено: Пн, ноя 28 2011, 05:53 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июл 15 2009, 05:55
Сообщения: 174
Откуда: Мегион - > СПб
Пол: Мужской
Code:
TYPE-POOLS abap.

DATA: class TYPE string VALUE 'cl_airplane',


В таком деле всегда важен регистр. Переведите имя класса в верхний регистр.
схоже

_________________
Ничто так не заразительно, как смех начальника...


Последний раз редактировалось LinevskiySV Ср, ноя 30 2011, 07:36, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Не получается создать объект класса динамически
СообщениеДобавлено: Пн, ноя 28 2011, 10:52 
Ассистент
Ассистент

Зарегистрирован:
Пн, янв 31 2011, 16:03
Сообщения: 44
LinevskiySV написал:
Code:
TYPE-POOLS abap.

DATA: class TYPE string VALUE 'cl_airplane',


В таком деле всегда важен регистр. Переведите имя класса в верхний регистр.


Спасибо тебе, добрый человек!


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Не получается создать объект класса динамически
СообщениеДобавлено: Пн, ноя 28 2011, 14:04 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 11 2008, 17:36
Сообщения: 84
Откуда: Moscow
Пол: Мужской
Можно ещё таким образом поступить:
В фабрике:
Code:
  data: lv_clsname type abap_abstypename, ref type ref to object.
  if clsname is supplied.
    lv_clsname = clsname.
    translate lv_clsname to upper case.
  elseif classdescr is supplied.
    classdescr->load_class(  ).
    lv_clsname = classdescr->absolute_name.
  endif.

  create object ref
    type
      (lv_clsname)
    exporting
      structure_name = structure_name.
  result = ref. return.

Для создания экземпляра нужно так называемое "абсолютное" имя класса. Для локального: с программой или пулом, в котором этот класс находится.

А при создании экземпляра передаём экземпляр cl_abap_classdescr.
Code:
data: abap_classdescr type ref to cl_abap_classdescr.
abap_classdescr ?= cl_abap_classdescr=>describe_by_name( 'YOUR_CLASS' ).

object ?= class=>factory( classdescr = abap_classdescr ).

_________________
CONTINUE OBSERVATION OF... INTERRUPTION!


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

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


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

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


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

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