目录
3、方法 "set_table_for_first_display"的参数说明
一、OO-ALV的定义及调用
1、OO-ALV介绍
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。
1.1、基本概念:
-
对象(Object)是一个现实实体的抽象。一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,这个程序产生该对象的动作或对它接受到的外界信号的反应。这些对象操作有时称为方法。对象是个动态的概念,其中的属性反映了对象当前的状态。
-
类(Class)用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。每个对象是类的实例。
1.2、OOALV的实现
使用了对象以后,ALV是通过ALV的一个实例(INSTANCE)来显示的。
实现步骤:
- 创建屏幕
- 屏幕绘制容器(customer control)
- 定义变量
- 创建ALV对象
- 显示ALV
"创建ALV对象
CREATE OBJECT: WCL_CONTAINER
EXPORTING
CONTAINER_NAME = 'WCL_CONTAINER'.
CREATE OBJECT WCL_ALV
EXPORTING
I_PARENT = WCL_CONTAINER.
"显示ALV
CALL METHOD WCL_ALV->SET_TABLE_FOR_FIRST_DISPLAY
OO-ALV的控制结构:
- 字段目录 [Field catalog]:参考结构 LVC_S_FCAT
- 布局控制 [layout]:参考结构 LVC_S_LAYO
- 打印和排序,过滤控制:
- 打印的参数控制请参考结构 LVC_S_PRNT
- 排序的参数控制请参考结构 LVC_S_SORT
- 过滤的参数控制请参考结构 LVC_S_FILT
2、开发ALV的基本流程
第1步:创建个屏幕(SCREEN),在屏幕上创建个定制控制。
第2步:定义变量。
"定义变量
DATA:
"ALV变量
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 , "布局结构
"要显示的ALV的数据的变量
gt_list TYPE TABLE OF sflight WITH HEADER LINE."创建一个同名的工作区
第3步:创建ALV这个对象,它的父组件是那个容器。
在屏幕中的逻辑流中写如下代码:
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 = 'CONTAINER'. "屏幕上的定制控制的名字
IF wcl_container IS NOT INITIAL.
CREATE OBJECT wcl_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
* 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 p_gt_fieldcat.
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.
第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.
第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状态。
第9步:在程序里调用屏幕。
CALL SCREEN 8000.
3、方法 "set_table_for_first_display"的参数说明
参数 | 含义 |
I_BUFFER_ACTIVE | 如果方法调用是静态的,可以设置这个标记,这表示,如果每次显示ALV都是相同的字段目录。既然这样,那么字段目录会被放到一个特殊的缓存里,这样加速了ALV的显示。 |
I_STRUCTURE_NAME | 输出数据参考的数据字典的结构名,例如'SFLIGHT'。如果指定了这个参数,字段目录会自动生成,下面的参数IT_FIELDCATALOG不需要传值。 |
IS_VARIANT | 决定布局显示的变式。 |
I_SAVE | 决定用户是否可以保存变式: |
I_DEFAULT | 决定用户是否可以定义默认的布局: |
IS_LAYOUT | 布局参数,传递布局控制的一些信息。 |
IS_PRINT | 后台打印属性的参数。 |
IT_SPECIAL_GROUPS | 如果在字段目录中,一些字段通过SP_GROUP被分组在一起。我们就必须为这些组传递一个组的文本内表进去。 |
IT_TOOLBAR_EXCLUDING | 需要隐藏的标准的按钮的内表。 |
IT_HYPERLINK | 为每个句柄分配了超连接的内表,LVC_S_HYPE中的HREF存放了超连接的地址,HANDLE指定了句柄,使用这些句柄,你可以在GRID中使用超连接。 |
IT_ALV_GRAPHICS | 比较复杂,没有用过,意思好象是可以在图表中显示ALV。 |
IT_OUTTAB | 输出数据存放的内表,数据都是存放在这个内表里。 |
IT_FIELDCATALOG | 字段目录。 |
IT_SORT | 排序的标准。 |
IT_FILTER | 过滤的标准。 |
IS_STABLE | 刷新的稳定性,有2个参数,一个是行,一个是列.如果设置了相应的值,那么对应的行,或者列,在刷新的时候,将会保持稳定,就是滚动条保持不动。 |
I_SOFT_REFRESH | 这个参数只是在异常情况下被使用,如果设置了这个参数,任何创建的合计,任何排序次序,任何为了显示数据而设置的过滤都将保持不变,这个是非常有意义的。例如:当然你没有修改数据内表里的数据而想刷新ALV,仅仅只是改变一下布局和字段目录。 |
二、OO-ALV示例程序
ZPROGRAM_F0052