SAP ABAP 开发ALV的基本流程(ALV资料二)
第一步:定义ALV所要用到的类型池:TYPE-POOLS: SLIS ;
第二步:定义ALV所要显示的数据对应的内表数据类型及内表数据对象;
第三步:定义一些显示ALV时所要使用到的变量,例如:
Data: w_repid like sy-repid, “ABAP程序,我们一般取当前程序
w_callback_ucomm type slis_formname, "字符型,功能
w_print type slis_print_alv, "类型组
w_layout type slis_layout_alv, "类型组
w_html_top_of_page type slis_formname, "字符型
w_fieldcat_alv like line of i_fieldcat_alv, “从上面的数据结构类型引用过来的
w_excluding like line of i_excluding, “同上
w_events like line of i_events, “同上
w_event_exit like line of i_event_exit, “同上
w_list_comments like line of i_list_comments.“同上
第四步:定义选择屏幕 ;
第五步:声明各个选择屏幕事件块,例如:
定义initialization部分,在这个部分往往要指定w_repid的值,w_repid = sy-repid。
定义start-of-selection部分,在这通常会调用各种子程序,以下以标准ALV显示为例:
1)调用一个子程序(通常命名为frm_get_dataXXX(X代表任意自定义字母)),用于获取ALV所要显示的数据 ;例如:
FORM frm_get_data.
… … “其它处理逻辑
SELECT lifnr "供应商账号
ktokk "账号组
name1 "名称1
name2 "名称2
INTO CORRESPONDING FIELDS OF TABLE it_main
FROM zmmjyht003
WHERE (l_where)
.
… … “其它处理逻辑
ENDFORM.
2)调用一个子程序(通常命名为frm_alv_layout_build),用于设置ALV所要显示的样式 ;
例如:
FORM frm_alv_layout_build.
g_layout-zebra = 'X'.
g_layout-colwidth_optimize = 'X'. "列数据最优化显示
g_layout-box_fieldname = 'SELFLAG'. "表示ALV行项目选中的字段
ENDFORM.
3)调用一个子程序(通常命名为frm_alv_set_columns),用于完成ALV所要显示的列的相关设置 ;
例如:
FORM frm_alv_set_columns.
REFRESH g_fieldcat_alv.
PERFORM frm_set_l_fieldcat USING 1 'LIFNR' '供应商账号'.
ENDFORM.
FORM frm_set_l_fieldcat USING p_pos p_name p_text.
DATA: l_fieldcat TYPE slis_fieldcat_alv.
l_fieldcat-col_pos = p_pos.
l_fieldcat-fieldname = p_name.
l_fieldcat-seltext_l = p_text.
APPEND l_fieldcat TO g_fieldcat_alv.
ENDFORM.
4)调用显示ALV的函数,例如:REUSE_ALV_GRID_DISPLAY ;
FORM frm_alv_display_data.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_callback_pf_status_set = 'FRM_STATUS_ALV'
i_callback_user_command = 'FRM_USER_COMMAND_ALV'
is_layout = g_layout
it_fieldcat = g_fieldcat_alv[]
TABLES
t_outtab = it_main
EXCEPTIONS
program_error = 1
OTHERS = 2
.
ENDFORM.
如果ALV所要展示的列过多时,建议先在数据字典系统中创建相应的结构,这样可免去对输出列表头信息的繁琐编辑处理,代码行也会缩短。只要将上面函数中的it_fieldcat参数替换成i_structure_name,如:I_STRUCTURE_NAME = 'TY_OUT_FILE',注意:此处的TY_OUT_FILE结构必须是数据字典中已经存在的对象
以上步骤,详见“示例程序”部分:示例一(标准ALV)。