3.打印和排序,过滤控制
打印的参数控制请参考结构 [LVC_S_PRNT]
排序的参数控制请参考结构[LVC_S_SORT]
过滤的参数控制请参考结构[LVC_S_FILT]
这里不再一一解释,进入中文版本,里面应该也有解释的,虽然一些不是很清楚.
五.编写简单的ALV程序.
首先这里就不详细介绍DIALOG的用法了.
OO的ALV GRID必须存在于一个容器当中,就是FUNCTION的ALV,其实也是一样的,底层也是使用CL_GUI_ALV_GRID这个类的.
首先ALV的显示需要有几个先决条件.
1,字段目录,这个是必须的,如果没有这个参数,参考一个数据字典也是可以的,就是参数I_STRUCTURE_NAME.
2.存放数据的内表,最好内表的结构和字段目录是一致的,否则可能会出现一些无法预知的错误,当然你说我非要不一样,那也不一定会出现错误.我建议是最好一样的.
这2个是必须的,布局的话,应该是可以不设置的,使用默认的就可以了.
第一步:创建个SCREEN,在屏幕上创建个容器,CONTAINER.定义变量.
SPAN {
font-family: "Arial monospaced for SAP";
font-size: 13pt;
color: #000000;
background: #FFFFFF;
}
.L1S52 {
color: #0000FF;
}
DATA:
WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
WCL_ALV TYPE REF TO CL_GUI_ALV_GRID .
WCL_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
WCL_ALV TYPE REF TO CL_GUI_ALV_GRID .
*--- 存放字段目录的内表
DATA gt_fieldcat TYPE lvc_t_fcat .
*--- 布局结构
DATA gs_layout TYPE lvc_s_layo .
DATA gt_fieldcat TYPE lvc_t_fcat .
*--- 布局结构
DATA gs_layout TYPE lvc_s_layo .
*----声明需要显示的内表(以SFLIGHT为例)
DATA BEGIN OF gt_list OCCURS 0 .
INCLUDE STRUCTURE SFLIGHT .
DATA END OF gt_list .
INCLUDE STRUCTURE SFLIGHT .
DATA END OF gt_list .
第二步: 创建ALV这个对象,它的父组件是那个容器.
在PBO中写入如下代码:
PROCESS BEFORE OUTPUT .
MODULE display_alv .
MODULE display_alv .
创建DISPLAY_ALV的MODULE后,写下如下代码:
MODULE display_alv OUTPUT .
PERFORM. display_alv .
ENDMODULE .
PERFORM. display_alv .
ENDMODULE .
在FORM. DISPLAY_ALV中,判断ALV实例是否存在,如果不存在,则创建:
IF WCL_ALV IS INITIAL .
SPAN {
font-family: "Arial monospaced for SAP";
font-size: 13pt;
color: #000000;
background: #FFFFFF;
}
.L0S33 {
color: #4DA619;
}
.L0S52 {
color: #0000FF;
}
CREATE OBJECT: WCL_CONTAINER
EXPORTING
CONTAINER_NAME = 'ALV_CON'.
CREATE OBJECT WCL_ALV
EXPORTING
I_PARENT = WCL_CONTAINER.
CREATE OBJECT WCL_ALV
EXPORTING
I_PARENT = WCL_CONTAINER.
*-----准备获取字段目录
PERFORM. prepare_field_catalog CHANGING gt_fieldcat .
*-----设置布局
PERFORM. prepare_layout CHANGING gs_layout .
*-----显示ALV
CALL METHOD gr_alvgrid->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 gr_alvgrid->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
EXCEPTIONS
finished = 1
OTHERS = 2 .
IF sy-subrc <> 0.
*--异常处理
ENDIF.
ENDIF .
方法"set_table_for_first_display"的参数说明
参数 | 含义 |
I_BUFFER_ACTIVE | 如果方法调用是静态的,可以设置这个标记,这表示,如果每次显示ALV都是 相同的字段目录.既然这样,那么字段目录会被放到一个特殊的缓存里, 这样加速了ALV的显示 |
I_STRUCTURE_NAME | 输出数据参考的数据字典的结构名,例如'SFLIGHT'.如果指定了这个参数,字段 目录会自动生成,下面的参数IT_FIELDCATALOG不需要传值. |
IS_VARIANT | 决定布局显示的变式 |
I_SAVE | 决定用户是否可以保存变式: 'X' 只能保存全局变式 'U' 只能保存特定变式 'A' 都可以保存 SPACE 不可以保存变式 |
I_DEFAULT | 决定用户是否可以定义默认的布局: 'X' 可以定义默认布局,这个参数是默认的 SPACE 不可以定义默认布局 |
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 | 过滤的标准 |
方法"REFRESH_TABLE_DISPLAY"的参数说明
参数 | 含义 |
IS_STABLE | 刷新的稳定性,有2个参数,一个是行,一个是列.如果设置了相应的值, 那么对应的行,或者列,在刷新的时候,将会保持稳定,就是滚动条保持不动. |
I_SOFT_REFRESH | 这个参数只是在异常情况下被使用,如果设置了这个参数,任何创建的合计, 任何排序次序,任何为了显示数据而设置的过滤都将保持不变.这个是非常 有意义的.例如:当然你没有修改数据内表里的数据而想刷新ALV,仅仅只是 改变一下布局和字段目录. |