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'. "ALV被修改时会自动刷新,没有修改不进行刷新
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, "ALV对应的内表
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字段设为零即可,代码如下:
IF P_FIELD = 'LINE_SUM'.
LS_FIELDCAT-DECIMALS_OUT = '0'.
ENDIF.
2)通过HTML格式来显示表头,示例代码如下:
*-------ALV Commit Setting of ALV_top_of_page--------
FORM alv_top_of_page USING cl_dd TYPE REF TO cl_dd_document.
DATA: m_p TYPE i.
DATA: m_buff TYPE string.
*表头其实完全可以是一个html文件,自己使用html语言进行格式控制
m_buff = ''.
CALL METHOD cl_dd->html_insert
EXPORTING
contents = m_buff
CHANGING
position = m_p.
m_buff = '
配件报废品种汇总表
CALL METHOD CL_DD->HTML_INSERT
EXPORTING
CONTENTS = m_buff
CHANGING
POSITION = m_p.
CONCATENATE '报表日期:' S_DATE-LOW 'TO' S_DATE-HIGH '' into m_buff.
CALL METHOD CL_DD->HTML_INSERT
EXPORTING
CONTENTS = m_buff
CHANGING
POSITION = m_p.
m_buff = '