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
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.
STEP – 3: Declare a deferred class future, and inside it declare all data declarations for tables, field catalogs and for grid & container.
STEP – 4: Define Parameters for user input.
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 ).
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.
STEP – 7: Enter Short Description & click on Layout. It will display Screen Painter
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-
STEP – 9: In Flow Logic, uncomment both the PBO & PAI modules and double click on PBO module as show below-
Click Yes button, it will show Popup click on Main screen as shown in below-
STEP-10: Write code in PBO module for Screen 100 -
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-
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-
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-
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 -
And write a code for container 2 -
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-
STEP – 13: Write code in PAI module for Screen 100 to leave program from the output -
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-
STEP-15: Enter the Document number & year and click on execute. It will Display Header details in Output Screen -
STEP-16: When Double clicks on Material Doc number it will display Items Details in Right side of the screen as shown as-
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
5 | |
4 | |
2 | |
2 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 |