Текущее время: Пт, мар 29 2024, 05: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 часа


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

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


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

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