Thursday, September 6, 2018

INTERACTIVE ALV USING OOABAP (FACTORY METHOD)& EVENTS

 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.
TYPESBEGIN OF TY_MARA ,
      MATNR TYPE MARA-MATNR,
      MTART TYPE MARA-MTART,
      MBRSH TYPE MARA-MBRSH ,
      MEINS TYPE MARA-MEINS,
      END OF TY_MARA.

DATAIT_MARA TYPE TABLE OF TY_MARA.
DATAWA_MARA TYPE          TY_MARA.
***CREATING OBJECT THAT REFERNCES CL_SALV_TABLE
DATAOO_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

DATALT_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE .
**FOR PARTICULAR COLUMN ******************
DATALT_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.

DATAGR_EVENT TYPE REF  TO LCL_HANDLER_EVENTS.
**NOW REGISTERING THE EVENTS **************
DATALR_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 .