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)。
三、ALV相关开发细节
1、标准ALV与对象ALV的共同开发细节
2、标准ALV开发相关细节
2.1、ALV中的各种结构类型注解:
1)TYPE-POOLS: slis:用于指定ALV类型组;
2)slis_listheader:用于定义top of page的抬头结构; 3)slis_t_listheader:用于定义top of page的抬头表
4)slis_t_sortinfo_alv:用于指定ALV排序分类合计等信息的数据对象; 3)slis_layout_alv :用于定义布局类型数据对象;
4)slis_t_fieldcat_alv WITH HEADER LINE:用于定义ALV列字段相关类型数据 对象;(slis_t_fieldcat_alv是表字段的整体,slis_fieldcat_alv是某一个字段的内容,将该字段的内容写到 slis_fieldcat_alv后,通过append添加到slis_t_fieldcat_alv中,后者是整个列表的标题,在显示的时候用到。)
5)slis_t_event :是event的整体可看作event的集合,感觉可以用来写表头。 slis_alv_event是某个event, 需要将slis_alv_event append到slis_t_event.它可以包含图片和listheader等,也就是说listheader等是靠event来显示的。
6)slis_t_listheader :是listheader的集合,slis_listheader是某个listheader。将slis_listheader赋值后append到slis_t_listheader中。它是内表的表头。
7)slis_listheader : 包含:typ :H = header,S = Selection,A = action. key : 是和s对应的,是那个的标题吧. info:可以是变量和赋值的。跟在key的标题后面,
是个表达值。
2.2、ALV中所用到的函数: 1)显示ALV函数:
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
上面“REUSE_ALV_GRID_DISPLAY “函数的参数说明: 1> g_repid:用于保存当前程序名,例如:
g_repid TYPE sy-repid VALUE sy-repid \保存当前程序名 2> FRM_STATUS_ALV:该子程序用于指定程序状态,例如: FORM frm_status_alv USING p_extab TYPE slis_t_extab. SET PF-STATUS 'STANDARD'.
ENDFORM.
3> FRM_USER_COMMAND_ALV:该子程序指定相关函数功能码的响应逻辑,例如: FORM frm_user_command_alv USING p_ucomm
TYPE sy-ucomm p_selfield TYPE slis_selfield.
ok_code = p_ucomm. CASE ok_code.
WHEN 'CREATE'.
? ?
WHEN 'DELETE'.
? ?
ENDCASE.
p_selfield-refresh = 'X'. \被修改时会自动刷新,没有修改不进行刷新
ENDFORM.
4> g_layout:用于设置ALV布局样式,例如:
FORM frm_alv_layout_build. g_layout-zebra = 'X'.
g_layout-colwidth_optimize = 'X'. \列数据最优化显示
g_layout-box_fieldname = 'SELFLAG'. \表示ALV行项目选中的字段 ENDFORM.
5> g_fieldcat_alv[]:用于指定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. * l_fieldcat-no_zero = 'X'.
APPEND l_fieldcat TO g_fieldcat_alv. ENDFORM.
6> it_main:此内表中保存的是ALV所要展示的数据,例如:
it_main TYPE TABLE OF typ_item WITH HEADER LINE, \对应的内表 SELECT lifnr \供应商账号 ktokk \账号组 name1 \名称1 name2 \名称2
INTO CORRESPONDING FIELDS OF TABLE it_main FROM zmmjyht003 WHERE (l_where) .
此函数的其它参数信息,详见附属信息中的 'REUSE_ALV_GRID_DISPLAY'函数常用参数
2) reuse_alv_events_get : 将各个事件的名字写到slis_t_event的name中。这样,可以在后面,根据名字的不同,对不同的event付不同的form,来实现不同功能。
2.3、ALV其它相关信息:
1)ABAP alv中对数字字段进行去掉小数点后面的零的操作如下:
在slis_t_fieldcat_alv结构中,给demcimals_out字段设为零即可,代码如下:
相关推荐: