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.