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

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: CLASS + ALV + event
СообщениеДобавлено: Вт, июн 15 2021, 10:59 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Доброго.

Есть простой класс.
Который что то считает. Выбирает и т д.
Внутри класса есть метод который выводит результат в ALV.

Этот результат в ALV не всегда нужно выводить. Он типа отладочный проверочный.
В нем выводится резульат работы всего класса.

В ALV нужно обработать событие. даблклик Соответственно создаем обработчик.

Самый стандартный
Code:
class lcl_handle_events definition.
  public section.
    methods: on_double_click for event double_click of cl_salv_events_table importing row column.
endclass.                    "lcl_handle_events DEFINITION

class lcl_handle_events implementation.
  method on_double_click.
    MESSAGE 'dblclick' TYPE 'I'.
  endmethod.                    "on_double_click
endclass.                    "lcl_handle_events IMPLEMENTATION



Так вот, так как ALV сам находится в методе класса, обработчик конечно не видит экземпляр класса и его данные.
Как правильно из события dblclick увидить данные класса из которого вызвали alv?
Я получаю index записи по которой кликнули. Но не вижу саму таблицу.

Таблицу конечно можно сделать статической. Но как то не хотелось бы.

Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS + ALV + event
СообщениеДобавлено: Вт, июн 15 2021, 12:49 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Дополню тестовый код

Вопрос в коде


Code:



class lcl_handle_events definition.
  public section.
    methods: on_double_click for event double_click of cl_salv_events_table importing row column.
endclass.                    "lcl_handle_events DEFINITION


class lcl_handle_events implementation.
  method on_double_click.
      КАК ОТСЮДА УВИДЕТЬ ТАБЛИЦУ lt_sflight класса  ZCL_TESTCLASS ?
  endmethod.
endclass.



CLASS ZCL_TESTCLASS DEFINITION.
  PUBLIC SECTION.
    data: lt_sflight type table of sflight.

    METHODS fill_and_show_alv.

ENDCLASS.                    "ZCL_TESTCLASS DEFINITION


CLASS ZCL_TESTCLASS IMPLEMENTATION.

  METHOD fill_and_show_alv.
    data: alv  type ref to cl_salv_table.
    data: functions TYPE REF TO cl_salv_functions_list.
    data: gr_columns  type ref to cl_salv_columns_table.
    data: gs_column   type ref to cl_salv_column_table.
    data: gt_columns_ref          TYPE salv_t_column_ref.
    data: gs_columns_ref          TYPE salv_s_column_ref.
    data: color                   type lvc_s_colo.
    data: gr_events  TYPE REF TO cl_salv_events_table.
    data: event_handler type ref to lcl_handle_events.

    DATA: lr_top_element TYPE REF TO cl_salv_form_layout_grid.
    DATA: lr_header TYPE REF TO cl_salv_form_header_info.


    SELECT * FROM sflight INTO TABLE lt_sflight.

    call method cl_salv_table=>factory
      EXPORTING
        list_display = abap_true
      IMPORTING
        R_SALV_TABLE = alv
      CHANGING
        t_table      = lt_sflight.

    gr_events = ALV->get_event( ).
    create object event_handler.
    set handler event_handler->on_double_click for gr_events.

    alv->display( ). "Выводим в ALV.
  ENDMETHOD.                    "ZCL_TESTCLASS

ENDCLASS.                    "ZCL_TESTCLASS IMPLEMENTATION




p.s. я выкрутился пока обьявив таблицу как CLASS-DATA.
Можно ее вынести за класс.

Но хотелосьбы все красиво. Не выводить данные за класс.

Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS + ALV + event
СообщениеДобавлено: Вт, июн 15 2021, 15:46 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, янв 21 2005, 12:40
Сообщения: 371
Пол: Мужской
Как насчет варианта с передачей в экземпляр lcl_handle_events ссылки на себя (ZCL_TESTCLASS) при создании?
А по ней уже можно получить доступ к открытому атрибуту lt_sflight.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS + ALV + event
СообщениеДобавлено: Вт, июн 15 2021, 22:29 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
1. Всунуть on_double_click() в ZCL_TESTCLASS.
2. lt_sflight сделать протектед.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS + ALV + event
СообщениеДобавлено: Ср, июн 16 2021, 07:16 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
LAT написал(а):
1. Всунуть on_double_click() в ZCL_TESTCLASS.
2. lt_sflight сделать протектед.


Спасибо за направление.
Получилось вот так...

Работает

Code:

CLASS ZCL_TESTCLASS DEFINITION.
  PUBLIC SECTION.
    methods: on_double_click for event double_click of cl_salv_events_table importing row column.
    METHODS fill_and_show_alv.
    data: lt_sflight type table of sflight.
ENDCLASS.                    "ZCL_TESTCLASS DEFINITION


CLASS ZCL_TESTCLASS IMPLEMENTATION.

  method on_double_click.
       data: ls_sfligh type sflight.
       READ TABLE lt_sflight  INTO ls_sfligh INDEX row.
       if sy-subrc = 0.
          MESSAGE ls_sfligh-CARRID TYPE 'I'.
       ELSE.
          MESSAGE 'Error ' TYPE 'I'.
       ENDIF.
  endmethod.

  METHOD fill_and_show_alv.
    data: alv  type ref to cl_salv_table.
    data: functions TYPE REF TO cl_salv_functions_list.
    data: gr_columns  type ref to cl_salv_columns_table.
    data: gs_column   type ref to cl_salv_column_table.
    data: gt_columns_ref          TYPE salv_t_column_ref.
    data: gs_columns_ref          TYPE salv_s_column_ref.
    data: color                   type lvc_s_colo.

    data: gr_events  TYPE REF TO cl_salv_events_table.

    DATA: lr_top_element TYPE REF TO cl_salv_form_layout_grid.
    DATA: lr_header TYPE REF TO cl_salv_form_header_info.


    SELECT * FROM sflight INTO TABLE lt_sflight.

    call method cl_salv_table=>factory
      EXPORTING
        list_display = abap_true
      IMPORTING
        R_SALV_TABLE = alv
      CHANGING
        t_table      = lt_sflight.

    gr_events = ALV->get_event( ).
    set handler me->on_double_click for gr_events.
    alv->display( ). "Выводим в ALV.
  ENDMETHOD.                    "ZCL_TESTCLASS

ENDCLASS.                    "ZCL_TESTCLASS IMPLEMENTATION





Не понял только зачем lt_sflight в протектед?

Спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS + ALV + event
СообщениеДобавлено: Ср, июн 16 2021, 09:21 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
А не проще ли было бы в таком случае метод обработчика события в исходный класс (где алв) запихнуть?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS + ALV + event
СообщениеДобавлено: Ср, июн 16 2021, 09:23 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пт, июл 27 2007, 16:08
Сообщения: 352
Пол: Мужской
Sam Stone написал(а):
А не проще ли было бы в таком случае метод обработчика события в исходный класс (где алв) запихнуть?


Так уже подсказали и сделал. Пост выше


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: CLASS + ALV + event
СообщениеДобавлено: Ср, июн 16 2021, 09:35 
Специалист
Специалист

Зарегистрирован:
Пт, июл 27 2007, 13:06
Сообщения: 137
apetrenko написал:
Sam Stone написал(а):
А не проще ли было бы в таком случае метод обработчика события в исходный класс (где алв) запихнуть?


Так уже подсказали и сделал. Пост выше


Пардон, что-то криво в решение посмотрел :) Или не проснулся еще.

Штоп не быть оффтопом: lt_sflight в протектед (или даже в приват) - чтобы снаружи не было доступа к данным (инкапсуляция и прочие ооп слова).


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

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


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

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


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

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