SAP OO ALV
不知道的东西总是认为是最好的,一直没写过OO ALV的最近找到了一个入门的案例 已经经过测试 代码可用 需要自己画一个屏幕.【转】
*&---------------------------------------------------------------------*
*& ReportZJ_TE1
*&
*&---------------------------------------------------------------------*
*&
*& OO ALV
*&---------------------------------------------------------------------*
REPORTZJ_TE1.
*" 功能A: 基本显示
*" 功能B: 设定layout
*" 功能C: 设定fieldcat
*" 功能D: 增加复选框
*" 功能E: 设定某列可输入
*" 功能F: 设定某列为下拉列表
*" 功能G: 设定屏蔽标准ALV 工具栏的按钮
*" 功能H: 设定增加自定义ALV工具栏的按钮
*" 功能I: 设定响应双击
*" 功能J: 设定响应user command
*" 功能K: 设定TOP_OF_PAGE
*" 功能L: 设定动态修改layout
*" 功能M: 设定动态修改fieldcat
DATA: BEGIN OF GT_USER OCCURS 0."LIKE TABLE OF usr02." with header line.
INCLUDE STRUCTURE USR02.
DATA: CHECKBOX(1)," 功能D: 增加复选框
COLOR(4).
DATA: END OF GT_USER.
DATA: G_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER." 功能A: 基本显示
DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID." 功能A: 基本显示
DATA: SAVE_OK LIKE SY-UCOMM,
OK_CODE LIKE SY-UCOMM.
DATA: GT_FIELDCAT TYPE LVC_T_FCAT, " 功能C: 设定fieldcat
GS_FIELDCAT TYPE LVC_S_FCAT." 功能C: 设定fieldcat
DATA: LS_LAYOUTTYPE LVC_S_LAYO. " 功能B: 设定layout
DATA: GT_EXCLUDE TYPE UI_FUNCTIONS." 功能G: 设定屏蔽标准ALV 工具栏的按钮
*----------------------------------------------------------------------*
* CLASS lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER DEFINITION.
PUBLIC SECTION.
METHODS HANDLE_DOUBLE FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN . " 功能I: 设定响应双击
METHODS HANDLE_TEXT FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID IMPORTING E_ROW E_COLUMN . " 功能I: 设定响应双击
METHODS HANDLE_TOOLBAR FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID IMPORTING E_OBJECT. " 功能H: 设定增加自定义ALV工具栏的按钮
METHODS HANDLE_USER_COMMAND FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID IMPORTING E_UCOMM. " 功能J: 设定响应user command
METHODS HANDLE_TOP FOR EVENT TOP_OF_PAGE OF CL_GUI_ALV_GRID. " 功能K: 设定TOP_OF_PAGE
ENDCLASS. "lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_event_handler IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
METHOD HANDLE_TEXT. " 功能I: 设定响应双击
MESSAGE I000(IH) WITH E_ROW-INDEX E_COLUMN-FIELDNAME.
ENDMETHOD. "handle_TEXT
METHOD HANDLE_DOUBLE. " 功能I: 设定响应双击
MESSAGE I000(IH) WITH E_ROW-INDEX E_COLUMN-FIELDNAME.
ENDMETHOD. "handle_double
METHOD HANDLE_TOOLBAR. " 功能H: 设定增加自定义ALV工具栏的按钮
DATA: LS_TOOLBAR TYPE STB_BUTTON.
LS_TOOLBAR-BUTN_TYPE = '3'.
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR LS_TOOLBAR.
LS_TOOLBAR-TEXT = 'Click'.
LS_TOOLBAR-FUNCTION = 'Z1'.
LS_TOOLBAR-ICON = ICON_CALCULATION.
*QUICKINFO
*BUTN_TYPE
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
ENDMETHOD. "handle_toolbar
METHOD HANDLE_USER_COMMAND. " 功能J: 设定响应user command
CASE E_UCOMM.
WHEN 'Z1'.
MESSAGE I000(IH) WITH 'Y'.
ENDCASE.
ENDMETHOD. "handle_user_command
METHOD HANDLE_TOP. " 功能K: 设定TOP_OF_PAGE
WRITE:/ 'this is end'.
MESSAGE I000(IH) WITH 'hi'.
ENDMETHOD. "handle_top
ENDCLASS. "lcl_event_handler IMPLEMENTATION
DATA: GR_EVENT TYPE REF TO LCL_EVENT_HANDLER.
START-OF-SELECTION.
PERFORM FRM_GET_DATA.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& ModuleSTATUS_0100OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS '100'.
"set titlebar '100'.
IF G_CONTAINER IS INITIAL.
CREATE OBJECT G_CONTAINER"创建容器对象
EXPORTING
* parent =
CONTAINER_NAME = 'GC_1' .
CREATE OBJECT G_GRID" 创建 ALV_FRID 对象
EXPORTING
I_PARENT = G_CONTAINER
EXCEPTIONS
ERROR_CNTL_CREATE = 1
ERROR_CNTL_INIT = 2
ERROR_CNTL_LINK = 3
ERROR_DP_CREATE = 4
OTHERS = 5 .
GS_FIELDCAT-FIELDNAME = 'CHECKBOX'. " 功能D: 增加复选框
GS_FIELDCAT-COLTEXT = 'CHECK'. " 功能D: 增加复选框
GS_FIELDCAT-CHECKBOX = 'X'. " 功能D: 增加复选框
GS_FIELDCAT-EDIT = 'X'. " 功能E: 设定某列可输入
APPEND GS_FIELDCAT TO GT_FIELDCAT." 功能D: 增加复选框
" 这个函数只能读取标准结构体的fieldcat
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' " 功能C: 设定fieldcat
EXPORTING
* I_BUFFER_ACTIVE =
I_STRUCTURE_NAME = 'USR02'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
CHANGING
CT_FIELDCAT = GT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3 .
DATA: LT_DROP TYPE LVC_T_DROP,
LS_DROP TYPE LVC_S_DROP.
* 定制下拉框
LS_DROP-HANDLE = '1'. " 功能F: 设定某列为下拉列表
LS_DROP-VALUE = 'A'." 功能F: 设定某列为下拉列表
APPEND LS_DROP TO LT_DROP. " 功能F: 设定某列为下拉列表
LS_DROP-HANDLE = '1'. " 功能F: 设定某列为下拉列表
LS_DROP-VALUE = 'B'." 功能F: 设定某列为下拉列表
APPEND LS_DROP TO LT_DROP." 功能F: 设定某列为下拉列表
LS_DROP-HANDLE = '2'." 功能F: 设定某列为下拉列表
LS_DROP-VALUE = 'ZZZ'." 功能F: 设定某列为下拉列表
APPEND LS_DROP TO LT_DROP." 功能F: 设定某列为下拉列表
LS_DROP-HANDLE = '2'." 功能F: 设定某列为下拉列表
LS_DROP-VALUE = 'YYY'." 功能F: 设定某列为下拉列表
APPEND LS_DROP TO LT_DROP." 功能F: 设定某列为下拉列表
LS_DROP-HANDLE = '2'." 功能F: 设定某列为下拉列表
LS_DROP-VALUE = 'XXX'." 功能F: 设定某列为下拉列表
APPEND LS_DROP TO LT_DROP." 功能F: 设定某列为下拉列表
* 为列绑定 下拉框
LOOP AT GT_FIELDCAT INTO GS_FIELDCAT.
IF GS_FIELDCAT-FIELDNAME = 'ANAME'.
GS_FIELDCAT-EMPHASIZE = 'C501'.
GS_FIELDCAT-DRDN_HNDL = '1'. " 功能F: 设定某列为下拉列表
GS_FIELDCAT-EDIT = 'X'. " 功能E: 设定某列可输入
MODIFY GT_FIELDCAT FROMGS_FIELDCAT.
ELSEIF GS_FIELDCAT-FIELDNAME = 'BNAME'.
GS_FIELDCAT-EMPHASIZE = 'C501'.
GS_FIELDCAT-DRDN_HNDL = '2'." 功能F: 设定某列为下拉列表
GS_FIELDCAT-EDIT = 'X'. " 功能E: 设定某列可输入
MODIFY GT_FIELDCAT FROMGS_FIELDCAT.
ENDIF.
ENDLOOP.
CALL METHOD G_GRID->SET_DROP_DOWN_TABLE " 功能F: 设定某列为下拉列表
EXPORTING
IT_DROP_DOWN = LT_DROP.
* it_drop_down_alias =
.
CREATE OBJECT GR_EVENT.
SET HANDLER GR_EVENT->HANDLE_TEXT FOR G_GRID. " 功能I: 设定响应双击
SET HANDLER GR_EVENT->HANDLE_TOOLBAR FOR G_GRID. " 功能H: 设定增加自定义ALV工具栏的按钮
SET HANDLER GR_EVENT->HANDLE_USER_COMMAND FOR G_GRID. " 功能J: 设定响应user command
SET HANDLER GR_EVENT->HANDLE_TOP FOR G_GRID. " 功能K: 设定TOP_OF_PAGE
LS_LAYOUT-ZEBRA = 'X'. " 功能B: 设定layout
LS_LAYOUT-GRID_TITLE = 'USER'. " 功能B: 设定layout
LS_LAYOUT-SMALLTITLE = 'X'. " 功能B: 设定layout
LS_LAYOUT-BOX_FNAME = 'CHECKBOX'." 功能B: 设定layout
LS_LAYOUT-SEL_MODE = ''. " 功能B: 设定layout
* ls_layout-no_TOOLBAR = 'X'.
DATA GS_EXCLUDE TYPE UI_FUNC. " 功能G: 设定屏蔽标准ALV 工具栏的按钮
GS_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_SUM. " 功能G: 设定屏蔽标准ALV 工具栏的按钮
" append gs_exclude to gt_exclude. " 功能G: 设定屏蔽标准ALV 工具栏的按钮
CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY " 功能A: 基本显示
EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
* is_variant =
* i_save = 'X'
* i_default = 'X'
IS_LAYOUT = LS_LAYOUT " 功能B: 设定layout
* is_print =
* it_special_groups =
IT_TOOLBAR_EXCLUDING = GT_EXCLUDE " 功能G: 设定屏蔽标准ALV 工具栏的按钮
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
IT_OUTTAB = GT_USER[]
IT_FIELDCATALOG = GT_FIELDCAT[] " 功能C: 设定fieldcat
* it_sort =
* it_filter =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4
.
ELSE.
CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY " 功能A: 基本显示
*EXPORTING
* is_stable =
* i_soft_refresh =
EXCEPTIONS
FINISHED = 1
OTHERS = 2
.
ENDIF.
ENDMODULE. " STATUS_0100OUTPUT
*&---------------------------------------------------------------------*
*& FormFRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*-->p1 text
*<--p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_DATA .
SELECT * FROM USR02 INTO TABLE GT_USER.
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& ModuleUSER_COMMAND_0100INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'SO_UP'.
PERFORM FRM_HIDE_TOOLBAR.
WHEN 'CH_CAT'.
PERFORM FRM_CHANGE_CAPTION.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100INPUT
*&---------------------------------------------------------------------*
*& FormFRM_SORT_UP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*-->p1 text 隐藏ALV 标准按钮
*<--p2 text
*----------------------------------------------------------------------*
FORM FRM_HIDE_TOOLBAR .
DATA: LS_LAYOUT TYPE LVC_S_LAYO.
CALL METHOD G_GRID->GET_FRONTEND_LAYOUT
IMPORTING
ES_LAYOUT = LS_LAYOUT.
IF LS_LAYOUT-NO_TOOLBAR = 'X'.
LS_LAYOUT-NO_TOOLBAR = ''.
ELSE.
LS_LAYOUT-NO_TOOLBAR = 'X'.
ENDIF.
CALL METHOD G_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = LS_LAYOUT.
ENDFORM. " FRM_SORT_UP
*&---------------------------------------------------------------------*
*& FormFRM_CHANGE_CAPTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*-->p1 text
*<--p2 text
*----------------------------------------------------------------------*
FORM FRM_CHANGE_CAPTION .
DATA: LT_FIELDCAT TYPE LVC_T_FCAT,
LS_FIELDCAT LIKE LINE OF LT_FIELDCAT.
CALL METHOD G_GRID->GET_FRONTEND_FIELDCATALOG
IMPORTING
ET_FIELDCATALOG = LT_FIELDCAT.
LOOP AT LT_FIELDCAT INTO LS_FIELDCAT.
IF LS_FIELDCAT-FIELDNAME = 'BNAME'.
LS_FIELDCAT-COLTEXT = 'X'.
LS_FIELDCAT-SELTEXT = 'SELECT'.
MODIFY LT_FIELDCAT FROM LS_FIELDCAT.
ENDIF.
ENDLOOP.
CALL METHOD G_GRID->SET_FRONTEND_FIELDCATALOG
EXPORTING
IT_FIELDCATALOG = LT_FIELDCAT.
ENDFORM. " FRM_CHANGE_CAPTION
页:
[1]