Текущее время: Вт, мар 19 2024, 06:51

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


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

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


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

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