SAPфорум.RU
https://sapboard.ru/forum/

Динамические программирование объектов
https://sapboard.ru/forum/viewtopic.php?f=13&t=96524
Страница 1 из 1

Автор:  Igor_Beruk [ Ср, июн 20 2018, 09:46 ]
Заголовок сообщения:  Динамические программирование объектов

Привет всем! Подскажите советом. Никак не получается сделать следующее. Есть класс с 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. Дампит..Подскажите-как мне забрать этот грид обхект так-чтобы смог к нему обратиться..

Автор:  olegbash [ Ср, июн 20 2018, 09:56 ]
Заголовок сообщения:  Re: Динамические программирование объектов

в качестве решения вижу:
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

Автор:  Sam Stone [ Ср, июн 20 2018, 10:12 ]
Заголовок сообщения:  Re: Динамические программирование объектов

ЕМНИП в 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( ).

Автор:  Igor_Beruk [ Ср, июн 20 2018, 10:23 ]
Заголовок сообщения:  Re: Динамические программирование объектов

obj ?= myclass->my. - в этом месте Дамп(

Автор:  Igor_Beruk [ Ср, июн 20 2018, 10:25 ]
Заголовок сообщения:  Re: Динамические программирование объектов

А-нет - все нормально! Я просто через field-sumbols делал! Все получилось,спасибо огромное!!!!

Автор:  Igor_Beruk [ Ср, июн 20 2018, 10:52 ]
Заголовок сообщения:  Re: Динамические программирование объектов

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

Автор:  Sam Stone [ Ср, июн 20 2018, 10:59 ]
Заголовок сообщения:  Re: Динамические программирование объектов

Экземпляр класса это ссылка. Поэтому 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.

Автор:  Igor_Beruk [ Ср, июн 20 2018, 11:21 ]
Заголовок сообщения:  Re: Динамические программирование объектов

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.



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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/