RP OOP ALV Ex02
RP OOP ALV Ex02
RP OOP ALV Ex02
NOTE: As part of screen design create two screens with screen numbers 0100 and 0101. Also create a
menu named MYMENU with Functional Keys BACK, CANCEL, and EXIT with respective function
codes.
To the screen 0100:
Add the menu MYMENU and in the PAI section of the screen provide appropriate code to handle the
functionality for BACK, CANCEL, and EXIT. See MODULE user_command_0100 INPUT in the
code below. To the layout of this screen add a customer control and name it CC_KNA1.
Flow logic of screen 0100:
PROCESS BEFORE OUTPUT.
MODULE STATUS_0100.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.
To the screen 0101:
Add the menu MYMENU and in the PAI section of the screen provide appropriate code to handle the
functionality for BACK, CANCEL, and EXIT. See MODULE user_command_0101 INPUT in the
code below. To the layout of this screen add a customer control and name it CC_VBAK.
Flow logic of screen 0101:
PROCESS BEFORE OUTPUT.
MODULE STATUS_0101.
PROCESS AFTER INPUT.
MODULE USER_COMMAND_0101.
*----------------------------------------------------------------------*
* MODULE user_command_0100 INPUT
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
IF sy-ucomm = 'BACK'.
LEAVE TO SCREEN 0.
ELSEIF sy-ucomm = 'CANCEL' OR sy-ucomm = 'EXIT'.
LEAVE PROGRAM.
ENDIF.
ENDMODULE.
" USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*&
Form display_kna1_alv
*&---------------------------------------------------------------------*
FORM display_kna1_alv.
CHECK t_kna1 IS NOT INITIAL.
IF r_grid_kna1 IS INITIAL. See Note-1
PERFORM populate_kna1_layo.
PERFORM populate_kna1_fcat.
CREATE OBJECT r_ccontainer_kna1
EXPORTING
container_name
= 'CC_KNA1'.
CREATE OBJECT r_grid_kna1
EXPORTING
i_parent = r_ccontainer_kna1.
CREATE OBJECT r_ev_handler.
SET HANDLER r_ev_handler->handle_double_click FOR r_grid_kna1.
CALL METHOD r_grid_kna1->set_table_for_first_display See Note-2
EXPORTING
is_layout
= s_layo_kna1
CHANGING
it_outtab
= t_kna1
it_fieldcatalog = t_fcat_kna1.
ELSE.
CALL METHOD r_grid_kna1->refresh_table_display.
See Note-2
ENDIF.
ENDFORM.
" display_kna1_alv
*&---------------------------------------------------------------------*
*&
Form populate_kna1_layo
*&---------------------------------------------------------------------*
FORM populate_kna1_layo.
CLEAR s_layo_kna1.
s_layo_kna1-zebra = 'X'.
s_layo_kna1-cwidth_opt = 'X'.
ENDFORM.
" populate_layout
*&---------------------------------------------------------------------*
*&
Form populate_kna1_fcat
*&---------------------------------------------------------------------*
FORM populate_kna1_fcat .
DATA: ls_fcat TYPE lvc_s_fcat.
REFRESH t_fcat_kna1.
ls_fcat-fieldname = 'KUNNR'.
ls_fcat-coltext = 'Customer'.
APPEND ls_fcat TO t_fcat_kna1.
CLEAR ls_fcat.
ls_fcat-fieldname = 'NAME1'.
ls_fcat-coltext = 'Customer Name'.
APPEND ls_fcat TO t_fcat_kna1.
CLEAR ls_fcat.
ls_fcat-fieldname = 'ORT01'.
ls_fcat-coltext = 'City'.
APPEND ls_fcat TO t_fcat_kna1.
CLEAR ls_fcat.
ls_fcat-fieldname = 'LAND1'.
ls_fcat-coltext = 'Country'.
APPEND ls_fcat TO t_fcat_kna1.
CLEAR ls_fcat.
ls_fcat-fieldname = 'PSTLZ'.
ls_fcat-coltext = 'P Code'.
APPEND ls_fcat TO t_fcat_kna1.
CLEAR ls_fcat.
ENDFORM.
" populate_fcat
*&---------------------------------------------------------------------*
*&
Form populate_t_kna1
*&---------------------------------------------------------------------*
FORM populate_t_kna1 .
SELECT kunnr
name1
ort01
land1
pstlz
FROM kna1 INTO TABLE t_kna1
WHERE kunnr IN s_kunnr.
IF sy-subrc <> 0.
MESSAGE 'No data found for given range.' TYPE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
" populate_t_kna1
*----------------------------------------------------------------------*
* MODULE status_0101 OUTPUT
*----------------------------------------------------------------------*
MODULE status_0101 OUTPUT.
SET PF-STATUS 'MYMENU'.
PERFORM display_vbak_alv.
ENDMODULE.
" STATUS_0101 OUTPUT
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0101 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0101 INPUT.
IF sy-ucomm = 'BACK'.
* SET SCREEN '0100'.
LEAVE TO SCREEN 0.
ELSEIF sy-ucomm = 'CANCEL' OR sy-ucomm = 'EXIT'.
LEAVE PROGRAM.
ENDIF.
ENDMODULE.
" USER_COMMAND_0101 INPUT
*&---------------------------------------------------------------------*
*&
Form display_vbak_alv
*&---------------------------------------------------------------------*
FORM display_vbak_alv .
CHECK t_vbak IS NOT INITIAL.
IF r_grid_vbak IS INITIAL.
PERFORM populate_vbak_layo.
See Note-1
PERFORM populate_vbak_fcat.
CREATE OBJECT r_ccontainer_vbak
EXPORTING
container_name
= 'CC_VBAK'.
CREATE OBJECT r_grid_vbak
EXPORTING
i_parent
= r_ccontainer_vbak.
CALL METHOD r_grid_vbak->set_table_for_first_displaySee Note-2
EXPORTING
is_layout
= s_layo_vbak
CHANGING
it_outtab
= t_vbak
it_fieldcatalog = t_fcat_vbak.
ELSE.
CALL METHOD r_grid_vbak->refresh_table_display.
See Note-2
ENDIF.
ENDFORM.
" display_vbak_alv
*&---------------------------------------------------------------------*
*&
Form populate_vbak_layo
*&---------------------------------------------------------------------*
FORM populate_vbak_layo .
CLEAR s_layo_vbak.
s_layo_vbak-zebra = 'X'.
s_layo_vbak-cwidth_opt = 'X'.
ENDFORM.
" populate_vbak_layo
*&---------------------------------------------------------------------*
*&
Form populate_vbak_fcat
*&---------------------------------------------------------------------*
FORM populate_vbak_fcat .
Snippet 3: In the MODULE user_command_0101 INPUT pertaining to PAI of screen 101, while handling
the function code BACK, add the below snippet of code to set the scroll position and then have the code
to navigate back to the former ALV report.
IF sy-ucomm = 'BACK'.
* SET SCREEN '0100'.
*&--- Code to retain scroll position - Start
CALL METHOD r_grid_kna1->set_scroll_info_via_id
EXPORTING
is_row_info = s_rowinfo
is_col_info = s_colinfo.
*&--- Code to retain scroll position - End
LEAVE TO SCREEN 0.
ELSEIF sy-ucomm = 'CANCEL' OR sy-ucomm = 'EXIT'.
LEAVE PROGRAM.
ENDIF.