CLASS lcl_event_handle DEFINITION.PUBLIC SECTION.
METHODS : hndl_double_click FOR EVENT double_clickOF 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 IMPORTINGi_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_listi_grid = i_grid
i_alv_tb = i_alv_tb ).CALL METHOD lo_salv_tab->get_eventRECEIVING
value = lo_event. “Get all the Events of the tableSET 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=>factoryEXPORTING
list_display = flag
IMPORTING
r_salv_table = lo_salv_tabCHANGING
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 buttonRECEIVING
value = lo_func.CALL METHOD lo_func->set_default ” pass ‘TRUE’ to display “toobar on alvEXPORTING
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_columnsRECEIVING
value = lo_cols.TRY.CALL METHOD lo_cols->get_columnEXPORTING
columnname = ‘MANDT’
RECEIVING
value = lo_col.CALL METHOD lo_col->set_technicalEXPORTING
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_columnEXPORTING
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_columnEXPORTING
columnname = ‘ICON’
RECEIVING
value = lo_col_icon.lo_icon ?= lo_col_icon.CALL METHOD lo_icon->set_iconEXPORTING
value = if_salv_c_bool_sap=>true.CALL METHOD lo_icon->set_long_textEXPORTING
value = ‘Icon’.
CATCH cx_salv_not_found .ENDTRY.**End – Set icon for the column ICON**
**Start- Symbol**
TRY.CALL METHOD lo_cols->get_columnEXPORTING
columnname = ‘SYMBOL’
RECEIVING
value = lo_col_sym.lo_symbol ?= lo_col_sym.CALL METHOD lo_symbol->set_symbolEXPORTING
value = if_salv_c_bool_sap=>true .CALL METHOD lo_symbol->set_long_textEXPORTING
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 EXPORTINGi_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 DEFINITIONTYPE-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_containerEXPORTING
container_name = 'CONTAINER'.
CREATE OBJECT ref_gridEXPORTING
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_tabINDEX 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_idEXPORTING
is_row_id = e_row_id
...