一个很棒的ALV例子

功能:包括变式的设置,ICON、CHECK字段的设置,&F3标准功能的修改,双击事件的处理,复数行的选择,标题的设置等。[@more@]

REPORT ZALV_MATERIAL_INFO.

*----------------------------------------------------------------------*

* INCLUDE

*----------------------------------------------------------------------*

INCLUDE .

*----------------------------------------------------------------------*

* TYPES

*----------------------------------------------------------------------*

TYPE-POOLS SLIS. "Used for ALV function

*----------------------------------------------------------------------*

* DATA

*----------------------------------------------------------------------*

*----- material information structure & itab

DATA:

BEGIN OF WA_MATERIAL,

CHECK TYPE C,

ICON1 LIKE ICON-ID,

MATNR LIKE MAKT-MATNR,

MAKTX LIKE MAKT-MAKTX,

END OF WA_MATERIAL.

DATA:

IT_MATERIAL LIKE TABLE OF WA_MATERIAL,

GW_MATNR LIKE MAKT-MATNR,

*----- ALV used

IT_EVENT TYPE SLIS_T_EVENT,

IT_HEADER TYPE SLIS_T_LISTHEADER,

WA_EXIT TYPE SLIS_EXIT_BY_USER, "RET-CODE CANCEL

IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,

WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV,

GW_VARIANT LIKE DISVARIANT,

IT_EXIT TYPE SLIS_T_EVENT_EXIT WITH HEADER LINE,

*----- Program ID

GW_REPID LIKE SY-REPID,

*----- user's selection of pop up dialog

GW_ANSWER TYPE C.

*----------------------------------------------------------------------*

* CONSTANTS

*----------------------------------------------------------------------*

CONSTANTS:

C_TABNAM TYPE SLIS_TABNAME VALUE 'WA_MATERIAL',

C_PF_ST LIKE SY-PFKEY VALUE 'S001',

C_FN_TOP_PAGE TYPE SLIS_FORMNAME VALUE 'ALV_TOP_OF_PAGE'.

*----------------------------------------------------------------------*

* PARAMETERS

*----------------------------------------------------------------------*

PARAMETERS:

P_VARI TYPE DISVARIANT-VARIANT. "Layout

*----------------------------------------------------------------------*

* INITIALIZATION

*----------------------------------------------------------------------*

INITIALIZATION.

GW_REPID = SY-REPID. "Get Program ID

%_P_VARI_%_APP_%-TEXT = 'Display Variant'.

* BACK button

IT_EXIT-UCOMM = '&F03'.

IT_EXIT-BEFORE = 'X'.

IT_EXIT-AFTER = 'X'.

APPEND IT_EXIT TO IT_EXIT.

IT_EXIT-UCOMM = '&IC1'.

APPEND IT_EXIT TO IT_EXIT.

*----------------------------------------------------------------------*

* AT SELECTION-SCREEN

*----------------------------------------------------------------------*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.

* ALV layout help list

PERFORM F4_FOR_VARIANT USING P_VARI.

*----------------------------------------------------------------------*

* AT SELECTION-SCREEN

*----------------------------------------------------------------------*

AT SELECTION-SCREEN.

PERFORM CHECK_LAYOUT_VAR.

*----------------------------------------------------------------------*

* START-OF-SELECTION

*----------------------------------------------------------------------*

START-OF-SELECTION.

PERFORM FRM_SELECT_DATA.

PERFORM FRM_OUTPUT_RESULT.

*&---------------------------------------------------------------------*

*& Form FRM_SELECT_DATA

*&---------------------------------------------------------------------*

* Select data from MAKT

*----------------------------------------------------------------------*

FORM FRM_SELECT_DATA.

SELECT MATNR

MAKTX

FROM MAKT

UP TO 10 ROWS

INTO CORRESPONDING FIELDS OF TABLE IT_MATERIAL.

*----- set icon

LOOP AT IT_MATERIAL INTO WA_MATERIAL.

WA_MATERIAL-ICON1 = ICON_GREEN_LIGHT.

MODIFY IT_MATERIAL FROM WA_MATERIAL.

ENDLOOP.

ENDFORM. " FRM_SELECT_DATA

*&---------------------------------------------------------------------*

*& Form FRM_OUTPUT_RESULT

*&---------------------------------------------------------------------*

* Display result

*----------------------------------------------------------------------*

FORM FRM_OUTPUT_RESULT.

*----- event table

PERFORM BUILD_EVENTTAB USING IT_EVENT.

*----- ALV layout

PERFORM SET_ALV_LAYOUT.

PERFORM CHANGE_ALV_LAYOUT.

*----- set ALV variant

PERFORM SET_ALV_VARIANT USING P_VARI.

*----- display ALV

PERFORM DISPLAY_ALV_GRID.

ENDFORM. " FRM_OUTPUT_RESULT

*&---------------------------------------------------------------------*

*& Form FRM_SET_PF_STAUS

*&---------------------------------------------------------------------*

* Set gui status

*----------------------------------------------------------------------*

FORM FRM_SET_PF_STAUS USING UT_EXTAB TYPE SLIS_T_EXTAB.

SET PF-STATUS C_PF_ST. "S001

ENDFORM. " FRM_SET_PF_STAUS

*&---------------------------------------------------------------------*

*& Form FRM_HANDLE_USER_COMMAND

*&---------------------------------------------------------------------*

* Handle user command

*----------------------------------------------------------------------*

FORM FRM_HANDLE_USER_COMMAND USING U_UCOMM LIKE SY-UCOMM

UH_SELFIELD TYPE SLIS_SELFIELD.

CASE U_UCOMM.

WHEN '&F03'.

PERFORM POPUP_DIALOG.

IF GW_ANSWER <> '1'.

LEAVE SCREEN.

ELSE.

LEAVE TO SCREEN 0.

ENDIF.

WHEN 'CLER'.

* double click a line

WHEN '&IC1'.

READ TABLE IT_MATERIAL INTO WA_MATERIAL

INDEX UH_SELFIELD-TABINDEX.

GW_MATNR = WA_MATERIAL-MATNR.

SET PARAMETER ID: 'MAT' FIELD GW_MATNR.

CALL TRANSACTION 'MM03'.

WHEN '&REF'.

ENDCASE.

ENDFORM. " FRM_HANDLE_USER_COMMAND

*&---------------------------------------------------------------------*

*& Form BUILD_EVENTTAB

*&---------------------------------------------------------------------*

* Set event table

*----------------------------------------------------------------------*

FORM BUILD_EVENTTAB USING UT_EVENT TYPE SLIS_T_EVENT.

DATA: LH_EVENT TYPE SLIS_ALV_EVENT.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTING

I_LIST_TYPE = 0

IMPORTING

ET_EVENTS = UT_EVENT

EXCEPTIONS

OTHERS = 1.

READ TABLE UT_EVENT WITH KEY NAME = SLIS_EV_TOP_OF_PAGE

INTO LH_EVENT.

IF SY-SUBRC = 0.

MOVE C_FN_TOP_PAGE TO LH_EVENT-FORM.

MODIFY UT_EVENT FROM LH_EVENT INDEX SY-TABIX.

ENDIF.

ENDFORM. " BUILD_EVENTTAB

*&---------------------------------------------------------------------*

*& Form DISPLAY_ALV_GRID

*&---------------------------------------------------------------------*

* Show ALV in grid mode

*----------------------------------------------------------------------*

FORM DISPLAY_ALV_GRID.

DATA:

LTH_LAYOUT TYPE SLIS_LAYOUT_ALV,

LW_ALV_TITLE TYPE LVC_TITLE.

LW_ALV_TITLE = 'Material Info'.

LTH_LAYOUT-BOX_FIELDNAME = 'CHECK'.

LTH_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

I_INTERFACE_CHECK = SPACE

I_BUFFER_ACTIVE = SPACE

I_CALLBACK_PROGRAM = GW_REPID

* I_CALLBACK_PF_STATUS_SET = 'FRM_SET_PF_STAUS'

I_CALLBACK_USER_COMMAND = 'FRM_HANDLE_USER_COMMAND'

I_GRID_TITLE = LW_ALV_TITLE

IS_LAYOUT = LTH_LAYOUT

IT_FIELDCAT = IT_FIELDCAT

I_DEFAULT = 'X'

I_SAVE = 'A'

IS_VARIANT = GW_VARIANT

IT_EVENTS = IT_EVENT

IT_EVENT_EXIT = IT_EXIT[]

IMPORTING

E_EXIT_CAUSED_BY_CALLER = WA_EXIT

TABLES

T_OUTTAB = IT_MATERIAL

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2.

ENDFORM. " DISPLAY_ALV_GRID

*&---------------------------------------------------------------------*

*& Form SET_ALV_LAYOUT

*&---------------------------------------------------------------------*

* set alv layout

*----------------------------------------------------------------------*

FORM SET_ALV_LAYOUT.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

EXPORTING

I_PROGRAM_NAME = GW_REPID

I_INTERNAL_TABNAME = C_TABNAM

* I_STRUCTURE_NAME =

* I_BYPASSING_BUFFER = 'X'

* I_CLIENT_NEVER_DISPLAY = 'X'

I_INCLNAME = GW_REPID

CHANGING

CT_FIELDCAT = IT_FIELDCAT[]

EXCEPTIONS

INCONSISTENT_INTERFACE = 1

PROGRAM_ERROR = 2

OTHERS = 3.

ENDFORM. " SET_ALV_LAYOUT

*&---------------------------------------------------------------------*

*& Form CHANGE_ALV_TEXT

*&---------------------------------------------------------------------*

* set ALV catalog

*----------------------------------------------------------------------*

* --&gt U_VALUE text 項目

* --&gt U_LENTYP text 短中長の指定

* --&gt U_NAME text 項目名称

*----------------------------------------------------------------------*

FORM CHANGE_ALV_TEXT USING U_VALUE

U_LENTYP

U_NAME.

READ TABLE IT_FIELDCAT INTO WA_FIELDCAT WITH KEY FIELDNAME = U_VALUE.

IF SY-SUBRC = 0.

WA_FIELDCAT-DDICTXT = U_LENTYP.

WA_FIELDCAT-SELTEXT_L = U_NAME.

WA_FIELDCAT-SELTEXT_M = U_NAME.

WA_FIELDCAT-SELTEXT_S = U_NAME.

WA_FIELDCAT-REPTEXT_DDIC = U_NAME.

MODIFY IT_FIELDCAT FROM WA_FIELDCAT INDEX SY-TABIX.

ENDIF.

ENDFORM. " CHANGE_ALV_TEXT

*&---------------------------------------------------------------------*

*& Form CHANGE_ALV_LAYOUT

*&---------------------------------------------------------------------*

* change ALV layout

*----------------------------------------------------------------------*

FORM CHANGE_ALV_LAYOUT.

PERFORM SET_CHECK_FIELD USING 'CHECK' 'X'.

PERFORM NO_DISPLAY_SET USING 'CHECK'.

PERFORM SET_ICON USING 'ICON1' 'X'.

* set ALV catalog

PERFORM CHANGE_ALV_TEXT

USING: 'ICON1' ' ' 'Status',

'MATNR' ' ' 'Material No',

'MAKTX' ' ' 'Material Description'.

ENDFORM. " CHANGE_ALV_LAYOUT

*&---------------------------------------------------------------------*

*& Form SET_ICON

*&---------------------------------------------------------------------*

* Set icon

*----------------------------------------------------------------------*

FORM SET_ICON USING U_FIELD TYPE SLIS_FIELDNAME

U_VALUE TYPE C.

READ TABLE IT_FIELDCAT INTO WA_FIELDCAT WITH KEY FIELDNAME = U_FIELD.

IF SY-SUBRC = 0.

WA_FIELDCAT-ICON = U_VALUE.

MODIFY IT_FIELDCAT FROM WA_FIELDCAT INDEX SY-TABIX.

ENDIF.

ENDFORM. " SET_ICON

*&---------------------------------------------------------------------*

*& Form SET_CHECK_FIELD

*&---------------------------------------------------------------------*

* set check field

*----------------------------------------------------------------------*

FORM SET_CHECK_FIELD USING U_FIELD TYPE SLIS_FIELDNAME

U_VALUE TYPE C.

READ TABLE IT_FIELDCAT INTO WA_FIELDCAT

WITH KEY FIELDNAME = U_FIELD.

IF SY-SUBRC = 0.

WA_FIELDCAT-CHECKBOX = U_VALUE.

MODIFY IT_FIELDCAT FROM WA_FIELDCAT INDEX SY-TABIX.

ENDIF.

ENDFORM. " SET_CHECK_FIELD

*&---------------------------------------------------------------------*

*& Form NO_DISPLAY_SET

*&---------------------------------------------------------------------*

* No display set

*----------------------------------------------------------------------*

FORM NO_DISPLAY_SET USING U_FIELD TYPE SLIS_FIELDNAME.

READ TABLE IT_FIELDCAT INTO WA_FIELDCAT

WITH KEY FIELDNAME = U_FIELD.

IF SY-SUBRC = 0.

WA_FIELDCAT-TECH = 'X'.

MODIFY IT_FIELDCAT FROM WA_FIELDCAT INDEX SY-TABIX.

ENDIF.

ENDFORM. " NO_DISPLAY_SET

*&---------------------------------------------------------------------*

*& Form SET_INPUT_FIELD

*&---------------------------------------------------------------------*

* set input field

*----------------------------------------------------------------------*

FORM SET_INPUT_FIELD USING U_FIELD TYPE SLIS_FIELDNAME

U_VALUE TYPE C.

READ TABLE IT_FIELDCAT INTO WA_FIELDCAT

WITH KEY FIELDNAME = U_FIELD.

IF SY-SUBRC = 0.

WA_FIELDCAT-INPUT = U_VALUE.

MODIFY IT_FIELDCAT FROM WA_FIELDCAT INDEX SY-TABIX.

ENDIF.

ENDFORM. " SET_INPUT_FIELD

*&---------------------------------------------------------------------*

*& Form ALV_TOP_OF_PAGE

*&---------------------------------------------------------------------*

* set ALV header

*----------------------------------------------------------------------*

FORM ALV_TOP_OF_PAGE.

DATA: LH_LINE TYPE SLIS_LISTHEADER.

REFRESH IT_HEADER.

LH_LINE-TYP = 'S'.

LH_LINE-INFO = 'Header line1'.

APPEND LH_LINE TO IT_HEADER.

LH_LINE-TYP = 'S'.

LH_LINE-INFO = 'Header line2'.

APPEND LH_LINE TO IT_HEADER.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

IT_LIST_COMMENTARY = IT_HEADER.

ENDFORM. " ALV_TOP_OF_PAGE

*&---------------------------------------------------------------------*

*& Form POPUP_DIALOG

*&---------------------------------------------------------------------*

FORM POPUP_DIALOG.

CALL FUNCTION 'POPUP_TO_CONFIRM'

EXPORTING

TITLEBAR = 'Previous screen'

TEXT_QUESTION = 'Do you really want to quit'

TEXT_BUTTON_1 = 'Yes'

TEXT_BUTTON_2 = 'No'

DEFAULT_BUTTON = '2'

DISPLAY_CANCEL_BUTTON = ''

START_COLUMN = 25

START_ROW = 6

IMPORTING

ANSWER = GW_ANSWER

EXCEPTIONS

TEXT_NOT_FOUND = 1

OTHERS = 2.

ENDFORM. " POPUP_DIALOG

*&---------------------------------------------------------------------*

*& Form F4_FOR_VARIANT

*&---------------------------------------------------------------------*

* ALV layout help list

*----------------------------------------------------------------------*

FORM F4_FOR_VARIANT USING U_VARI.

DATA:LI_VARIANT LIKE DISVARIANT,

LE_VARIANT LIKE DISVARIANT.

LI_VARIANT-REPORT = SY-REPID.

CALL FUNCTION 'REUSE_ALV_VARIANT_F4'

EXPORTING

IS_VARIANT = LI_VARIANT

I_SAVE = 'A'

IMPORTING

ES_VARIANT = LE_VARIANT

EXCEPTIONS

NOT_FOUND = 2.

IF SY-SUBRC = 2.

* 選択されていません

MESSAGE S205(0K).

ELSE.

U_VARI = LE_VARIANT-VARIANT.

ENDIF.

ENDFORM. " F4_FOR_VARIANT

*&---------------------------------------------------------------------*

*& FORM CHECK_LAYOUT_VAR

*&---------------------------------------------------------------------*

* Check if layout variant exists

*----------------------------------------------------------------------*

FORM CHECK_LAYOUT_VAR.

DATA LH_DISVARIANT TYPE DISVARIANT.

IF NOT P_VARI IS INITIAL.

LH_DISVARIANT-REPORT = SY-REPID.

LH_DISVARIANT-VARIANT = P_VARI.

CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'

EXPORTING

I_SAVE = SPACE

CHANGING

CS_VARIANT = LH_DISVARIANT

EXCEPTIONS

WRONG_INPUT = 1

NOT_FOUND = 2

PROGRAM_ERROR = 3.

IF SY-SUBRC <> 0.

SET CURSOR FIELD 'P_VARI'.

* layout variant is not defined

MESSAGE E809(00) WITH P_VARI.

ENDIF.

ENDIF.

ENDFORM. " CHECK_LAYOUT_VAR

*&---------------------------------------------------------------------*

*& Form SET_ALV_VARIANT

*&---------------------------------------------------------------------*

* set ALV layout variant

*----------------------------------------------------------------------*

FORM SET_ALV_VARIANT USING U_VARI.

CLEAR GW_VARIANT.

GW_VARIANT-REPORT = SY-REPID.

IF NOT U_VARI IS INITIAL.

MOVE U_VARI TO GW_VARIANT-VARIANT.

ENDIF.

ENDFORM. " SET_ALV_VARIANT

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/238575/viewspace-1006909/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/238575/viewspace-1006909/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值