SAPфорум.RU https://sapboard.ru/forum/ |
|
Двойной клик в ALV https://sapboard.ru/forum/viewtopic.php?f=13&t=96447 |
Страница 1 из 1 |
Автор: | exotik [ Вт, май 29 2018, 11:17 ] |
Заголовок сообщения: | Двойной клик в ALV |
Добрый день! Необходимо, чтобы при двойном клике на строку в таблице ALV открывался снизу второй экран с доп. информацией. Возможно ли сделать это с помощью класса CL_SALV_TABLE? можно сделать это проще или хотя бы стандартный пример?) |
Автор: | carbon_credit [ Вт, май 29 2018, 13:45 ] |
Заголовок сообщения: | Re: Двойной клик в ALV |
Привет. Вот стандартный пример: Code: DATA:
BEGIN OF TAB, EBELN LIKE EKKO-EBELN, KONNR LIKE EKPO-KONNR, BANFN LIKE EBAN-BANFN, END OF TAB, ALV_TAB LIKE TAB OCCURS 0. FIELD-SYMBOLS: <FS> LIKE LINE OF ALV_TAB. CLASS LCL_HANDLE_EVENTS DEFINITION DEFERRED. "класс для обработки событий DATA: O_ALV TYPE REF TO CL_SALV_TABLE, GC_SELECTIONS TYPE REF TO CL_SALV_SELECTIONS, LR_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE, GR_EVENTS TYPE REF TO LCL_HANDLE_EVENTS, ALV_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER, ALV_CLASS TYPE REF TO CL_GUI_ALV_GRID. CLASS LCL_HANDLE_EVENTS DEFINITION. PUBLIC SECTION. METHODS: ON_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE IMPORTING ROW COLUMN. ENDCLASS. CLASS LCL_HANDLE_EVENTS IMPLEMENTATION. METHOD ON_DOUBLE_CLICK. DATA: LT_CELLS TYPE SALV_S_CELL. CLEAR LT_CELLS. GC_SELECTIONS = O_ALV->GET_SELECTIONS( ). LT_CELLS = GC_SELECTIONS->GET_CURRENT_CELL( ). READ TABLE ALV_TAB ASSIGNING <FS> INDEX LT_CELLS-ROW. CASE LT_CELLS-COLUMNNAME. WHEN 'EBELN'. SET PARAMETER ID 'BES' FIELD <FS>-EBELN. CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN. WHEN 'KONNR'. SET PARAMETER ID 'CTR' FIELD <FS>-KONNR. CALL TRANSACTION 'ME33K' AND SKIP FIRST SCREEN. WHEN 'BANFN'. SET PARAMETER ID 'BAN' FIELD <FS>-BANFN. CALL TRANSACTION 'ME53N' AND SKIP FIRST SCREEN. ENDCASE. ENDMETHOD. ENDCLASS. MODULE CREATE_OBJECTS OUTPUT. IF ALV_CONTAINER IS INITIAL. CREATE OBJECT ALV_CONTAINER EXPORTING CONTAINER_NAME = 'MY_CONTROL_AREA'. CREATE OBJECT ALV_CLASS EXPORTING I_PARENT = ALV_CONTAINER. CREATE OBJECT GR_EVENTS. SET HANDLER GR_EVENTS->ON_DOUBLE_CLICK FOR LR_EVENTS. ENDIF. ENDMODULE. |
Автор: | exotik [ Вт, май 29 2018, 15:26 ] |
Заголовок сообщения: | Re: Двойной клик в ALV |
carbon_credit написал(а): Привет. Вот стандартный пример: Code: DATA: BEGIN OF TAB, EBELN LIKE EKKO-EBELN, KONNR LIKE EKPO-KONNR, BANFN LIKE EBAN-BANFN, END OF TAB, ALV_TAB LIKE TAB OCCURS 0. FIELD-SYMBOLS: <FS> LIKE LINE OF ALV_TAB. CLASS LCL_HANDLE_EVENTS DEFINITION DEFERRED. "класс для обработки событий DATA: O_ALV TYPE REF TO CL_SALV_TABLE, GC_SELECTIONS TYPE REF TO CL_SALV_SELECTIONS, LR_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE, GR_EVENTS TYPE REF TO LCL_HANDLE_EVENTS, ALV_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER, ALV_CLASS TYPE REF TO CL_GUI_ALV_GRID. CLASS LCL_HANDLE_EVENTS DEFINITION. PUBLIC SECTION. METHODS: ON_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE IMPORTING ROW COLUMN. ENDCLASS. CLASS LCL_HANDLE_EVENTS IMPLEMENTATION. METHOD ON_DOUBLE_CLICK. DATA: LT_CELLS TYPE SALV_S_CELL. CLEAR LT_CELLS. GC_SELECTIONS = O_ALV->GET_SELECTIONS( ). LT_CELLS = GC_SELECTIONS->GET_CURRENT_CELL( ). READ TABLE ALV_TAB ASSIGNING <FS> INDEX LT_CELLS-ROW. CASE LT_CELLS-COLUMNNAME. WHEN 'EBELN'. SET PARAMETER ID 'BES' FIELD <FS>-EBELN. CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN. WHEN 'KONNR'. SET PARAMETER ID 'CTR' FIELD <FS>-KONNR. CALL TRANSACTION 'ME33K' AND SKIP FIRST SCREEN. WHEN 'BANFN'. SET PARAMETER ID 'BAN' FIELD <FS>-BANFN. CALL TRANSACTION 'ME53N' AND SKIP FIRST SCREEN. ENDCASE. ENDMETHOD. ENDCLASS. MODULE CREATE_OBJECTS OUTPUT. IF ALV_CONTAINER IS INITIAL. CREATE OBJECT ALV_CONTAINER EXPORTING CONTAINER_NAME = 'MY_CONTROL_AREA'. CREATE OBJECT ALV_CLASS EXPORTING I_PARENT = ALV_CONTAINER. CREATE OBJECT GR_EVENTS. SET HANDLER GR_EVENTS->ON_DOUBLE_CLICK FOR LR_EVENTS. ENDIF. ENDMODULE. Надо чтоб при двойном клике он передавал данные со строчки, на которую кликаешь, как это можно реализовать? Code: DATA:
gt_usr TYPE TABLE OF zobur. *----------------------------------------------------------------------* * CLASS cl_event_handler DEFINITION *----------------------------------------------------------------------* CLASS cl_event_handler DEFINITION. PUBLIC SECTION. CLASS-METHODS on_before_salv_function " BEFORE_SALV_FUNCTION FOR EVENT if_salv_events_functions~before_salv_function OF cl_salv_events_table IMPORTING e_salv_function. CLASS-METHODS on_after_salv_function " AFTER_SALV_FUNCTION FOR EVENT if_salv_events_functions~before_salv_function OF cl_salv_events_table IMPORTING e_salv_function. CLASS-METHODS on_added_function " ADDED_FUNCTION FOR EVENT if_salv_events_functions~added_function OF cl_salv_events_table IMPORTING e_salv_function. CLASS-METHODS on_top_of_page " TOP_OF_PAGE FOR EVENT if_salv_events_list~top_of_page OF cl_salv_events_table IMPORTING r_top_of_page page table_index. CLASS-METHODS on_end_of_page " END_OF_PAGE FOR EVENT if_salv_events_list~end_of_page OF cl_salv_events_table IMPORTING r_end_of_page page. CLASS-METHODS on_double_click " DOUBLE_CLICK FOR EVENT if_salv_events_actions_table~double_click OF cl_salv_events_table IMPORTING row column. CLASS-METHODS on_link_click " LINK_CLICK FOR EVENT if_salv_events_actions_table~link_click OF cl_salv_events_table IMPORTING row column. ENDCLASS. "cl_event_handler DEFINITION *----------------------------------------------------------------------* * CLASS cl_event_handler IMPLEMENTATION *----------------------------------------------------------------------* CLASS cl_event_handler IMPLEMENTATION. METHOD on_before_salv_function. BREAK-POINT. ENDMETHOD. "on_before_salv_function METHOD on_after_salv_function. BREAK-POINT. ENDMETHOD. "on_after_salv_function METHOD on_added_function. BREAK-POINT. ENDMETHOD. "on_added_function METHOD on_top_of_page. BREAK-POINT. ENDMETHOD. "on_top_of_page METHOD on_end_of_page. BREAK-POINT. ENDMETHOD. "on_end_of_page METHOD on_double_click. *Здесь происходит обработка двойного клика* BREAK-POINT. ENDMETHOD. "on_double_click METHOD on_link_click. BREAK-POINT. ENDMETHOD. "on_link_click ENDCLASS. "cl_event_handler IMPLEMENTATION *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. * read sample data to internal table SELECT * FROM zobur UP TO 30 ROWS into TABLE gt_usr ORDER BY pernr. PERFORM display_alv. *&---------------------------------------------------------------------* *& Form display_alv *&---------------------------------------------------------------------* FORM display_alv. DATA: lo_table TYPE REF TO cl_salv_table, lo_events TYPE REF TO cl_salv_events_table, lo_columns TYPE REF TO cl_salv_columns_table, lo_column TYPE REF TO cl_salv_column_list. TRY. CALL METHOD cl_salv_table=>factory IMPORTING r_salv_table = lo_table CHANGING t_table = gt_usr. lo_events = lo_table->get_event( ). SET HANDLER cl_event_handler=>on_before_salv_function FOR lo_events. SET HANDLER cl_event_handler=>on_after_salv_function FOR lo_events. SET HANDLER cl_event_handler=>on_added_function FOR lo_events. SET HANDLER cl_event_handler=>on_top_of_page FOR lo_events. SET HANDLER cl_event_handler=>on_end_of_page FOR lo_events. SET HANDLER cl_event_handler=>on_double_click FOR lo_events. SET HANDLER cl_event_handler=>on_link_click FOR lo_events. * ALV-Toolbar lo_table->set_screen_status( pfstatus = 'STANDARD_FULLSCREEN' report = 'SAPLSLVC_FULLSCREEN' set_functions = lo_table->c_functions_all ). * Set column as hotspot lo_columns = lo_table->get_columns( ). lo_column ?= lo_columns->get_column( 'PERNR' ). lo_column->set_cell_type( if_salv_c_cell_type=>hotspot ). lo_table->display( ). lo_table->display( ). CATCH cx_salv_msg. " cl_salv_table=>factory() WRITE: / 'cx_salv_msg exception'. STOP. ENDTRY. ENDFORM. |
Автор: | Kuranov.Dmitry [ Вт, май 29 2018, 15:38 ] |
Заголовок сообщения: | Re: Двойной клик в ALV |
у метода ON_DOUBLE_CLICK есть два параметрa ROW и COLUMN там указано куда кликнул пользователь. ROW-строка COLUMN колонка |
Автор: | exotik [ Вт, май 29 2018, 15:45 ] |
Заголовок сообщения: | Re: Двойной клик в ALV |
Разобрался) |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |