面向对象编程(object oriented programming, oop,面向对象程序设计):是一种计算机编程框架。
面向过程参考的是slis,还有面向对象的是参考的lvc结构。
1.基本概念
1.对象,是一个现实实体的抽象(数据和程序)(属性和方法).
2.类 ,用来描述具有相同的属性和方法的对象的集合;
使用了对象以后,ALV是通过ALV的一个实例(INSTANCE)来显示的。
实现步骤
1.创建屏幕
2.屏幕绘制容器(Customer control)
3.定义变量
4.创建ALV对象
creat object: wcl_container
exporting
container_name = ‘WCL_CONTAINER’.
Creat object wcl_alv
EXORTING
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]
2.类和接口的定义
TYPE REF TO (表示参考类)
要展示数据写在屏幕上;
调用方法写在PBO里;
建立屏幕 (还要建立一个contailner),在逻辑流上写下面的代码:
PROCESS BEFORE OUTPUT.
MODULE STATUS_8000.
MODULE DISPLAY_ALV
PROCESS AFTER INPUT.
MODULE USER_COMMAND_8000.
以下是代码实现了面向对象的ALV
3.例子(主程序)
REPORT zjgltest03.
" ALV变量
DATA:
wcl_container TYPE REF TO cl_gui_custom_container , " 存放ALV的容器
wcl_alv TYPE REF TO cl_gui_alv_grid, " ALV的网格instance
gt_fieldcat TYPE lvc_t_fcat, " 存放字段目录的内表
gs_layout TYPE lvc_s_layo. " 布局结构
" 要显示的ALV的数据的变量
DATA: gt_list TYPE TABLE OF ztesoppap ,
wa_list TYPE ztesoppap.
DATA:ok_code LIKE sy-ucomm,
save_ok LIKE sy-ucomm.
CALL SCREEN 2000.
*&---------------------------------------------------------------------*
*& Module STATUS_8000 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_8000 OUTPUT.
SET PF-STATUS 'STANDARD'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_8000 OUTPUT
*&---------------------------------------------------------------------*
*& Module DISPLAY_ALV OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE display_alv OUTPUT.
PERFORM display_alv.
ENDMODULE. " DISPLAY_ALV OUTPUT
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_alv .
IF wcl_alv IS INITIAL.
CREATE OBJECT wcl_container " create container
EXPORTING
container_name = 'CONTAINER'. " The name is CAPSLOCK.
IF wcl_container IS NOT INITIAL.
CREATE OBJECT wcl_alv " create alv
EXPORTING
i_parent = wcl_container.
ENDIF.
"获取字段目录
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
is_layout = gs_layout
CHANGING
it_outtab = gt_list[]
it_fieldcatalog = gt_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
ELSE.
CALL METHOD wcl_alv->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDIF.
ENDFORM. " DISPLAY_ALV
*&---------------------------------------------------------------------*
*& Form PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_FIELDCAT text
*----------------------------------------------------------------------*
FORM prepare_field_catalog CHANGING p_gt_fieldcat.
DATA ls_fcat TYPE lvc_s_fcat .
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
* I_BUFFER_ACTIVE =
i_structure_name = 'ZTESOPPAP'
* I_CLIENT_NEVER_DISPLAY = 'X'
* I_BYPASSING_BUFFER =
* I_INTERNAL_TABNAME =
CHANGING
ct_fieldcat = p_gt_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM. " PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& Form PREPARE_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GS_LAYOUT text
*----------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_LIST text
*----------------------------------------------------------------------*
FORM get_data TABLES rt_outtab LIKE gt_list[].
SELECT * FROM ztesoppap INTO CORRESPONDING FIELDS OF TABLE
rt_outtab UP TO 30 ROWS.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_8000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_8000 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_8000 INPUT
4.标准ALV例子
以下是在SE38中打开的事物代码.
BCALV_FULLSCREEN_DEMO
BCALV_EDIT*
最好找SAP相关的demo来学习其中的用法。这样是最节省时间的。有时候自开发的例子可以用的比老的例子。