开发ALV的基本流程
开发ALV的基本流程
第1步:声明变量
定义ALV所要用到的类型池:TYPE-POOLS: SLIS
针对ALV的控制信息数据(Layout & Fieldcat)
第2步:定义内表
存放自定义数据文件的数据,以及在ALV中显示
第3步:读取数据
读取数据存放至Internal Table
第4步:ALV格式控制
建立ALV显示样式(layout)和显示字段清单(Field Catalogs)
第5步:定义事件
建立事件清单(Event Catalogs)
第6步:显示ALV
调用ALV Function Module
第7步:用户事件
定义User按键处理事件
第一步:声明变量
数据变量(Data Area)定义
声明类型组SLIS
TYPE-POOLS: slis.
DATA:
fieldcat TYPE slis_t_fieldcat_alv, “字段清单内表
fieldcat_ln LIKE LINE OF fieldcat, “字段清单工作区
layout TYPE slis_layout_alv, “ALV格式
sortcat TYPE slis_t_sortinfo_alv, “ALV排序字段清单内表
sortcat_ln LIKE LINE OF sortcat,
eventcat TYPE slis_t_event, “ALV事件
eventcat_ln LIKE LINE OF eventcat.”ALV事件工作区
DATA: col_pos TYPE i.
第二步:定义内表
DATA: BEGIN OF ivbap OCCURS 0,
vbeln LIKE vbap-vbeln,
matnr LIKE vbap-matnr,
matkl LIKE vbap-matkl,
END OF ivbap.
第三步:读取数据
SELECT vbeln posnr matnr matkl kwmeng vrkme
INTO CORRESPONDING FIELDS OF TABLE ivbap
FROM vbap
WHERE vbeln NE space.
第四步:ALV格式控制
ALV格式控制
layout-zebra = ‘X’. ”呈现颜色交替
layout-detail_popup = ‘X’. "是否弹出详细信息窗口
layout-f2code = ‘&ETA’. "设置触发弹出详细信息窗口的功能码,这里是双击
layout-no_vline = ‘X’. "这个用来设置列间隔线
layout-colwidth_optimize = ‘X’. "优化列宽选项是否设置
layout-detail_initial_lines = ‘X’.
layout-detail_titlebar = ‘详细内容’."设置弹出窗口的标题栏
字段目录是用来控制ALV显示的网格中每个字段的属性的,比如字段的顺序,对齐方式,可编辑状态,颜色,等等
ADD 1 TO col_pos.
fieldcat_ln-ref_tabname = ‘VBAP’.
fieldcat_ln-fieldname = ‘VBELN’.
fieldcat_ln-key = ‘X’.
fieldcat_ln-do_sum = space.
fieldcat_ln-col_pos = col_pos.
fieldcat_ln-no_out = space.
fieldcat_ln-qfieldname = space.
fieldcat_ln-hotspot = ‘X’.
APPEND fieldcat_ln TO fieldcat.
第五步:定义事件
建立事件清单(Event Catalogs)
需定义事件块,否则出错
eventcat_ln-name = ‘TOP_OF_PAGE’
eventcat_ln-form = ‘PAGE_HEADER’.
APPEND eventcat_ln TO eventcat.
事件块:
FORM PAGE_HEADER.
ENDFORM.
第六步:显示ALV
ALV显示
DATA: pgm LIKE sy-repid.
pgm = sy-repid.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
i_callback_program = pgm
i_callback_pf_status_set = ‘SET_STATUS’
i_callback_user_command = ‘USER_COMMAND’
is_layout = layout
it_fieldcat = fieldcat[]
it_sort = sortcat[]
i_save = ‘A’
”it_event = eventcat[]
TABLES
t_outtab = ivbap
EXCEPTIONS
program_error = 1
OTHERS = 2.
第七步:用户事件
USER-COMMAND子例程
FORM user_command USING ucomm LIKE sy-ucomm
selfield TYPE slis_selfield.
READ TABLE ivbap INDEX selfield-tabindex.
CHECK sy-subrc = 0.
CASE ucomm.
WHEN ‘&IC1’.
CASE selfield-sel_tab_field.
WHEN ‘IVBAP-VBELN’.
SET PARAMETER ID ‘AUN’ FIELD ivbap-vbeln.
CALL TRANSACTION ‘VA03’ AND SKIP FIRST SCREEN.
WHEN ‘IVBAP-MATNR’.
SET PARAMETER ID ‘MAT’ FIELD ivbap-matnr.
CALL TRANSACTION ‘MM03’ AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM.
ID ‘AUN’ FIELD ivbap-vbeln.
CALL TRANSACTION ‘VA03’ AND SKIP FIRST SCREEN.
WHEN ‘IVBAP-MATNR’.
SET PARAMETER ID ‘MAT’ FIELD ivbap-matnr.
CALL TRANSACTION ‘MM03’ AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM.