Enterprise Architecture Blog Posts
Need a little more room to share your thoughts with the community? Post a blog in the SAP Enterprise Architecture group to explain the more complex topics.
cancel
Showing results for 
Search instead for 
Did you mean: 
Swetha_Irugu
Explorer
0 Kudos
1,052

Introduction 
 
In this Blog, I am going to explain Displaying BAPI for Material Document Tables (MKPF, MSEG) using OOPS Interactive ALV by Double Click Event. 
 
Here, I have done BAPI get detail for Material Document using BAPI_GOODSMVT_GETDETAIL using Double click event displaying Header table (MKPF) navigate to Item table (MSEG) in a same screen using oops interactive ALV. 

STEP – 1: Go to SE38 transaction code, Create Program, shown as below 

Swetha_Irugu_0-1740992447806.png

STEP - 2: Click on create a popup will be displayed as below, enter title description, type as Executable Program and Click on Save button. Then provide Package and request number. 

Swetha_Irugu_1-1740992447808.png

STEP – 3: Declare a deferred class future, and inside it declare all data declarations for tables, field catalogs and for grid & container. 

Swetha_Irugu_2-1740992447810.png

STEP – 4: Define Parameters for user input. 

Swetha_Irugu_3-1740992447811.png

STEP – 5: Define the local (handler) class – CL_EVENT. The event manager should have a BAPI_INTERACTIVE and a method for handling double click. Each method should be set to respond to an event (respectively: double_click ). 

Swetha_Irugu_4-1740992447812.png

CODE:  

"DEFINE A LOCAL(HANDLER) FOR CLASS - CL_EVENT. 
CLASS CL_EVENT DEFINITION. 
   PUBLIC SECTION. 
     " DEFINE A METHOD FOR HANDLE(EVENT) TO DOUBLE-CLICK EVENT.     " THIS METHOD SHOULD BE COMPATIBLE WITH THE EVENT SIGNATURE DOUBLE_CLICK OF CL_GUI_ALV_GRID.     " E_ROW IS THE PARAMETER THAT WILL RECEIVE THE ROW NUMBER THAT WAS DOUBLE-CLICKED. 
     METHODS: BAPI_INTERACTIVE FOR EVENT DOUBLE_CLICK 
                              OF CL_GUI_ALV_GRID IMPORTING E_ROW. 
ENDCLASS. 
CLASS CL_EVENT IMPLEMENTATION. 
 
  METHOD BAPI_INTERACTIVE. " METHOD HAS BEEN DEFINED 
 
    READ TABLE LT_HEADER INTO LS_HEADER INDEX E_ROW-INDEX. " E_ROW-INDEX IS SELECTED FOR PARTICULAR ROW. 
 
    CALL FUNCTION 'BAPI_GOODSMVT_GETDETAIL' 
       EXPORTING 
         MATERIALDOCUMENT = P_MBLNR 
         MATDOCUMENTYEAR  = P_MJAHR 
       IMPORTING 
         GOODSMVT_HEADER  = LS_HEADER 
       TABLES 
         GOODSMVT_ITEMS   = LT_ITEMS 
         RETURN           = LT_RETURN. 
 
    PERFORM CONTAINER_2. " USED FOR TO DISPLAY CUSTOM CONTAINER 2. 
 
  ENDMETHOD. 
ENDCLASS. 

STEP – 6: Creating Layout for screen 100, first double clicks on Screen number 100 and click YES button in popup. 

Swetha_Irugu_5-1740992447813.png

STEP – 7: Enter Short Description & click on Layout. It will display Screen Painter  

Swetha_Irugu_6-1740992447815.png

Step-8: In Screen Painter click on custom container drag and drop on the screen and give the name for both containers by double click on containers then click on Save & Flow Logic, then check and activate as show in below- 

Swetha_Irugu_7-1740992447816.png

STEP – 9: In Flow Logic, uncomment both the PBO & PAI modules and double click on PBO module as show below- 

Swetha_Irugu_8-1740992447817.png

Click Yes button, it will show Popup click on Main screen as shown in below- 

Swetha_Irugu_9-1740992447818.png

STEP-10: Write code in PBO module for Screen 100 - 

Swetha_Irugu_10-1740992447819.png

Double click on STATUS and enter short text shown in above screenshot to add Function key i.e., BACK then click on activate and click back as shown below- 

Swetha_Irugu_11-1740992447821.png

Double click on Perform to display the first container as shown in below and click on yes button then select main screen and write code on perform- 

Swetha_Irugu_12-1740992447822.png

To call BAPI function click on Pattern -> enter BAPI_GOODSMVT_GETDETAIL in call method -> click enter.  

To create Object, click on Pattern -> select ABAP object pattern -> to create object select create object radio button enter instance & class name -> click enter. 

To display output, select call method -> enter instance, class & Method name (Set_Table_For_First_Display) as shown below- 

Swetha_Irugu_13-1740992447823.png

CODE:   

 *&---------------------------------------------------------------------* 
*&      Form  CONTAINER_1 
*&---------------------------------------------------------------------* FORM CONTAINER_1 . 
 
  "TO DISPLAY FIELDCATALOG 1 FIELDNAME WILL BE SAME AS BAPI FIELDS. 
   LT_FCAT = VALUE # 

( COL_POS = 1 FIELDNAME = 'MAT_DOC' TABNAME = 'LT_HEADER' COLTEXT = 'Material Document Number'    ) 

( COL_POS = 2 FIELDNAME = 'DOC_YEAR'TABNAME = 'LT_HEADER' COLTEXT = 'Material Document Year'      ) 

( COL_POS = 3 FIELDNAME = 'TR_EV_TYPE' TABNAME = 'LT_HEADER' COLTEXT = 'Transaction/Event Type'   ) 

( COL_POS = 4 FIELDNAME = 'DOC_DATE'   TABNAME = 'LT_HEADER' COLTEXT = 'Document Date'            ) 

( COL_POS = 5 FIELDNAME = 'PSTNG_DATE' TABNAME = 'LT_HEADER' COLTEXT = 'Posting Date '            ) 

( COL_POS = 6 FIELDNAME = 'ENTRY_DATE' TABNAME = 'LT_HEADER' COLTEXT = 'Document Created On'      ) 

( COL_POS = 7 FIELDNAME = 'ENTRY_TIME' TABNAME = 'LT_HEADER' COLTEXT = 'Time of Entry'            ) 

( COL_POS = 8 FIELDNAME = 'USERNAME'   TABNAME = 'LT_HEADER' COLTEXT = 'User name'                ) ). 
 
  " BAPI FOR TO GET MATERIAL DOCUMENT HEADER DETAILS. 
   CALL FUNCTION 'BAPI_GOODSMVT_GETDETAIL' 
     EXPORTING 
       MATERIALDOCUMENT = P_MBLNR 
       MATDOCUMENTYEAR  = P_MJAHR 
     IMPORTING 
       GOODSMVT_HEADER  = LS_HEADER 
     TABLES 
       GOODSMVT_ITEMS   = LT_ITEMS 
       RETURN           = LT_RETURN. 
 
  "APPEND TO MOVE DATA FROM WORK AREA TO INTERNAL TABLE. 
   APPEND LS_HEADER TO LT_HEADER. 
 
  "CREATE OBJECT FOR CONTAINER CLASS 1. 
   CREATE OBJECT OO_CONT 
     EXPORTING 
       CONTAINER_NAME = 'CONT'. "NAME WHICH IS GIVEN FOR 1ST CONTAINER IN LAYOUT. 
 
  "CREATE OBJECT FOR ALV_GRID 1. 
   CREATE OBJECT OO_GRID 
   EXPORTING 
     I_PARENT          = OO_CONT. "1ST CONTAINER OBJECT NAME. 
 
  "CALL METHOD FOR SET_TABLE_FOR_FIRST_DISPLAY USING CL_GUI_ALV_GRID CLASS FOR ALV_GRID 1 
   CALL METHOD OO_GRID->SET_TABLE_FOR_FIRST_DISPLAY 
     CHANGING 
       IT_OUTTAB                     = LT_HEADER "HEADER INTERNAL TABLE FOR 1ST GRID 
       IT_FIELDCATALOG               = LT_FCAT. 
 
 
  CREATE OBJECT OO_EVENT. 
 
  " BY USING SET HANDLER OBJECT WILL BE REGISTERED WITH METHOD FOR DISPLAYING ALV_GRID. 
   SET HANDLER OO_EVENT->BAPI_INTERACTIVE FOR OO_GRID. 
 
ENDFORM. 

STEP-11: Go to class implementation double click on perform to display container 2 as shown below - 

Swetha_Irugu_14-1740992447824.png

And write a code for container 2 - 

Swetha_Irugu_15-1740992447825.png

CODE : 

*&---------------------------------------------------------------------* 
*&      Form  CONTAINER_2 
*&---------------------------------------------------------------------* 
FORM CONTAINER_2 . 
 
   "TO DISPLAY FIELDCATALOG 2. 
   LT_FCAT1 = VALUE # 

( COL_POS = 1 FIELDNAME = 'MAT_DOC'    TABNAME = 'LT_ITEMS' COLTEXT = 'Material Document Number' ) 

( COL_POS = 2 FIELDNAME = 'DOC_YEAR'   TABNAME = 'LT_ITEMS' COLTEXT = 'Material Document Year'   ) 

( COL_POS = 3 FIELDNAME = 'MATDOC_ITM' TABNAME = 'LT_ITEMS' COLTEXT = 'Item in Material Document') 

( COL_POS = 4 FIELDNAME = 'MATERIAL'   TABNAME = 'LT_ITEMS' COLTEXT = 'Material Number'          ) 

( COL_POS = 5 FIELDNAME = 'PLANT'      TABNAME = 'LT_ITEMS' COLTEXT = 'Plant'                    ) 

( COL_POS = 6 FIELDNAME = 'STGE_LOC'   TABNAME = 'LT_ITEMS' COLTEXT = 'Storage Location'         ) 

( COL_POS = 7 FIELDNAME = 'VENDOR'     TABNAME = 'LT_ITEMS' COLTEXT = 'Vendor Number'            ) 

( COL_POS = 8 FIELDNAME = 'CURRENCY'   TABNAME = 'LT_ITEMS' COLTEXT = 'Currency Key'             ) ). 
 
  " CLEAR CUSTOM CONTAINER CLASS 2 
   CLEAR OO_CONT1. 
 
  " IF CONTAINER 2 IS NULL THEN AFTER DOUBLE_CLICK IT WILL DISPLAY NEXT NEW RECORDS. 
   IF OO_CONT1 IS INITIAL AND  OO_GRID1 IS INITIAL. 
 
    "CREATE OBJECT FOR CONTAINER CLASS 1. 
     CREATE OBJECT OO_CONT1 
       EXPORTING 
         CONTAINER_NAME = 'CONT1'. 
 
    "CREATE OBJECT FOR ALV_GRID 1. 
     CREATE OBJECT OO_GRID1 
       EXPORTING 
         I_PARENT = OO_CONT1. 
 
    "CALL METHOD FOR SET_TABLE_FOR_FIRST_DISPLAY USING CL_GUI_ALV_GRID CLASS FOR ALV_GRID 1 
     CALL METHOD OO_GRID1->SET_TABLE_FOR_FIRST_DISPLAY 
       CHANGING 
         IT_OUTTAB       = LT_ITEMS 
         IT_FIELDCATALOG = LT_FCAT1. 
 
  ENDIF. 
 
ENDFORM. 

STEP – 12: Activate the code and again go to Screen 100 Flow logic, double click on PAI module.Click Yes button, it will show Popup click on Main screen as shown in below- 

Swetha_Irugu_16-1740992447826.png

STEP – 13:  Write code in PAI module for Screen 100 to leave program from the output - 

Swetha_Irugu_17-1740992447827.png

CODE:  

*&---------------------------------------------------------------------* 
*&      Module  USER_COMMAND_0100  INPUT 
*&---------------------------------------------------------------------* 
*       text 
*----------------------------------------------------------------------* 
MODULE USER_COMMAND_0100 INPUT. 
 
  CASE SY-UCOMM. 
     WHEN 'BACK'. 
       LEAVE PROGRAM. 
   ENDCASE. 
 
ENDMODULE. 

STEP-14: Save and activate the program and click on Display button input screen will be display as shown below- 

Swetha_Irugu_18-1740992447828.png

STEP-15: Enter the Document number & year and click on execute. It will Display Header details in Output Screen -  

Swetha_Irugu_19-1740992447828.png

STEP-16: When Double clicks on Material Doc number it will display Items Details in Right side of the screen as shown as- 

Swetha_Irugu_20-1740992447829.png

 

CODE:  

REPORT ZBAPI_MAT_DOC. 
TABLES: MKPF, 
         MSEG. 
" A DEFERRED CLASS IS A CLASS THAT HAS AT LEAST ONE DEFERRED FEATURE. 
"  A DEFERRED FEATURE PROVIDES A FEATURE SPECIFICATION, BUT NO IMPLEMENTATION. 
CLASS CL_EVENT DEFINITION DEFERRED. 
 
" DATA DECLARATION FOR BAPI. 
DATA: LT_HEADER TYPE TABLE OF BAPI2017_GM_HEAD_02, 
       LS_HEADER TYPE BAPI2017_GM_HEAD_02, 
       LT_ITEMS  TYPE TABLE OF BAPI2017_GM_ITEM_SHOW, 
       LT_RETURN TYPE TABLE OF BAPIRET2. 
 
" DATA DECLARATION FOR PARAMETERS IN ALV. 
DATA: LT_FCAT  TYPE LVC_T_FCAT, 
       LT_FCAT1 TYPE LVC_T_FCAT, 
       LS_ROW   TYPE LVC_S_ROW. 
 
" DATA DECLARATION FOR CLASSES TO DISPLAY IN ALV_GRID. 
DATA:OO_CONT  TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "CUSTOM CONTAINER 1 
      OO_CONT1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "CUSTOM CONTAINER 2 
      OO_GRID  TYPE REF TO CL_GUI_ALV_GRID, "ALV GRID 1 
      OO_GRID1 TYPE REF TO CL_GUI_ALV_GRID, "ALV GRID 2 
      OO_EVENT TYPE REF TO CL_EVENT. " EVENT CLASS FOR DEFFERED CLASS. 
 
"SELECTION SCREEN TO DISPLAY PARAMETERS VALUES. 
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-000. 
PARAMETERS: P_MBLNR TYPE MKPF-MBLNR, 
             P_MJAHR TYPE MKPF-MJAHR. 
SELECTION-SCREEN END OF BLOCK B1. 
 
"DEFINE A LOCAL(HANDLER) FOR CLASS - CL_EVENT. 
CLASS CL_EVENT DEFINITION. 
   PUBLIC SECTION. 
     " DEFINE A METHOD FOR HANDLE(EVENT) TO DOUBLE-CLICK EVENT. 
     " THIS METHOD SHOULD BE COMPATIBLE WITH THE EVENT SIGNATURE DOUBLE_CLICK OF CL_GUI_ALV_GRID. 
     " E_ROW IS THE PARAMETER THAT WILL RECEIVE THE ROW NUMBER THAT WAS DOUBLE-CLICKED. 
     METHODS: BAPI_INTERACTIVE FOR EVENT DOUBLE_CLICK 
                              OF CL_GUI_ALV_GRID IMPORTING E_ROW. 
ENDCLASS. 
CLASS CL_EVENT IMPLEMENTATION. 
 
  METHOD BAPI_INTERACTIVE. " METHOD HAS BEEN DEFINED 
 
    READ TABLE LT_HEADER INTO LS_HEADER INDEX E_ROW-INDEX. " E_ROW-INDEX IS SELECTED FOR PARTICULAR ROW. 
 
" BAPI FOR TO GET MATERIAL DOCUMENT ITEMS DETAILS. 
     CALL FUNCTION 'BAPI_GOODSMVT_GETDETAIL' 
       EXPORTING 
         MATERIALDOCUMENT = P_MBLNR 
         MATDOCUMENTYEAR  = P_MJAHR 
       IMPORTING 
         GOODSMVT_HEADER  = LS_HEADER 
       TABLES 
         GOODSMVT_ITEMS   = LT_ITEMS 
         RETURN           = LT_RETURN. 
 
    PERFORM CONTAINER_2. " USED FOR TO DISPLAY CUSTOM CONTAINER 2. 
 
  ENDMETHOD. 
ENDCLASS. 
 
START-OF-SELECTION. 
 
  CALL SCREEN 100. 
*&---------------------------------------------------------------------* 
*&      Module  STATUS_0100  OUTPUT 
*&---------------------------------------------------------------------* 
*       text 
*----------------------------------------------------------------------* 
MODULE STATUS_0100 OUTPUT. 
   SET PF-STATUS 'STATUS'. 
*  SET TITLEBAR 'xxx'. 
 
  "TO PERFORM 1ST CONTAINER . 
   PERFORM CONTAINER_1. 
 
ENDMODULE. 
*&---------------------------------------------------------------------* 
*&      Form  CONTAINER_1 
*&---------------------------------------------------------------------* 
FORM CONTAINER_1 . 
 
  "TO DISPLAY FIELDCATALOG 1 FIELDNAME WILL BE SAME AS BAPI FIELDS. 
   LT_FCAT = VALUE # (  

( COL_POS = 1 FIELDNAME = 'MAT_DOC'    TABNAME = 'LT_HEADER' COLTEXT = 'Material Document Number')  

( COL_POS = 2 FIELDNAME = 'DOC_YEAR'   TABNAME = 'LT_HEADER' COLTEXT = 'Material Document Year' ) 

( COL_POS = 3 FIELDNAME = 'TR_EV_TYPE' TABNAME = 'LT_HEADER' COLTEXT = 'Transaction/Event Type')  

( COL_POS = 4 FIELDNAME = 'DOC_DATE'   TABNAME = 'LT_HEADER' COLTEXT = 'Document Date')  

( COL_POS = 5 FIELDNAME = 'PSTNG_DATE' TABNAME = 'LT_HEADER' COLTEXT = 'Posting Date ') 

( COL_POS = 6 FIELDNAME = 'ENTRY_DATE' TABNAME = 'LT_HEADER' COLTEXT = 'Document Created On')  

( COL_POS = 7 FIELDNAME = 'ENTRY_TIME' TABNAME = 'LT_HEADER' COLTEXT = 'Time of Entry')( COL_POS = 8 FIELDNAME = 'USERNAME'   TABNAME = 'LT_HEADER' COLTEXT = 'User name') ). 
 
  " BAPI FOR TO GET MATERIAL DOCUMENT HEADER DETAILS. 
   CALL FUNCTION 'BAPI_GOODSMVT_GETDETAIL' 
     EXPORTING 
       MATERIALDOCUMENT = P_MBLNR 
       MATDOCUMENTYEAR  = P_MJAHR 
     IMPORTING 
       GOODSMVT_HEADER  = LS_HEADER 
     TABLES 
       GOODSMVT_ITEMS   = LT_ITEMS 
       RETURN           = LT_RETURN. 
 
  "APPEND TO MOVE DATA FROM WORK AREA TO INTERNAL TABLE. 
   APPEND LS_HEADER TO LT_HEADER. 
 
  "CREATE OBJECT FOR CONTAINER CLASS 1. 
   CREATE OBJECT OO_CONT 
     EXPORTING 
     CONTAINER_NAME = 'CONT'. "NAME WHICH IS GIVEN FOR 1ST CONTAINER IN LAYOUT. 
 
  "CREATE OBJECT FOR ALV_GRID 1. 
   CREATE OBJECT OO_GRID 
   EXPORTING 
     I_PARENT          = OO_CONT. "1ST CONTAINER OBJECT NAME. 
 
  "CALL METHOD FOR SET_TABLE_FOR_FIRST_DISPLAY USING CL_GUI_ALV_GRID CLASS FOR ALV_GRID 1 
   CALL METHOD OO_GRID->SET_TABLE_FOR_FIRST_DISPLAY 
     CHANGING 
       IT_OUTTAB                     = LT_HEADER "HEADER INTERNAL TABLE FOR 1ST GRID 
       IT_FIELDCATALOG               = LT_FCAT. 
 
 
  CREATE OBJECT OO_EVENT. 
 
  " BY USING SET HANDLER OBJECT WILL BE REGISTERED WITH METHOD FOR DISPLAYING ALV_GRID. 
   SET HANDLER OO_EVENT->BAPI_INTERACTIVE FOR OO_GRID. 
 
ENDFORM. 
 
*&---------------------------------------------------------------------* 
*&      Form  CONTAINER_2 
*&---------------------------------------------------------------------* 
FORM CONTAINER_2 . 
 
   "TO DISPLAY FIELDCATALOG 2. 
   LT_FCAT1 = VALUE # (  

( COL_POS = 1 FIELDNAME = 'MAT_DOC'    TABNAME = 'LT_ITEMS' COLTEXT = 'Material Document Number')  

( COL_POS = 2 FIELDNAME = 'DOC_YEAR'   TABNAME = 'LT_ITEMS' COLTEXT = 'Material Document Year')  

( COL_POS = 3 FIELDNAME = 'MATDOC_ITM' TABNAME = 'LT_ITEMS' COLTEXT = 'Item in Material Document')  

( COL_POS = 4 FIELDNAME = 'MATERIAL'   TABNAME = 'LT_ITEMS' COLTEXT = 'Material Number')  

( COL_POS = 5 FIELDNAME = 'PLANT'      TABNAME = 'LT_ITEMS' COLTEXT = 'Plant') ( COL_POS = 6 FIELDNAME = 'STGE_LOC'   TABNAME = 'LT_ITEMS' COLTEXT = 'Storage Location')  

( COL_POS = 7 FIELDNAME = 'VENDOR'     TABNAME = 'LT_ITEMS' COLTEXT = 'Vendor Number')  

( COL_POS = 8 FIELDNAME = 'CURRENCY'   TABNAME = 'LT_ITEMS' COLTEXT = 'Currency Key') ). 
 
  " CLEAR CUSTOM CONTAINER CLASS 2 
   CLEAR OO_CONT1. 
 
  " IF CONTAINER 2 IS NULL THEN AFTER DOUBLE_CLICK IT WILL DISPLAY NEXT NEW RECORDS. 
   IF OO_CONT1 IS INITIAL AND  OO_GRID1 IS INITIAL. 
 
    "CREATE OBJECT FOR CONTAINER CLASS 1. 
     CREATE OBJECT OO_CONT1 
       EXPORTING 
         CONTAINER_NAME = 'CONT1'. 
 
    "CREATE OBJECT FOR ALV_GRID 1. 
     CREATE OBJECT OO_GRID1 
       EXPORTING 
         I_PARENT = OO_CONT1. 
 
    "CALL METHOD FOR SET_TABLE_FOR_FIRST_DISPLAY USING CL_GUI_ALV_GRID CLASS FOR ALV_GRID 1 
     CALL METHOD OO_GRID1->SET_TABLE_FOR_FIRST_DISPLAY 
       CHANGING 
         IT_OUTTAB       = LT_ITEMS 
         IT_FIELDCATALOG = LT_FCAT1. 
 
  ENDIF. 
 
ENDFORM. 
*&---------------------------------------------------------------------* 
*&      Module  USER_COMMAND_0100  INPUT 
*&---------------------------------------------------------------------* 
*       text 
*----------------------------------------------------------------------* 
MODULE USER_COMMAND_0100 INPUT. 
 
  CASE SY-UCOMM. 
     WHEN 'BACK'. 
       LEAVE PROGRAM. 
   ENDCASE. 
 
ENDMODULE. 

2 Comments