INTERACTIVE ALV USING OOABAP (FACTORY METHOD)& EVENTS.
They are multiple ways of making a interactive alv using OOABAP ,using container , create screen , creating fieldcatlog. but if you don't want to create go with factory method.
You can use factory method to simply display alv output. but the question lies how to design Intercative ALV , handling the double click and sending that value and performing the corresponding task . We have to use EVENTS , you need to create a local event handler class and use ON_CLICK_LINK and get the value trigger it. call the transaction if you need it . or open a new item table easily.
*&---------------------------------------------------------------------*
*& Report ZOOALVWITHHOTSPOT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZOOALVWITHHOTSPOT.
TYPES: BEGIN OF TY_MARA ,
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH ,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.
DATA: IT_MARA TYPE TABLE OF TY_MARA.
DATA: WA_MARA TYPE TY_MARA.
***CREATING OBJECT THAT REFERNCES CL_SALV_TABLE
DATA: OO_ALV TYPE REF TO CL_SALV_TABLE.
* FOR HOTSPOT WE NEED TO GET THE COLUMNS AS WELL AS SINGLE COLUMN ON WHICH WE WILL APPLY HOTSPOT
DATA: LT_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE .
**FOR PARTICULAR COLUMN ******************
DATA: LT_COL TYPE REF TO CL_SALV_COLUMN_TABLE.
SELECT MATNR
MTART
MBRSH
MEINS
FROM MARA INTO TABLE IT_MARA UP TO 30 ROWS.
*TRY.
CALL METHOD CL_SALV_TABLE=>FACTORY
* EXPORTING
* LIST_DISPLAY = IF_SALV_C_BOOL_SAP=>FALSE
* R_CONTAINER =
* CONTAINER_NAME =
IMPORTING
R_SALV_TABLE = OO_ALV
CHANGING
T_TABLE = IT_MARA
.
* CATCH CX_SALV_MSG .
*ENDTRY.
***************NOW CALL THE METHOD TO GET THE PARTICULAR COLUMN , WE USE GET_COLUMN TO GET THE PARTICULAR FIELD NAME.
CALL METHOD OO_ALV->GET_COLUMNS
RECEIVING
VALUE = LT_COLUMNS
.
IF LT_COLUMNS IS NOT INITIAL.
LT_COL ?= LT_COLUMNS->GET_COLUMN('MATNR')."FIELD ON WHICH YOU WANT THE HOTSPOT"
CALL METHOD LT_COL->SET_CELL_TYPE
EXPORTING
VALUE = IF_SALV_C_CELL_TYPE=>HOTSPOT
.
ENDIF.
********making the list interactive using ALV_EVENTS
**CREATE A LOCAL CLASS OF EVENT HANDLER ******
CLASS LCL_HANDLER_EVENTS DEFINITION.
PUBLIC SECTION.
METHODS ON_LINE_CLICK FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE IMPORTING
ROW COLUMN. "EVENT HANDLER IMPORTING ROW AND COLUMN OF THR CLICKED VALUE
ENDCLASS.
* DATA HERE IS REFERING TO LOCAL CLASS OF EVENT HANDLER CLASS.
DATA: GR_EVENT TYPE REF TO LCL_HANDLER_EVENTS.
**NOW REGISTERING THE EVENTS **************
DATA: LR_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE. "REFERING TO STANDARD CLASS FOR EVENTS"
LR_EVENTS = OO_ALV->GET_EVENT( )."GETTING THE EVENTS "
**CREATING OBJECT OF GR_EVENTS.
CREATE OBJECT GR_EVENT .
*******NOW SETTING THE EVENT HANDLER ON LINR CLICK FOR THE PARTICULAR FIELD
SET HANDLER GR_EVENT->ON_LINE_CLICK FOR LR_EVENTS.
OO_ALV->DISPLAY( ).
***********NOW THE IMPLEMENTATION PART ***************************
CLASS LCL_HANDLER_EVENTS IMPLEMENTATION.
METHOD ON_LINE_CLICK .
****HANDLE DOUBLE CLICK
READ TABLE IT_MARA INTO WA_MARA INDEX ROW.
IF SY-SUBRC IS INITIAL.
SET PARAMETER ID 'MAT' FIELD WA_MARA-MATNR .
CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN .
ENDIF.
ENDMETHOD.
ENDCLASS.
if you double click on any material number you will redirected to MM02 .
They are multiple ways of making a interactive alv using OOABAP ,using container , create screen , creating fieldcatlog. but if you don't want to create go with factory method.
You can use factory method to simply display alv output. but the question lies how to design Intercative ALV , handling the double click and sending that value and performing the corresponding task . We have to use EVENTS , you need to create a local event handler class and use ON_CLICK_LINK and get the value trigger it. call the transaction if you need it . or open a new item table easily.
*&---------------------------------------------------------------------*
*& Report ZOOALVWITHHOTSPOT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZOOALVWITHHOTSPOT.
TYPES: BEGIN OF TY_MARA ,
MATNR TYPE MARA-MATNR,
MTART TYPE MARA-MTART,
MBRSH TYPE MARA-MBRSH ,
MEINS TYPE MARA-MEINS,
END OF TY_MARA.
DATA: IT_MARA TYPE TABLE OF TY_MARA.
DATA: WA_MARA TYPE TY_MARA.
***CREATING OBJECT THAT REFERNCES CL_SALV_TABLE
DATA: OO_ALV TYPE REF TO CL_SALV_TABLE.
* FOR HOTSPOT WE NEED TO GET THE COLUMNS AS WELL AS SINGLE COLUMN ON WHICH WE WILL APPLY HOTSPOT
DATA: LT_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE .
**FOR PARTICULAR COLUMN ******************
DATA: LT_COL TYPE REF TO CL_SALV_COLUMN_TABLE.
SELECT MATNR
MTART
MBRSH
MEINS
FROM MARA INTO TABLE IT_MARA UP TO 30 ROWS.
*TRY.
CALL METHOD CL_SALV_TABLE=>FACTORY
* EXPORTING
* LIST_DISPLAY = IF_SALV_C_BOOL_SAP=>FALSE
* R_CONTAINER =
* CONTAINER_NAME =
IMPORTING
R_SALV_TABLE = OO_ALV
CHANGING
T_TABLE = IT_MARA
.
* CATCH CX_SALV_MSG .
*ENDTRY.
***************NOW CALL THE METHOD TO GET THE PARTICULAR COLUMN , WE USE GET_COLUMN TO GET THE PARTICULAR FIELD NAME.
CALL METHOD OO_ALV->GET_COLUMNS
RECEIVING
VALUE = LT_COLUMNS
.
IF LT_COLUMNS IS NOT INITIAL.
LT_COL ?= LT_COLUMNS->GET_COLUMN('MATNR')."FIELD ON WHICH YOU WANT THE HOTSPOT"
CALL METHOD LT_COL->SET_CELL_TYPE
EXPORTING
VALUE = IF_SALV_C_CELL_TYPE=>HOTSPOT
.
ENDIF.
********making the list interactive using ALV_EVENTS
**CREATE A LOCAL CLASS OF EVENT HANDLER ******
CLASS LCL_HANDLER_EVENTS DEFINITION.
PUBLIC SECTION.
METHODS ON_LINE_CLICK FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE IMPORTING
ROW COLUMN. "EVENT HANDLER IMPORTING ROW AND COLUMN OF THR CLICKED VALUE
ENDCLASS.
* DATA HERE IS REFERING TO LOCAL CLASS OF EVENT HANDLER CLASS.
DATA: GR_EVENT TYPE REF TO LCL_HANDLER_EVENTS.
**NOW REGISTERING THE EVENTS **************
DATA: LR_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE. "REFERING TO STANDARD CLASS FOR EVENTS"
LR_EVENTS = OO_ALV->GET_EVENT( )."GETTING THE EVENTS "
**CREATING OBJECT OF GR_EVENTS.
CREATE OBJECT GR_EVENT .
*******NOW SETTING THE EVENT HANDLER ON LINR CLICK FOR THE PARTICULAR FIELD
SET HANDLER GR_EVENT->ON_LINE_CLICK FOR LR_EVENTS.
OO_ALV->DISPLAY( ).
***********NOW THE IMPLEMENTATION PART ***************************
CLASS LCL_HANDLER_EVENTS IMPLEMENTATION.
METHOD ON_LINE_CLICK .
****HANDLE DOUBLE CLICK
READ TABLE IT_MARA INTO WA_MARA INDEX ROW.
IF SY-SUBRC IS INITIAL.
SET PARAMETER ID 'MAT' FIELD WA_MARA-MATNR .
CALL TRANSACTION 'MM02' AND SKIP FIRST SCREEN .
ENDIF.
ENDMETHOD.
ENDCLASS.
if you double click on any material number you will redirected to MM02 .