Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
former_member215781
Active Participant
0 Kudos

Standard ALV calls status STANDARD_FULLSCREEN (program SAPLKKBL) in which next/previous/first/last page is deactivated by default. The same program consist another status APPEND which has these buttons activated. Hence we need to overwrite the PF-STATUS call from STANDARD_FULLSCREEN to APPEND.

  1. Copy the APPEND status of program SAPLKKBL to your custom program using t-code SE41. [In this case I have used the same name for status for my program]

2. Function codes for the page scrolling already exist. Activate your status.



Changes in the custom program


3. Create subroutine SET_PF_STATUS to set the new PF-STATUS. Note, that this is called dynamically through FM   REUSE_ALV_GRID_DISPLAY


    FORM set_pf_status USING rt_extab TYPE slis_t_extab.

      SET PF-STATUS 'APPEND'. 
   
ENDFORM
.    
"Set_pf_status


4. Create subroutine USER_COMMAND which will contain the action upon clicking next/previous/first/last page buttons.

Note, function codes for First Page is ‘P--’, Last Page is ‘P++’, Next Page is ‘P+’ and Previous Page is ‘P-’


FORM user_command USING r_ucomm     LIKE sy-ucomm
                        rs_selfield
TYPE slis_selfield.

REFRESH lt_data.
CASE r_ucomm.
WHEN 'P--'.    "First Page
  
LOOP AT gt_data INTO lw_data
     
WHERE page = 1.
     
APPEND lw_data TO lt_data.

      ENDLOOP.

   g_page = 1.
WHEN 'P++'.    "Last Page
  
LOOP AT gt_data INTO lw_data
     
WHERE page = g_lastpage.
     
APPEND lw_data TO lt_data.
     
CLEAR lw_data.
  
ENDLOOP.
   g_page
= g_lastpage.
WHEN 'P+'.     "Next page
  
IF g_page EQ g_lastpage.
    
EXIT.
  
ELSE.
     g_page
= g_page + 1.
  
ENDIF.
  
LOOP AT gt_data INTO lw_data
     
WHERE page = g_page.
     
APPEND lw_data TO lt_data.
     
CLEAR lw_data.
   
ENDLOOP.
WHEN 'P-'.     "Previous Page
IF g_page EQ 1.
  
EXIT.
ELSE.
   g_page
= g_page - 1.
ENDIF.
LOOP AT gt_data INTO lw_data
  
WHERE page = g_page.
  
APPEND lw_data TO lt_data.
  
CLEAR lw_data.
ENDLOOP.
ENDCASE.

ENDFORM"User_command


5.  In  REUSE_ALV_GRID_DISPLAY, call the subroutine for new PF-STATUS and USER_COMMAND


CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program         
= sy-repid
is_layout                  
= lw_layout
i_callback_pf_status_set   
= 'SET_PF_STATUS'
i_callback_user_command    
= 'USER_COMMAND'


6.  In SET_PF_STATUS, add code to get to selection screen when clicking Back/Exit/Cancel button


FORM set_pf_status USING gt_extab TYPE slis_t_extab .
  SET PF-STATUS 'APPEND'.
  IF sy-ucomm EQ '&F03'
  OR sy-ucomm EQ '&F12'
  OR sy-ucomm EQ '&F15'.
    SUBMIT ztrading_boe WITH SELECTION-TABLE gt_seltab VIA SELECTION-SCREEN.
  ENDIF.
ENDFORM. "Set_pf_status


7. Populate selection screen values in GT_SELTAB in START-OF-SELECTION. This will retain the selection screen values when clicking Back/Exit/Cancel button


START-OF-SELECTION.
* Get selection screen data
PERFORM get_selections_values.

FORM get_selections_values.

CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'
EXPORTING
  curr_report    
= sy-repid
TABLES
  selection_table
= gt_seltab
EXCEPTIONS
  not_found      
= 1
  no_report      
= 2.
IF sy-subrc <> 0.
 
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
 
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM.                    " GET_SELECTIONS_VALUES