Former Member
Posted onOctober 18, 2012 More than 30 minute read
Create Table Maintenance via ALV Grid
FollowRSS feedLike
0 Likes 5,278 Views 3 Comments
Although TMG(Table Maintenance Generator) is powerful and function group which it generated can be enhanced by additional events, it’s not enough especially for customized screen element, advanced table relation etc. , so creating table maintenance via alv grid is good choice based on beautiful and powerful alv gird tools.The following sample code is from my recently participating project and it fully replaces TMG by implementing create, delete and modify activities.
REPORT YVFM0031 LINE-SIZE 200MESSAGE-ID ZU
NO STANDARD PAGE HEADING .
INCLUDE YVFM0031TOP.
INCLUDE YVFM0031CLS.
INCLUDE YVFM0031SCR.
INCLUDE YVFM0031O01.
INCLUDE YVFM0031F01.
INCLUDE YVFM0031I01.
INCLUDE YVFM0031E01.*&---------------------------------------------------------------------*
*& Include YVFM0031TOP
*&---------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION DEFERRED.TABLES : YVCNPMMT, MARA,MAKT.
INCLUDE <ICON>.****Constants***********************************************************
CONSTANTS : GC_TRUE TYPE C VALUE 'X',
GC_FALSE TYPE C VALUE SPACE,
GC_SPACE TYPE C VALUE SPACE,
GC_SAVE TYPE SY-UCOMM VALUE 'SAVE',
GC_BACK TYPE SY-UCOMM VALUE 'BACK',
GC_EXIT TYPE SY-UCOMM VALUE 'EXIT',
GC_FADD TYPE SY-UCOMM VALUE 'FADD',
GC_FDEL TYPE SY-UCOMM VALUE 'FDEL',
GC_FCOP TYPE SY-UCOMM VALUE 'FCOP',
GC_FADDT TYPE TEXT40 VALUE 'New Entry',
GC_DELT TYPE TEXT40 VALUE 'Dele Entry',
GC_DELETE TYPE TEXT40 VALUE 'D'.
****** Common *********************************************************
DATA : GK_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GK_CON_SP TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
GK_CON_GRID TYPE REF TO CL_GUI_CONTAINER,
GK_CON_LOG TYPE REF TO CL_GUI_CONTAINER,
GK_GRID TYPE REF TO ZCL_GUI_ALV_GRID,
GK_GRID_PRO TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL,
GT_FIELDCAT TYPE LVC_T_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
GS_LAYOUT TYPE LVC_S_LAYO,
GT_F4 TYPE LVC_T_F4,
GT_EXCLUDE TYPE UI_FUNCTIONS,
GS_VARIANT TYPE DISVARIANT,
GT_SORT TYPE LVC_T_SORT,
EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER.
*-. Basic Output List
TYPES : BEGIN OF T_XPROT,
ROW_ID TYPE INT4, "-. ROW ID.
FNAME(30) TYPE C, "-. Fieldname.
MSGTX(120) TYPE C, "-. Message.
ERROR TYPE C, "-. Error.
END OF T_XPROT.*-. Error List
DATA : GT_XPROT TYPE TABLE OF T_XPROT WITH KEY ROW_ID FNAME,
WA_XPROT TYPE T_XPROT.
*-. FIELD-SYMBOLS
FIELD-SYMBOLS : <PRO> TYPE REF TO CL_ALV_CHANGED_DATA_PROTOCOL.
TYPES : BEGIN OF GT_OUTTAB.
INCLUDE STRUCTURE YVCNPMMV.TYPES : MARK TYPE C,
STAT TYPE C,
ERROR TYPE C.
TYPES : CELLTAB TYPE LVC_T_STYL.
TYPES : END OF GT_OUTTAB.
DATA : GT_XLIST TYPE TABLE OF GT_OUTTAB.
DATA : GS_XLIST TYPE GT_OUTTAB.
DATA : DT_XLIST TYPE TABLE OF GT_OUTTAB.
DATA : DS_XLIST TYPE GT_OUTTAB.
DATA : GT_ROW TYPE LVC_T_ROW,
GS_ROW TYPE LVC_S_ROW.
DATA : LT_CELLTAB TYPE LVC_T_STYL,
L_INDEX TYPE I,
P_MODE(1).
DATA: L_VALID TYPE C,L_TABIX LIKE SY-TABIX,
L_DATUM LIKE SY-DATUM,
LV_CN(2) TYPE N,
LV_TEXT(100).
DATA : G_CHANGE TYPE C,
G_SUBRC TYPE SY-SUBRC,
G_TABIX TYPE SY-TABIX,
OK_CODE TYPE SY-UCOMM,
SAVE_OK TYPE SY-UCOMM,
L_ERR_CHK(1),
L_ANS TYPE C.
DATA : LV_DELETE TYPE STRING.
*&---------------------------------------------------------------------*
*& Include YVFM0031CLS
*&---------------------------------------------------------------------*
CLASS LCL_EVENT_RECEIVER DEFINITION.PUBLIC SECTION.
METHODS:HANDLE_DATA_CHANGED
FOR EVENT DATA_CHANGED OF ZCL_GUI_ALV_GRID
IMPORTING SENDER ER_DATA_CHANGED,
HANDLE_DATA_CHANGED_FINISHED
FOR EVENT DATA_CHANGED_FINISHED OF ZCL_GUI_ALV_GRID
IMPORTING SENDER E_MODIFIED,
HANDLE_ON_F4
FOR EVENT ONF4 OF ZCL_GUI_ALV_GRID
IMPORTING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA
ET_BAD_CELLS E_DISPLAY,
HANDLE_CONTEXT_MENU
FOR EVENT CONTEXT_MENU_REQUEST OF ZCL_GUI_ALV_GRID
IMPORTING E_OBJECT,
HANDLE_USER_COMMAND
FOR EVENT USER_COMMAND OF ZCL_GUI_ALV_GRID
IMPORTING E_UCOMM,
HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF ZCL_GUI_ALV_GRID
IMPORTING SENDER E_OBJECT E_INTERACTIVE.
ENDCLASS. "lcl_event_receiver DEFINITION*-. Class Implementation...............................................
CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.METHOD HANDLE_DATA_CHANGED.PERFORM PRO_DATA_CHANGED USING ER_DATA_CHANGED.
ENDMETHOD. "handle_data_changedMETHOD HANDLE_DATA_CHANGED_FINISHED.PERFORM PRO_DATA_CHANGED_FINISHED USING E_MODIFIED.
ENDMETHOD. "handle_data_changed_finishedMETHOD HANDLE_ON_F4.PERFORM PRO_HANDLE_ON_F4 USING E_FIELDNAME ES_ROW_NO ER_EVENT_DATA
ET_BAD_CELLS E_DISPLAY.
ENDMETHOD. "handle_on_f4METHOD HANDLE_CONTEXT_MENU.CALL METHOD E_OBJECT->CLEAR.ENDMETHOD. "handle_context_menuMETHOD HANDLE_USER_COMMAND.PERFORM PRO_USER_COMMAND_GRID USING E_UCOMM.
ENDMETHOD. "handle_user_commandMETHOD HANDLE_TOOLBAR.PERFORM PRO_TOOLBAR USING SENDER E_OBJECT.
ENDMETHOD. "handle_toolbarENDCLASS. "lcl_event_receiver IMPLEMENTATION*&---------------------------------------------------------------------*
*& Include YVFM0031SCR
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001.*-Material select options
SELECT-OPTIONS : S_YMTNR FOR YVCNPMMT-YMTNR,S_MATNR FOR YVCNPMMT-MATNR.
SELECTION-SCREEN END OF BLOCK BL1.*&---------------------------------------------------------------------*
*& Include YVFM0031O01
*&---------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
DATA: GT_EXMU TYPE TABLE OF SY-UCOMM.CLEAR GT_EXMU.
IF G_CHANGE NE GC_TRUE.APPEND GC_SAVE TO GT_EXMU.ENDIF.SET PF-STATUS 'M200' EXCLUDING GT_EXMU.
SET TITLEBAR 'T200'.
CHECK GK_CON IS INITIAL.
PERFORM PRO_INIT_OBJECT.
ENDMODULE. " status_0200 OUTPUT*&---------------------------------------------------------------------*
*& Include YVKR0403_CSF01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form pro_get_data
*&---------------------------------------------------------------------*
FORM PRO_GET_DATA .REFRESH : GT_XLIST.
SELECT * FROM YVCNPMMTINTO CORRESPONDING FIELDS OF TABLE GT_XLIST
WHERE YMTNR IN S_YMTNR
AND MATNR IN S_MATNR.
SORT GT_XLIST.
LOOP AT GT_XLIST INTO GS_XLIST.SELECT SINGLE MAKTX INTO GS_XLIST-MAKTX FROM MAKTWHERE MATNR = GS_XLIST-MATNR
AND SPRAS = '1'.
IF SY-SUBRC NE 0.SELECT SINGLE MAKTX INTO GS_XLIST-MAKTX FROM MAKTWHERE MATNR = GS_XLIST-MATNR
AND SPRAS = 'E'.
ENDIF.GS_XLIST-STAT = 'D'.
MODIFY GT_XLIST FROM GS_XLIST.CLEAR : GS_XLIST.
ENDLOOP.CLEAR GS_XLIST.
GS_XLIST-STAT = 'C'. "
DO 20 TIMES.
APPEND GS_XLIST TO GT_XLIST.ENDDO.ENDFORM. " pro_select_data*&---------------------------------------------------------------------*
*& Form pro_init_object
*&---------------------------------------------------------------------*
FORM PRO_INIT_OBJECT .PERFORM PRO_CREATE_OBJECT.
PERFORM PRO_SET_LAYOUT.
PERFORM PRO_SET_SORT.
PERFORM PRO_GET_FIELDCAT.
PERFORM PRO_ADJUST_FIELDCAT.
PERFORM PRO_REGISTER_EVENT.
PERFORM PRO_SET_REGISTER_F4.
PERFORM PRO_SET_HANDLER.
PERFORM PRO_SET_CELLTAB.
PERFORM PRO_DISPLAY_GRID.
PERFORM PRO_OTHERS_SETTING.
ENDFORM. " pro_init_object*&---------------------------------------------------------------------*
*& Form pro_create_object
*&---------------------------------------------------------------------*
FORM PRO_CREATE_OBJECT .*-. Container
CREATE OBJECT GK_CONEXPORTING
CONTAINER_NAME = 'CON'.
*-. Split container
CREATE OBJECT GK_CON_SPEXPORTING
PARENT = GK_CON
ROWS = 2
COLUMNS = 1.
*-. Container
PERFORM PRO_SET_CONTAINER_SIZE USING 1 100.
PERFORM PRO_SET_CONTAINER_SIZE USING 2 0.
*-. Split container
CALL METHOD GK_CON_SP->SET_BORDEREXPORTING
BORDER = GC_FALSE.
CALL METHOD GK_CON_SP->GET_CONTAINEREXPORTING
ROW = 1
COLUMN = 1
RECEIVING
CONTAINER = GK_CON_GRID.
CALL METHOD GK_CON_SP->GET_CONTAINEREXPORTING
ROW = 2
COLUMN = 1
RECEIVING
CONTAINER = GK_CON_LOG.
*-. Grid
CREATE OBJECT GK_GRIDEXPORTING
I_PARENT = GK_CON_GRID
I_APPLOGPARENT = GK_CON_LOG
I_APPL_EVENTS = GC_TRUE.
*-. Log grid
CREATE OBJECT GK_GRID_PROEXPORTING
I_CONTAINER = GK_CON_LOG
I_CALLING_ALV = GK_GRID.
*-. Event Receiver
CREATE OBJECT EVENT_RECEIVER.ENDFORM. " pro_create_object*&---------------------------------------------------------------------*
*& Form pro_set_layout
*&---------------------------------------------------------------------*
FORM PRO_SET_LAYOUT.*-. Layout
GS_LAYOUT-SEL_MODE = 'A'.
GS_LAYOUT-BOX_FNAME = 'MARK'.
GS_LAYOUT-DETAILINIT = GC_TRUE.
GS_LAYOUT-SMALLTITLE = GC_TRUE.
GS_LAYOUT-ZEBRA = GC_TRUE.
GS_LAYOUT-CWIDTH_OPT = GC_TRUE.
GS_LAYOUT-STYLEFNAME = 'CELLTAB'.
ENDFORM. " pro_set_layout*&---------------------------------------------------------------------*
*& Form pro_get_fieldcat
*&---------------------------------------------------------------------*
FORM PRO_GET_FIELDCAT ....