handle-double-click-on-alv-by-cl_salv_table-events

作者:郑德鼎 约 5 分钟阅读 更新日期:2024-02-22 2 年前更新 标签:ABAP, 开发
CLASS lcl_event_handle DEFINITION.

PUBLIC SECTION.

METHODS : hndl_double_click FOR EVENT double_click

OF cl_salv_events_table

IMPORTING  row

column.

ENDCLASS.
CLASS lcl_event_handle IMPLEMENTATION.
METHOD hndl_double_click.

MESSAGE  ‘Row clicked.’ TYPE ‘I’ .

ENDMETHOD.
ENDCLASS.
CLASS lcl_salv_tab DEFINITION.

PUBLIC SECTION.

CLASS-METHODS : main IMPORTING

i_list     TYPE xfeld

i_grid     TYPE xfeld

i_alv_tb   TYPE c,

fetch_records,

get_alv_instance IMPORTING

i_list     TYPE xfeld

i_grid     TYPE xfeld

i_alv_tb   TYPE c,

display_alv.

PRIVATE SECTION.

TYPE-POOLS : icon, sym.

TYPES : BEGIN OF ty_flight,

status TYPE c LENGTH 1,

icon   TYPE icon_d, ” char – 4

symbol TYPE icon_d. ” char – 4

INCLUDE TYPE sflight.

TYPES : END OF ty_flight.

CLASS-DATA : lt           TYPE TABLE OF ty_flight,

ls           TYPE ty_flight,

lo_salv_tab  TYPE REF TO cl_salv_table,

lo_func      TYPE REF TO cl_salv_functions_list,

lo_cols      TYPE REF TO cl_salv_columns_table,

lo_col       TYPE REF TO cl_salv_column,

lo_col_icon  TYPE REF TO cl_salv_column,

lo_icon      TYPE REF TO cl_salv_column_table,

lo_col_sym   TYPE REF TO cl_salv_column,

lo_symbol    TYPE REF TO cl_salv_column_table,

rem_seat     TYPE i,

lt_icon      TYPE TABLE OF icon,

ls_icon      TYPE icon,

lo_event     TYPE REF TO cl_salv_events_table,

lo_handle    TYPE REF TO lcl_event_handle .

ENDCLASS.
CLASS lcl_salv_tab IMPLEMENTATION.
METHOD main.

fetch_records( ).

CREATE OBJECT lo_handle.
get_alv_instance( EXPORTING  i_list     = i_list

i_grid     = i_grid

i_alv_tb   = i_alv_tb ).
CALL METHOD lo_salv_tab->get_event

RECEIVING

value  = lo_event.    “Get all the Events of the table

SET HANDLER lo_handle->hndl_double_click FOR lo_event.

display_alv( ).

ENDMETHOD.
METHOD fetch_records.

DATA indx TYPE sy-tabix.

DATA line  TYPE i.

SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE lt UP                                                                                       TO 40 ROWS.

line = LINES( lt ).

SELECT * FROM icon INTO TABLE lt_icon UP TO line ROWS.
LOOP AT  lt INTO ls.

indx = sy-tabix.

rem_seat = ls-seatsmax_b – ls-seatsocc_b.

IF  rem_seat = 0.

ls-status = 1 .

ELSEIF rem_seat LE 10.

ls-status = 2.

ELSE.

ls-status = 3.

ENDIF.

ls-symbol = sym_caution.

READ TABLE lt_icon INTO ls_icon INDEX indx .
IF sy-subrc = 0.
ls-icon = ls_icon-id.
ENDIF.
IF indx <> 0.
MODIFY LT FROM ls INDEX indx TRANSPORTING status icon symbol .
ENDIF.

CLEAR ls.

ENDLOOP.
ENDMETHOD.
METHOD get_alv_instance.

DATA : flag.

IF i_list = ‘X’ OR i_grid = ‘X’.
IF i_list = ‘X’.

flag = ‘X’.

ELSE.

flag = ‘ ‘.

ENDIF.
TRY.
CALL METHOD cl_salv_table=>factory

EXPORTING

list_display   = flag

IMPORTING

r_salv_table   = lo_salv_tab

CHANGING

t_table        = lt.

IF i_alv_tb = abap_true.

**Begin- Displaying toolbar on alv **

CALL METHOD lo_salv_tab->get_functions ” Get the instance of                                                                                      “alv toolbal button

RECEIVING

value  = lo_func.
CALL METHOD lo_func->set_default ” pass ‘TRUE’ to display                                                                                 “toobar on alv

EXPORTING

value  = if_salv_c_bool_sap=>true.

**End- Displaying toolbar on alv**

ENDIF.

** Begin – Hides paritular column of the table in the list or grid**

CALL METHOD lo_salv_tab->get_columns

RECEIVING

value  = lo_cols.
TRY.
CALL METHOD lo_cols->get_column

EXPORTING

columnname = ‘MANDT’

RECEIVING

value      = lo_col.
CALL METHOD lo_col->set_technical

EXPORTING

value  = if_salv_c_bool_sap=>true.
CATCH cx_salv_not_found .
ENDTRY.

** End – Hides paritular column of the table in the list or grid**

** Begin – Set status field as traffic icon **

TRY.
CALL METHOD lo_cols->set_exception_column

EXPORTING

value     = ‘STATUS’.

CATCH cx_salv_data_error .
ENDTRY.

**End – Set status field as traffic icon **

**Begin – Set icon for the column ICON**

TRY.
CALL METHOD lo_cols->get_column

EXPORTING

columnname = ‘ICON’

RECEIVING

value      = lo_col_icon.
lo_icon ?= lo_col_icon.
CALL METHOD lo_icon->set_icon

EXPORTING

value  = if_salv_c_bool_sap=>true.
CALL METHOD lo_icon->set_long_text

EXPORTING

value  = ‘Icon’.

CATCH cx_salv_not_found .
ENDTRY.

**End – Set icon for the column ICON**

**Start- Symbol**

TRY.
CALL METHOD lo_cols->get_column

EXPORTING

columnname = ‘SYMBOL’

RECEIVING

value      = lo_col_sym.
lo_symbol ?= lo_col_sym.
CALL METHOD lo_symbol->set_symbol

EXPORTING

value  = if_salv_c_bool_sap=>true  .
CALL METHOD lo_symbol->set_long_text

EXPORTING

value  = ‘Symbol’.  ” Column name set

CATCH cx_salv_not_found .
ENDTRY.

**End symbol**

CATCH cx_salv_msg .
ENDTRY.
ENDIF.
ENDMETHOD.
METHOD display_alv.
CALL METHOD lo_salv_tab->display.
ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.

PARAMETERS : list      RADIOBUTTON GROUP g1,

grid      RADIOBUTTON GROUP g1,

alv_tool  AS CHECKBOX.

SELECTION-SCREEN END OF BLOCK b1.
CALL METHOD lcl_salv_tab=>main EXPORTING

i_list     = list

i_grid     = grid

i_alv_tb   = alv_tool.

Step2.

Step3. Double click on any line line.

Step4. Here is the event output.

How to Add button and hotspot in ALV OOPS

*&---------------------------------------------------------------------*

*& Report  YKC_OOPS_ALV                                                *

*&                                                                     *

*&---------------------------------------------------------------------*

*&  Learn how to make ALV through OOPS

*

*&  How to add hotspot, & buttons

*&  Author: Krishna, Prepared on 6 Nov 08

*&---------------------------------------------------------------------*

REPORT  ykc_oops_alv                            .
TABLES: mara.
DATA: BEGIN OF it_tab OCCURS 0,

matnr LIKE mara-matnr,

ersda LIKE mara-ersda,  "creation date

ernam LIKE mara-ernam,  "person created

pstat LIKE mara-pstat,  "maint stat

lvorm LIKE mara-lvorm,  "flg for deletion

mtart LIKE mara-mtart,  "mat type

meins LIKE mara-meins,  "uom

END OF it_tab.
DATA: wa_it_tab LIKE LINE OF it_tab.
CLASS lcl_events_d0100 DEFINITION DEFERRED.

DATA gr_events_d0100 TYPE REF TO lcl_events_d0100.

*---------------------------------------------------------------------*

*       CLASS lcl_events_d0100 DEFINITION

*---------------------------------------------------------------------*

CLASS lcl_events_d0100 DEFINITION.

PUBLIC SECTION.

METHODS:

double_click

FOR EVENT double_click OF cl_gui_alv_grid

IMPORTING e_row

e_column,

handle_hotspot_click

FOR EVENT hotspot_click OF cl_gui_alv_grid

IMPORTING

e_row_id

e_column_id

es_row_no

sender,

*---code addition for ALV pushbuttons

*--for placing buttons

handle_toolbar_set

FOR EVENT toolbar OF cl_gui_alv_grid

IMPORTING

e_object

e_interactive,

*---user command on clicking a button

handle_user_command

FOR EVENT user_command OF cl_gui_alv_grid

IMPORTING

e_ucomm.

ENDCLASS.                    "lcl_events_d0100 DEFINITION

TYPE-POOLS cndp.

• custom container

DATA container TYPE REF TO cl_gui_custom_container.

** Definition of Control Framework

*CLASS cl_gui_cfw DEFINITION LOAD.

*----------------------------------------------------------------------*

*                     LOCAL VARIABLE

*----------------------------------------------------------------------*

DATA ok_code TYPE sy-ucomm.

*----------------------------------------------------------------------*

*                       FOR VARIANT

*----------------------------------------------------------------------*

DATA st_var TYPE disvariant .

DATA save TYPE c.

st_var-report = 'YKC_OOPS_ALV'.

save = 'A'.

*----------------------------------------------------------------------*

*         FOR LAYOUT

*----------------------------------------------------------------------*

DATA loyo TYPE lvc_s_layo.

loyo-zebra = 'X'.

loyo-detailinit = 'X'.

loyo-info_fname = 'RED'.

*----------------------------------------------------------------------*

*           FOR FIELD CATALOG

*----------------------------------------------------------------------*

DATA fcat TYPE lvc_t_fcat.

DATA wa_fcat LIKE LINE OF fcat.

DATA ref_container TYPE REF TO cl_gui_custom_container.

DATA ref_grid TYPE REF TO cl_gui_alv_grid.

*Declaration for toolbar buttons

*---FOR FIELD CATALOG

DATA : ty_toolbar      TYPE stb_button.

DATA : e_object        TYPE REF TO cl_alv_event_toolbar_set,

io_alv_toolbar  TYPE REF TO cl_alv_event_toolbar_set.

"Alv toolbar

DATA: event_receiver1  TYPE REF TO lcl_events_d0100.
CREATE OBJECT ref_container

EXPORTING

container_name = 'CONTAINER'.

CREATE OBJECT ref_grid

EXPORTING

i_parent = ref_container.

*---------------------------------------------------------------------*

*       CLASS lcl_events_d0100 IMPLEMENTATION

*---------------------------------------------------------------------*

CLASS lcl_events_d0100 IMPLEMENTATION.

*---------------------------------------------------------------------*

*       METHOD double_click                                           *

*---------------------------------------------------------------------*

*       ........                                                      *

*---------------------------------------------------------------------*

METHOD double_click.

*    PERFORM d0100_event_double_click USING  e_row

*                                             e_column .

*---remember when using double click hotspot will not work

ENDMETHOD.                    "double_click

*---method for hotspot

METHOD handle_hotspot_click.
DATA: ls_col_id   TYPE lvc_s_col.
READ TABLE it_tab INTO wa_it_tab

INDEX e_row_id-index.

IF sy-subrc = 0.

CHECK ( wa_it_tab-lvorm IS NOT INITIAL ).

CASE e_column_id-fieldname.

WHEN 'LVORM'.

LEAVE PROGRAM.

WHEN OTHERS.

*       do nothing

ENDCASE.
CALL METHOD ref_grid->set_current_cell_via_id

EXPORTING

is_row_id    = e_row_id

...

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「handle-double-click-on-alv-by-cl_salv_table-events.docx」整理生成,仅用于内部技术分享与学习交流。