Display Two Level Interactive List in ALV
Display Two Level Interactive List in ALV
Display Two Level Interactive List in ALV
************************************************************************
* CHANGE HISTORY
************************************************************************
* DATE CHANGE... <Date of change written>
* AUTHOR........ <yugapreetha.t>
* CHANGE DESCR.. <Description of change>
* R/3 RELEASE... <Release>
* TRANSPORTNR... <Transport number>
************************************************************************
************************************************************************
*Data Declaration *
************************************************************************
INCLUDE ZYP_DATA_DEC_INTERACTIVE.
*include ZSDN_DATA_DEC.
************************************************************************
*Selection screen *
************************************************************************
************************************************************************
*Class Declaration *
************************************************************************
INCLUDE ZYP_ALV_CLASS_INTERACTIVE.
*include ZSDN_ALV_CLASS.
************************************************************************
* Forms section *
************************************************************************
INCLUDE ZYP_ALV_FORMS_ITERACTIVE.
*include ZSDN_ALV_FORMS.
************************************************************************
*To validate the selection screen *
************************************************************************
AT SELECTION-SCREEN.
PERFORM VALIDATE-SELECTIONS.
***********************************************************************
*Start of Selection *
************************************************************************
START-OF-SELECTION.
PERFORM GET_DATA_CUST. "Subroutine to
retrieve data from Customer
PERFORM DISPLAY_DATA_GRID. "Subroutine to
display data in grid
*&---------------------------------------------------------------------*
*& Include ZYP_DATA_DEC_WASE
*&---------------------------------------------------------------------*
TABLES: MAKT,KNA1,LFA1,LFB1.
*&---------------------------------------------------------------------*
*Types declarations
*&---------------------------------------------------------------------*
TYPES: BEGIN OF X_KNA1 ,
KUNNR TYPE KNA1-KUNNR, "customer number
LAND1 TYPE KNA1-LAND1, "country key
NAME1 TYPE KNA1-NAME1, "name
END OF X_KNA1.
*&---------------------------------------------------------------------*
*Constants used
*&---------------------------------------------------------------------*
CONSTANTS: C_ALL TYPE C VALUE 'A', "Variable used to
Save Layout
C_CHECK TYPE C VALUE 'X', "temporary
variable
C_CONTAINER TYPE SCRFNAME VALUE 'WASE', "Name of a Screen
Element.
C_SELECTOPTION TYPE TEXTPOOL-KEY VALUE 'S'.
"Text element key (number/selection name)
*&---------------------------------------------------------------------*
*Internal table for Vendor data
*&---------------------------------------------------------------------*
DATA: T_KNA1 TYPE STANDARD TABLE OF X_KNA1, "customer table
T_MAKT TYPE STANDARD TABLE OF X_MAKT, "material table
T_LFA1 TYPE STANDARD TABLE OF X_LFA1. "vendor table
*&---------------------------------------------------------------------*
*& Include ZYP_ALV_CLASS_INTERACTIVE
*&---------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
* Method for handling Event-Top of Page event
METHODS ON_HANDLE_TOP_OF_PAGE
FOR EVENT TOP_OF_PAGE OF CL_GUI_ALV_GRID
IMPORTING E_DYNDOC_ID.
*---------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.
*&---------------------------------------------------------------------*
*& Include ZYP_ALV_FORMS_INTERACTIVE
*&---------------------------------------------------------------------*
* To retrieve the data.
FORM GET_DATA_CUST.
CLEAR T_KNA1.
REFRESH T_KNA1.
SELECT KUNNR NAME1 LAND1 FROM KNA1 INTO TABLE T_KNA1. "fetching customer
details
ENDFORM. "
get_Data
*&---------------------------------------------------------------------*
*& Form used to display data in grid
*&---------------------------------------------------------------------*
IF LR_CUSTOM_CONTNR IS INITIAL.
*----------------------------------------------------------------------*
* Create Event Receiver
*----------------------------------------------------------------------*
CREATE OBJECT LR_EVENT_RECEIVER.
IF CL_GUI_ALV_GRID=>OFFLINE( ) IS INITIAL.
*----------------------------------------------------------------------*
* Creates the custom container
*----------------------------------------------------------------------*
CREATE OBJECT LR_CUSTOM_CONTNR
EXPORTING CONTAINER_NAME = C_CONTAINER. "Element name
*----------------------------------------------------------------------*
* Create the splitter control
*----------------------------------------------------------------------*
CREATE OBJECT LR_SPLIT
EXPORTING
PARENT = LR_CUSTOM_CONTNR
"Container for Custom Controls in the Screen Area
* ORIENTATION = 0
SASH_POSITION = 15
WITH_BORDER = 0
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
OTHERS = 3.
*----------------------------------------------------------------------*
* Get the containers of the splitter control
*----------------------------------------------------------------------*
LR_CONTNR_TOP = LR_SPLIT->TOP_LEFT_CONTAINER.
LR_CONTNR_BOT = LR_SPLIT->BOTTOM_RIGHT_CONTAINER.
ENDIF.
*----------------------------------------------------------------------*
* ALV grid creation at the bottom right container
*----------------------------------------------------------------------*
CREATE OBJECT LR_GRID EXPORTING I_PARENT = LR_CONTNR_BOT.
*----------------------------------------------------------------------*
* Handle events
*----------------------------------------------------------------------*
* SET HANDLER LR_EVENT_RECEIVER->ON_HANDLE_TOP_OF_PAGE FOR LR_GRID.
* SET HANDLER LR_EVENT_RECEIVER->ON_HANDLE_PRINT_TOP_OF_PAGE FOR LR_GRID.
* SET HANDLER LR_EVENT_RECEIVER->ON_HANDLE_PRINT_END_OF_LIST FOR LR_GRID.
SET HANDLER LR_EVENT_RECEIVER->ON_HANDLE_HOTSPOT_CLICK FOR LR_GRID.
*----------------------------------------------------------------------*
* Object for display of selection parameters in HTML top container *
*----------------------------------------------------------------------*
* CREATE OBJECT LR_HTML EXPORTING STYLE = 'ALV_GRID'.
* IF CL_GUI_ALV_GRID=>OFFLINE( ) IS INITIAL.
**----------------------------------------------------------------------*
** Must be after the SET HANDLER for TOP_OF_PAGE and foreground only*
**----------------------------------------------------------------------*
* CALL METHOD LR_GRID->LIST_PROCESSING_EVENTS
* EXPORTING
* I_EVENT_NAME = 'TOP_OF_PAGE'
* I_DYNDOC_ID = LR_HTML. "Dynamic Documents:
Document
* ENDIF.
*----------------------------------------------------------------------*
* Retrieve Field specifications and descriptions for ALV Grid
*----------------------------------------------------------------------*
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_BUFFER_ACTIVE = SPACE
I_STRUCTURE_NAME = 'YPSTRUC_CUST_INTERACTIVE'
CHANGING
CT_FIELDCAT = LT_FIELDCAT.
*----------------------------------------------------------------------*
*This perform changes the text heading on the grid
*----------------------------------------------------------------------*
PERFORM GET_FEILDCAT_DESC." TO CHANGE THE LIST HEADINGS
LW_LAYOUT-SMALLTITLE = C_CHECK. "Default Grid title to small font
LW_LAYOUT-ZEBRA = C_CHECK. "Output rows with alternating colors
LW_LAYOUT-NO_AUTHOR = C_CHECK. "Allow users to enter global layouts
LW_PRINT-PRNT_TITLE = C_CHECK. "Do not print out grid title
LW_LAYOUT-CWIDTH_OPT = C_CHECK. "ALV control: Optimize column width
LW_LAYOUT-SEL_MODE = SPACE. "ALV control: SelectionMode
LW_LAYOUT-NO_F4 = C_CHECK. "Character Field Length 1
LW_VARIANT-REPORT = SY-REPID. "Program name
LW_VARIANT-USERNAME = SY-UNAME. "User name
ENDIF.
*----------------------------------------------------------------------*
*Display an output table in the ALV Grid Control instance.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
*Calls screen with
container *
*----------------------------------------------------------------------*
CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE SY-UCOMM.
WHEN 'BACK'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'EXIT'.
SET SCREEN 0.
LEAVE SCREEN.
WHEN 'CANCEL'.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
CLEAR SY-UCOMM.
AT NEW FIELDNAME.
REFRESH R_DUMMY.
ENDAT.
R_DUMMY-SIGN = <FS_L_FILTER>-SIGN.
R_DUMMY-OPTION = <FS_L_FILTER>-OPTION.
WRITE <FS_L_FILTER>-LOW TO R_DUMMY-LOW LEFT-JUSTIFIED.
APPEND R_DUMMY.
AT END OF FIELDNAME.
PERFORM PARAMETERS TABLES R_DUMMY USING C_SELECTOPTION
SPACE SPACE
<FS_L_FILTER>-SELTEXT PW_DYNDOC->HTML_TABLE.
ENDAT.
ENDLOOP.
*----------------------------------------------------------------------*
* Indicates end of printed report
*----------------------------------------------------------------------*
CALL FUNCTION 'Z_CMS_REPORT_END'.
ELSE.
*----------------------------------------------------------------------*
* Invoke routine to display HTML document
*----------------------------------------------------------------------*
CALL METHOD PW_DYNDOC->DISPLAY_DOCUMENT
EXPORTING
PARENT = LR_CONTNR_TOP.
ENDIF.
*&---------------------------------------------------------------------*
*& Form get_feildcat_desc
*&---------------------------------------------------------------------*
FORM GET_FEILDCAT_DESC.
FIELD-SYMBOLS: <FS_L_FIELDCAT> TYPE LVC_S_FCAT. "ALV control: Field
catalog
LOOP AT LT_FIELDCAT ASSIGNING <FS_L_FIELDCAT>.
CASE <FS_L_FIELDCAT>-FIELDNAME .
WHEN 'KUNNR'.
<FS_L_FIELDCAT>-SCRTEXT_L = TEXT-002. "customer No
<FS_L_FIELDCAT>-SCRTEXT_M = TEXT-002.
<FS_L_FIELDCAT>-SCRTEXT_S = TEXT-002.
<FS_L_FIELDCAT>-HOTSPOT = 'X'.
<FS_L_FIELDCAT>-REPTEXT = TEXT-002.
<FS_L_FIELDCAT>-EMPHASIZE = 'C310'.
WHEN 'LAND1'.
<FS_L_FIELDCAT>-SCRTEXT_L = TEXT-003. "country key
<FS_L_FIELDCAT>-SCRTEXT_M = TEXT-003.
<FS_L_FIELDCAT>-SCRTEXT_S = TEXT-003.
<FS_L_FIELDCAT>-REPTEXT = TEXT-003.
<FS_L_FIELDCAT>-EMPHASIZE = 'C310'.
WHEN 'NAME1'.
<FS_L_FIELDCAT>-SCRTEXT_L = TEXT-004. "Name
<FS_L_FIELDCAT>-SCRTEXT_M = TEXT-004.
<FS_L_FIELDCAT>-SCRTEXT_S = TEXT-004.
<FS_L_FIELDCAT>-REPTEXT = TEXT-004.
<FS_L_FIELDCAT>-EMPHASIZE = 'C310'.
ENDCASE.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form variant-input-help
*&---------------------------------------------------------------------*
******************************************************************************
******
*************To validate the selection
screen *
*********************************************************************
***************
FORM VARIANT-INPUT-HELP.
DATA: LT_DYNPFIELDS TYPE TABLE OF
DYNPREAD, "Fields of the current
screen (with values)
L_EXIT TYPE C,
LW_L_VARIANT LIKE LW_VARIANT,
LW_L_DYNPFIELDS TYPE DYNPREAD.
*----------------------------------------------------------------------*
* Get values from the selection screen to determine layout set
*----------------------------------------------------------------------*
LW_L_DYNPFIELDS-FIELDNAME = 'P_LAYOUT'.
APPEND LW_L_DYNPFIELDS TO LT_DYNPFIELDS.
IF SY-SUBRC = 0.
IF L_EXIT IS INITIAL.
* P_LAYOUT = LW_L_VARIANT-VARIANT. "Layout
ENDIF.
ELSE.
MESSAGE I000(ZSERP) WITH TEXT-VAR SPACE SPACE SPACE.
ENDIF.
FREE: LT_DYNPFIELDS.
LW_L_TYPE = L_PW_TEXT(1).
*To handle report selections
CALL FUNCTION 'Z_CMS_REPORT_SELECTIONS'
EXPORTING
TEXT_NAME = L_PW_TEXT
SELECTION_TYPE = LW_L_TYPE
SELECTION_VALUE = L_PW_VALUE
TABLE_ID = L_PW_TABID
PASSED_TEXT = L_PW_PASTX
TABLES
SELECTION_RANGE = LT_PT_RANGE
HTML_TABLE = LT_PT_HTML.
ENDFORM. " PARAMETERS
*&---------------------------------------------------------------------*
*& Module user_command_output OUTPUT
*&---------------------------------------------------------------------*
MODULE USER_COMMAND_OUTPUT OUTPUT.
SET PF-STATUS 'ZSAMPLE' IMMEDIATELY.
SET TITLEBAR 'ZSAMPLE'.
ENDMODULE. " user_command_output OUTPUT
*&---------------------------------------------------------------------*
*& Form HANDLE_HOTSPOT_CLICK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_ROW_ID text
* -->P_E_COLUMN_ID text
* -->P_ES_ROW_NO text
*----------------------------------------------------------------------*
IF SY-SUBRC NE 0.
MESSAGE E000(ZSERP) WITH TEXT-VAR SPACE SPACE SPACE.
ENDIF.
ENDIF.
*&---------------------------------------------------------------------*
*& Form used to display data in grid
*&---------------------------------------------------------------------*
IF LR_CUSTOM_CONTNR1 IS INITIAL.
*----------------------------------------------------------------------*
* Create Event Receiver
*----------------------------------------------------------------------*
CREATE OBJECT LR_EVENT_RECEIVER.
IF CL_GUI_ALV_GRID=>OFFLINE( ) IS INITIAL.
*----------------------------------------------------------------------*
* Creates the custom container
*----------------------------------------------------------------------*
CREATE OBJECT LR_CUSTOM_CONTNR1
EXPORTING CONTAINER_NAME = C_CONTAINER. "Element name
*----------------------------------------------------------------------*
* Create the splitter control
*----------------------------------------------------------------------*
CREATE OBJECT LR_SPLIT
EXPORTING
PARENT = LR_CUSTOM_CONTNR1
"Container for Custom Controls in the Screen Area
* ORIENTATION = 0
SASH_POSITION = 15
WITH_BORDER = 0
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
OTHERS = 3.
*----------------------------------------------------------------------*
* Get the containers of the splitter control
*----------------------------------------------------------------------*
LR_CONTNR_TOP = LR_SPLIT->TOP_LEFT_CONTAINER.
LR_CONTNR_BOT = LR_SPLIT->BOTTOM_RIGHT_CONTAINER.
ENDIF.
*----------------------------------------------------------------------*
* ALV grid creation at the bottom right container
*----------------------------------------------------------------------*
CREATE OBJECT LR_GRID EXPORTING I_PARENT = LR_CONTNR_BOT.
*----------------------------------------------------------------------*
* Handle events
*----------------------------------------------------------------------*
SET HANDLER LR_EVENT_RECEIVER->ON_HANDLE_TOP_OF_PAGE FOR LR_GRID.
SET HANDLER LR_EVENT_RECEIVER->ON_HANDLE_PRINT_TOP_OF_PAGE FOR LR_GRID.
SET HANDLER LR_EVENT_RECEIVER->ON_HANDLE_PRINT_END_OF_LIST FOR LR_GRID.
* SET HANDLER LR_EVENT_RECEIVER->ON_HANDLE_HOTSPOT_CLICK FOR LR_GRID.
*----------------------------------------------------------------------*
* Object for display of selection parameters in HTML top container *
*----------------------------------------------------------------------*
* CREATE OBJECT LR_HTML EXPORTING STYLE = 'ALV_GRID'.
* IF CL_GUI_ALV_GRID=>OFFLINE( ) IS INITIAL.
**----------------------------------------------------------------------*
** Must be after the SET HANDLER for TOP_OF_PAGE and foreground only*
**----------------------------------------------------------------------*
* CALL METHOD LR_GRID->LIST_PROCESSING_EVENTS
* EXPORTING
* I_EVENT_NAME = 'TOP_OF_PAGE'
* I_DYNDOC_ID = LR_HTML. "Dynamic Documents:
Document
* ENDIF.
*----------------------------------------------------------------------*
* Retrieve Field specifications and descriptions for ALV Grid
*----------------------------------------------------------------------*
CLEAR LT_FIELDCAT.
REFRESH LT_FIELDCAT.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_BUFFER_ACTIVE = SPACE
I_STRUCTURE_NAME = 'YPSTRUC_VEND_INTERACTIVE'
CHANGING
CT_FIELDCAT = LT_FIELDCAT.
*----------------------------------------------------------------------*
*This perform changes the text heading on the grid
*----------------------------------------------------------------------*
PERFORM GET_FEILDCAT_DESC1." TO CHANGE THE LIST HEADINGS
LW_LAYOUT-SMALLTITLE = C_CHECK. "Default Grid title to small font
LW_LAYOUT-ZEBRA = C_CHECK. "Output rows with alternating colors
LW_LAYOUT-NO_AUTHOR = C_CHECK. "Allow users to enter global layouts
LW_PRINT-PRNT_TITLE = C_CHECK. "Do not print out grid title
LW_LAYOUT-CWIDTH_OPT = C_CHECK. "ALV control: Optimize column width
LW_LAYOUT-SEL_MODE = SPACE. "ALV control: SelectionMode
LW_LAYOUT-NO_F4 = C_CHECK. "Character Field Length 1
LW_VARIANT-REPORT = SY-REPID. "Program name
LW_VARIANT-USERNAME = SY-UNAME. "User name
ENDIF.
*----------------------------------------------------------------------*
*Display an output table in the ALV Grid Control instance.
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
*Calls screen with container *
*----------------------------------------------------------------------*
CALL SCREEN 0200.
FORM GET_FEILDCAT_DESC1 .
WHEN 'LIFNR'.
<FS_L_FIELDCAT>-SCRTEXT_L = TEXT-
005.
<FS_L_FIELDCAT>-SCRTEXT_M = TEXT-005.
<FS_L_FIELDCAT>-SCRTEXT_S = TEXT-005.
<FS_L_FIELDCAT>-HOTSPOT = 'X'.
<FS_L_FIELDCAT>-REPTEXT = TEXT-005.
<FS_L_FIELDCAT>-EMPHASIZE = 'C310'.
WHEN 'ORT01'.
<FS_L_FIELDCAT>-SCRTEXT_L = TEXT-006. "country key
<FS_L_FIELDCAT>-SCRTEXT_M = TEXT-006.
<FS_L_FIELDCAT>-SCRTEXT_S = TEXT-006.
<FS_L_FIELDCAT>-REPTEXT = TEXT-006.
<FS_L_FIELDCAT>-EMPHASIZE = 'C310'.
WHEN 'NAME1'.
<FS_L_FIELDCAT>-SCRTEXT_L = TEXT-007. "Name
<FS_L_FIELDCAT>-SCRTEXT_M = TEXT-007.
<FS_L_FIELDCAT>-SCRTEXT_S = TEXT-007.
<FS_L_FIELDCAT>-REPTEXT = TEXT-007.
<FS_L_FIELDCAT>-EMPHASIZE = 'C310'.
ENDCASE.
ENDLOOP.
CLEAR SY-UCOMM.
ENDMODULE. " USER_COMMAND_0200 INPUT