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

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


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

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


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

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