ABAP ALV: Customizing User Commands with Callback Functions

It will be same as ALV EVENTS mentioned above only the call back program parameter will change while calling the FM REUSE_ALV_GRID_DISPLAY. we will pass the user command and perform the action accordingly.

Please see the highlighted part which is different from the program mentioned for ALV EVENTS

Example

**&---------------------------------------------------------------------*
**& Report  ZALV_TEST_1
**&
**&---------------------------------------------------------------------*
**&
**&
**&---------------------------------------------------------------------*
*
REPORT ZALV_TEST_1.
TABLES : vbap.
TYPES : BEGIN OF TY_VBAP,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
MATNR TYPE VBAP-MATNR,
NETWR TYPE VBAP-NETWR,
END OF TY_VBAP.
DATA : It_VBAP TYPE TABLE OF TY_VBAP .
DATA : WA_VBAP TYPE TY_VBAP .
 
DATA : i_fcat TYPE slis_t_fieldcat_alv,
wa_fcat like LINE OF i_fcat,
i_sort TYPE slis_t_sortinfo_alv,
wa_sort LIKE LINE OF i_sort,
wa_layout TYPE slis_layout_alv.
DATA : I_EVENTS TYPE SLIS_T_EVENT .
DATA : WA_EVENTS LIKE LINE OF I_EVENTS .
DATA : I_HEADING TYPE SLIS_T_LISTHEADER .
DATA : WA_HEADING LIKE LINE OF I_HEADING .
SELECT-OPTIONS : s_vbeln for vbap-vbeln.
*PARAMETER : s_vbeln TYPE vbap-vbeln.
 
PERFORM get_data.
PERFORM fieldcat.
PERFORM sort.
PERFORM GET_EVENTS .
PERFORM get_disp.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .
SELECT VBELN
POSNR
MATNR
NETWR
FROM vbap
INTO TABLE it_vbap
WHERE vbeln in s_vbeln.
ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fieldcat .
wa_fcat-fieldname = 'VBELN'.
wa_fcat-col_pos = '1'.
wa_fcat-tabname = 'it_vbap'.
wa_fcat-seltext_m = 'sd_no'.
wa_fcat-key = 'x'.
WA_FCAT-HOTSPOT = 'X' .
APPEND wa_fcat to i_fcat.
 
WA_FCAT-COL_POS = '2' .
WA_FCAT-FIELDNAME = 'POSNR' .
WA_FCAT-TABNAME = 'I_VBAP' .
WA_FCAT-SELTEXT_M = 'ITEMNO' .
*  WA_FCAT-NO_OUT = 'X' .
WA_FCAT-HOTSPOT = 'X' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .
 
WA_FCAT-COL_POS = '3' .
WA_FCAT-FIELDNAME = 'MATNR' .
WA_FCAT-TABNAME = 'I_VBAP' .
WA_FCAT-SELTEXT_M = 'MATERIALNO' .
WA_FCAT-EDIT = 'X' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .
 
WA_FCAT-COL_POS = '4' .
WA_FCAT-FIELDNAME = 'NETWR' .
WA_FCAT-TABNAME = 'I_VBAP' .
WA_FCAT-SELTEXT_M = 'NETPRICE' .
WA_FCAT-EMPHASIZE = 'C610'.
WA_FCAT-DO_SUM = 'X' .
APPEND WA_FCAT TO I_FCAT .
CLEAR WA_FCAT .
ENDFORM.                    " FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  SORT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM sort .
*wa_sort-fieldname = 'VBELN'.
* WA_SORT-UP = 'X'.
*  WA_SORT-SUBTOT = 'X '.
*  APPEND WA_SORT TO I_SORT .
ENDFORM.                    " SORT
*&---------------------------------------------------------------------*
*&      Form  GET_DISP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_disp .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
*   I_INTERFACE_CHECK                 = ' '
*   I_BYPASSING_BUFFER                = ' '
*   I_BUFFER_ACTIVE                   = ' '
I_CALLBACK_PROGRAM                = sy-repid
*   I_CALLBACK_PF_STATUS_SET          = ' '
I_CALLBACK_USER_COMMAND           = 'USER_COMMAND'
*   I_CALLBACK_TOP_OF_PAGE            = ' '
*   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
*   I_CALLBACK_HTML_END_OF_LIST       = ' '
*   I_STRUCTURE_NAME                  = i_
*   I_BACKGROUND_ID                   = ' '
*   I_GRID_TITLE                      =
*   I_GRID_SETTINGS                   =
*   IS_LAYOUT                         =
IT_FIELDCAT                       = i_fcat
*   IT_EXCLUDING                      =
*   IT_SPECIAL_GROUPS                 =
IT_SORT                           = i_sort
*   IT_FILTER                         =
*   IS_SEL_HIDE                       =
I_DEFAULT                         = 'S'
*   I_SAVE                            = ' '
*   IS_VARIANT                        =
IT_EVENTS                         = i_events
*   IT_EVENT_EXIT                     =
*   IS_PRINT                          =
*   IS_REPREP_ID                      =
*   I_SCREEN_START_COLUMN             = 0
*   I_SCREEN_START_LINE               = 0
*   I_SCREEN_END_COLUMN               = 0
*   I_SCREEN_END_LINE                 = 0
*   I_HTML_HEIGHT_TOP                 = 0
*   I_HTML_HEIGHT_END                 = 0
*   IT_ALV_GRAPHICS                   =
*   IT_HYPERLINK                      =
*   IT_ADD_FIELDCAT                   =
*   IT_EXCEPT_QINFO                   =
*   IR_SALV_FULLSCREEN_ADAPTER        =
* IMPORTING
*   E_EXIT_CAUSED_BY_CALLER           =
*   ES_EXIT_CAUSED_BY_USER            =
TABLES
t_outtab                          = it_vbap
* EXCEPTIONS
*   PROGRAM_ERROR                     = 1
*   OTHERS                            = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
 
ENDFORM.                    " GET_DISP
*&---------------------------------------------------------------------*
*&      Form  GET_EVENTS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_events .
 
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
* EXPORTING
*   I_LIST_TYPE           = 0
IMPORTING
ET_EVENTS             = I_EVENTS .
 
READ TABLE I_EVENTS INTO WA_EVENTS WITH KEY NAME = 'TOP_OF_PAGE' .
WA_EVENTS-FORM = 'FORM_TOP_OF_PAGE' .
MODIFY  I_EVENTS FROM WA_EVENTS INDEX SY-TABIX .
 
ENDFORM.                    " GET_EVENTS
 
FORM FORM_TOP_OF_PAGE.
wa_heading-typ = 'H'.
wa_heading-info = 'sales order report'.
APPEND WA_HEADING TO I_HEADING .
 
WA_HEADING-TYP = 'S' .
WA_HEADING-KEY = 'USERNAME' .
WA_HEADING-INFO = SY-UNAME .
APPEND WA_HEADING TO I_HEADING .
 
WA_HEADING-TYP = 'A' .
WA_HEADING-KEY = 'DATE' .
WA_HEADING-INFO = SY-DATUM .
APPEND WA_HEADING TO I_HEADING .
 
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary       = i_heading
*     I_LOGO                   =
*     I_END_OF_LIST_GRID       =
*     I_ALV_FORM               =
.
 
ENDFORM.
 
FORM user_command USING r_ucomm TYPE sy-ucomm
                         rs_selfield TYPE slis_selfield.
   CASE R_UCOMM.
     WHEN '&IC1'.
       READ TABLE it_vbap INTO wa_vbap INDEX rs_selfield-tabindex.
       if sy-subrc = 0.
         SET PARAMETER ID 'vbeln' FIELD wa_vbap-vbeln.
         CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
         ENDIF.
 *    WHEN .
 *    WHEN OTHERS.
   ENDCASE.
   ENDFORM.

To provide ALV as input help, we need to use function module REUSE_ALV_POPUP_TO_SELECTunder event AT SELECTION-SCREEN ON VALUE-REQUEST , for this requirement, we need to provide checkbox in popup ALV, we need to create field catalog .

Leave a comment