Create Table Maintenance via ALV Grid

作者:郑德鼎 约 5 分钟阅读 更新日期:2024-02-22 2 年前更新 标签:ABAP, 开发

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.

1. View Structure

2. Screen 200

3. Code

REPORT  YVFM0031    LINE-SIZE 200

MESSAGE-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_changed
METHOD HANDLE_DATA_CHANGED_FINISHED.

PERFORM PRO_DATA_CHANGED_FINISHED USING E_MODIFIED.

ENDMETHOD. "handle_data_changed_finished
METHOD 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_f4
METHOD HANDLE_CONTEXT_MENU.
CALL METHOD E_OBJECT->CLEAR.
ENDMETHOD. "handle_context_menu
METHOD HANDLE_USER_COMMAND.

PERFORM PRO_USER_COMMAND_GRID USING E_UCOMM.

ENDMETHOD. "handle_user_command
METHOD HANDLE_TOOLBAR.

PERFORM PRO_TOOLBAR USING SENDER E_OBJECT.

ENDMETHOD. "handle_toolbar
ENDCLASS. "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 YVCNPMMT

INTO 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 MAKT

WHERE MATNR = GS_XLIST-MATNR

AND SPRAS = '1'.

IF SY-SUBRC NE 0.
SELECT SINGLE MAKTX INTO GS_XLIST-MAKTX FROM MAKT

WHERE 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_CON

EXPORTING

CONTAINER_NAME = 'CON'.

*-. Split container

CREATE OBJECT GK_CON_SP

EXPORTING

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_BORDER

EXPORTING

BORDER = GC_FALSE.

CALL METHOD GK_CON_SP->GET_CONTAINER

EXPORTING

ROW = 1

COLUMN = 1

RECEIVING

CONTAINER = GK_CON_GRID.

CALL METHOD GK_CON_SP->GET_CONTAINER

EXPORTING

ROW = 2

COLUMN = 1

RECEIVING

CONTAINER = GK_CON_LOG.

*-. Grid

CREATE OBJECT GK_GRID

EXPORTING

I_PARENT = GK_CON_GRID

I_APPLOGPARENT = GK_CON_LOG

I_APPL_EVENTS = GC_TRUE.

*-. Log grid

CREATE OBJECT GK_GRID_PRO

EXPORTING

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 .

...

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「Create Table Maintenance via ALV Grid.docx」整理生成,仅用于内部技术分享与学习交流。