面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。
基本概念:
1.对象(Object)是一个现实实体的抽象。一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的
实体,这个程序产生该对象的动作或对它接受到的外界信号的反应。这些对象操作有时称为方法。对象是个动态的
概念,其中的属性反映了对象当前的状态。
2.类(Class)用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。每
个对象是类的实例。
使用了对象以后,ALV是通过ALV的一个实例(INSTANCE)来显示的.
实现步骤:
1.创建屏幕
2.屏幕绘制容器(customer control)
3.定义变量
4.创建ALV对象
CREATE OBJECT: WCL_CONTAINER
EXPORTING
CONTAINER_NAME = ‘WCL_CONTAINER’.
CREATE OBJECT WCL_ALV
EXPORTING
I_PARENT = WCL_CONTAINER.
5.显示ALV
CALL METHOD WCL_ALV->SET_TABLE_FOR_FIRST_DISPLAY
OO-ALV的控制结构:
1.字段目录 [Field catalog]:参考结构 LVC_S_FCAT
2.布局控制[layout]:参考结构[LVC_S_LAYO]
3.打印和排序,过滤控制:
打印的参数控制请参考结构 [LVC_S_PRNT]
排序的参数控制请参考结构[LVC_S_SORT]
过滤的参数控制请参考结构[LVC_S_FILT]
开发OO-ALV的基本流程
第1步:创建个SCREEN,在屏幕上创建个定制控制
第2步:定义变量
ALV变量
DATA:
WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER, "存放ALV的容器
WCL_ALV TYPE REF TO CL_GUI_ALV_GRID , "ALV的网格
GT_FIELDCAT TYPE LVC_T_FCAT , "存放字段目录的内表
GS_LAYOUT TYPE LVC_S_LAYO . "布局结构
声明需要显示的内表(以SFLIGHT为例)
DATA BEGIN OF gt_list OCCURS 0 .
INCLUDE STRUCTURE SFLIGHT .
DATA END OF gt_list .
第3步:创建ALV这个对象,它的父组件是那个容器
在PBO中写入如下代码:
PROCESS BEFORE OUTPUT .
MODULE display_alv .
创建DISPLAY_ALV的MODULE后,写下如下代码:
PERFORM display_alv .
在FORM DISPLAY_ALV中,判断ALV实例是否存在,如果不存在, 则创建:
IF WCL_ALV IS INITIAL .
CREATE OBJECT: WCL_CONTAINER
EXPORTING
CONTAINER_NAME = ‘WCL_CONTAINER’.
CREATE OBJECT WCL_ALV
EXPORTING
I_PARENT = WCL_CONTAINER.
获取字段目录
PERFORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT .
获取样式
PERFORM PREPARE_LAYOUT CHANGING GS_LAYOUT .
获取需要显示的数据
PERFORM GET_DATA TABLES GT_LIST.
显示ALV
CALL METHOD WCL_ALV->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_BUFFER_ACTIVE =
I_CONSISTENCY_CHECK =
I_STRUCTURE_NAME =
IS_VARIANT =
I_SAVE =
I_DEFAULT = ‘X’
IS_LAYOUT = GS_LAYOUT
IS_PRINT =
IT_SPECIAL_GROUPS =
IT_TOOLBAR_EXCLUDING =
IT_HYPERLINK =
CHANGING
IT_OUTTAB = GT_LIST[]
IT_FIELDCATALOG = GT_FIELDCAT
IT_SORT =
IT_FILTER =
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
OTHERS = 4 .
ELSE .
*ALV----------------------
CALL METHOD WCL_ALV->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE =
I_SOFT_REFRESH =
EXCEPTIONS
FINISHED = 1
OTHERS = 2 .
IF SY-SUBRC <> 0.
异常处理
ENDIF.
ENDIF .
第4步:获取要显示数据的字段目录有两种方式
1.手动创建
FORM prepare_field_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat .
DATA ls_fcat type lvc_s_fcat .
ls_fcat-fieldname = ‘CARRID’ .
ls_fcat-inttype = ‘C’ .
ls_fcat-outputlen = ‘3’ .
ls_fcat-coltext = ‘Carrier ID’ .
ls_fcat-seltext = ‘Carrier ID’ .
APPEND ls_fcat to pt_fieldcat .
CLEAR ls_fcat .
ls_fcat-fieldname = ‘CONNID’ .
ls_fcat-ref_table = ‘SFLIGHT’ .
ls_fcat-ref_table = ‘CONNID’ .
ls_fcat-outputlen = ‘3’ .
ls_fcat-coltext = ‘Connection ID’ .
ls_fcat-seltext = ‘Connection ID’ .
APPEND ls_fcat to pt_fieldcat .
ENDFORM .
2.根据结构自动创建
FORM PREPARE_FIELD_CATALOG CHANGING GT_FIELDCAT TYPE LVC_T_FCAT.
DATA ls_fcat type lvc_s_fcat .
CALL FUNCTION ‘LVC_FIELDCATALOG_MERGE’
EXPORTING
i_structure_name = ‘SFLIGHT’
CHANGING
ct_fieldcat = GT_FIELDCAT[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
*–Exception handling
ENDIF.
ENDFORM . "prepare_field_catalog
第5步:设置布局
FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.
ps_layout-zebra = ‘X’ .
ps_layout-grid_title = ‘Flights’ .
ps_layout-smalltitle = ‘X’ .
ENDFORM. " prepare_layout
第6步:读取数据至内表
FORM GET_DATA TABLES RT_OUTTAB LIKE GT_LIST[].
SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS
OF TABLE RT_OUTTAB UP TO 30 ROWS.
ENDFORM.
第7步:定义GUI状态栏
SE41复制标准GUI状态
第8步:定义用户响应事件
DATA:ok_code TYPE sy-ucomm, “接受用户按钮
save_ok type sy-ucomm.
在屏幕PAI事件定义MODULE
MODULE user_command_8000.
定义MODULE
MODULE user_command_8000 INPUT.
DATA:save_ok TYPE sy-ucomm.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN ‘BACK’.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_8001 INPUT
第9步:在程序里调用屏幕
CALL SCREEN 8000.
ve_ok type sy-ucomm.
在屏幕PAI事件定义MODULE
MODULE user_command_8000.
定义MODULE
MODULE user_command_8000 INPUT.
DATA:save_ok TYPE sy-ucomm.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN ‘BACK’.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_8001 INPUT
第9步:在程序里调用屏幕
CALL SCREEN 8000.