Текущее время: Чт, мар 28 2024, 20:27

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Динамические программирование объектов
СообщениеДобавлено: Ср, июн 20 2018, 09:46 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, окт 23 2015, 14:48
Сообщения: 90
Привет всем! Подскажите советом. Никак не получается сделать следующее. Есть класс с public атрибутом назовем его 'My ' Type Ref To DATA . Ему передаю ссылку объекта GRID1 type ref to CL_GUI_ALV_GRID. Потом забираю его в средстве поиска. Забрать -то забираю-но никак его не могу преобразовать так,чтобы обратиться к нему как к объекту CL_GUI_ALV_GRID чтобы забрать его свойства-например выбранную строку ну или любые другие какие захочу . Например , объявляю у себя в ср.поиска <lt_grid> TYPE any и ассайню туда My и все ок-он ассайниится - но обратиться к нему <lt_grid>->get_selected_rows не могу .Объявляю <lt_grid2> Type Ref To CL_GUI_ALV_GRID, делаю asssign <lt_grid> to <lt_grid2> cust. Дампит..Подскажите-как мне забрать этот грид обхект так-чтобы смог к нему обратиться..


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамические программирование объектов
СообщениеДобавлено: Ср, июн 20 2018, 09:56 
Модератор
Модератор

Зарегистрирован:
Пн, июн 27 2011, 08:25
Сообщения: 475
в качестве решения вижу:
1) динамическое обращение к методу

типа
lo_obj ?= <lt_grid>.
CALL METHOD lo_obj->mo_obj->('GET_SELECTED_ROWS')

вместо
<lt_grid>->get_selected_rows

2) без общего типа; объявить сразу typre ref to CL_GUI_ALV_GRID


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамические программирование объектов
СообщениеДобавлено: Ср, июн 20 2018, 10:12 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
ЕМНИП в DATA нельзя пихать ссылки на объекты. Надо делать переменную TYPE REF TO object.

А чтобы обращаться, то делать либо так:
DATA obj TYPE REF TO cl_gui_alv_grid.
obj ?= myclass->my.
obj->GET_SELECTED_ROWS( ).
Либо динамически:
call method myclass->my->('GET_SELECTED_ROWS').

Либо так (в зависимости от версии системы):
CAST cl_gui_alv_grid( myclass->my )->get_selected_rows( ).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамические программирование объектов
СообщениеДобавлено: Ср, июн 20 2018, 10:23 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, окт 23 2015, 14:48
Сообщения: 90
obj ?= myclass->my. - в этом месте Дамп(


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамические программирование объектов
СообщениеДобавлено: Ср, июн 20 2018, 10:25 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, окт 23 2015, 14:48
Сообщения: 90
А-нет - все нормально! Я просто через field-sumbols делал! Все получилось,спасибо огромное!!!!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамические программирование объектов
СообщениеДобавлено: Ср, июн 20 2018, 10:52 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, окт 23 2015, 14:48
Сообщения: 90
А еще один очень важный момент..obj ?= myclass->my. оно-то да,получается все передать,но с type object ушел очень важный момент.
Я делал раньше в этом месте get reference of grid to my и когда происходили изменения в grid - то и в My соответственно тоже. А в этом случае .obj ?= myclass->my
получается просто копия объекта а не ссылка.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Динамические программирование объектов
СообщениеДобавлено: Ср, июн 20 2018, 10:59 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
Экземпляр класса это ссылка. Поэтому obj ?= myclass->my это не копирование объекта, а копирование ссылки на объект.
Вот пример для наглядности. Меняем аттрибут в obj2, а меняется в obj1.
Code:
report.

CLASS lcl_class DEFINITION.
  PUBLIC SECTION.
    DATA a TYPE char1.
ENDCLASS.

DATA(obj1) = new lcl_class( ).

DATA obj2 TYPE REF TO lcl_class.
obj2 ?= obj1.

WRITE:/ '1)', obj1->a.
obj2->a = 'Z'.
WRITE:/ '2)', obj1->a.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамические программирование объектов
СообщениеДобавлено: Ср, июн 20 2018, 11:21 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, окт 23 2015, 14:48
Сообщения: 90
Sam Stone написал(а):
Экземпляр класса это ссылка. Поэтому obj ?= myclass->my это не копирование объекта, а копирование ссылки на объект.
Вот пример для наглядности. Меняем аттрибут в obj2, а меняется в obj1.
Code:
report.

CLASS lcl_class DEFINITION.
  PUBLIC SECTION.
    DATA a TYPE char1.
ENDCLASS.

DATA(obj1) = new lcl_class( ).

DATA obj2 TYPE REF TO lcl_class.
obj2 ?= obj1.

WRITE:/ '1)', obj1->a.
obj2->a = 'Z'.
WRITE:/ '2)', obj1->a.



Да,точно-спасибо Вам большое.


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

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


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

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


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

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