1、文檔介紹
在ALV中,可以通過增加頁眉和頁腳,豐富ALV的展示。除了基本的頁眉和頁腳,還可以通過插入HTML代碼的方式展示更加豐富的頁眉和頁腳,本篇文章將介紹ALV和OOALV中頁眉頁腳的使用。
2、ALV頁眉頁腳
效果如下
2.1、顯示內容
頁眉和頁腳,都通過函數REUSE_ALV_COMMENTARY_WRITE顯示內容。
頁眉
"--------------------@斌將軍--------------------
FORM FRM_TOP_OF_PAGE .
DATA:lt_listheader TYPE slis_t_listheader,
ls_listheader TYPE slis_listheader.
CLEAR:ls_listheader.
ls_listheader-typ = 'H'."標題
ls_listheader-info = '頁眉'.
APPEND ls_listheader TO lt_listheader.
CLEAR ls_listheader.
ls_listheader-typ = 'S'.
ls_listheader-key = '編制單位:'.
ls_listheader-info = '1100'.
APPEND ls_listheader TO lt_listheader.
CLEAR ls_listheader.
ls_listheader-typ = 'S'.
ls_listheader-info = '1200'.
APPEND ls_listheader TO lt_listheader.
CLEAR ls_listheader.
ls_listheader-typ = 'A'.
ls_listheader-info = '單位:元'.
APPEND ls_listheader TO lt_listheader.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = lt_listheader "顯示的數據
i_logo = 'ENJOYSAP_LOGO' "顯示的圖片LOGO
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
ENDFORM. " FRM_TOP_OF_PAGE
"--------------------@斌將軍--------------------
頁腳
"--------------------@斌將軍--------------------
FORM FRM_END_OF_LIST .
DATA:lt_listheader TYPE slis_t_listheader,
ls_listheader TYPE slis_listheader.
CLEAR:ls_listheader.
ls_listheader-typ = 'H'.
ls_listheader-info = '頁腳'.
APPEND ls_listheader TO lt_listheader.
CLEAR ls_listheader.
ls_listheader-typ = 'S'.
ls_listheader-key = '作者:'.
ls_listheader-info = '斌將軍'.
APPEND ls_listheader TO lt_listheader.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = lt_listheader
i_logo = 'ENJOYSAP_LOGO'
* I_END_OF_LIST_GRID =
* I_ALV_FORM =
.
ENDFORM. " FRM_END_OF_LIST
"--------------------@斌將軍--------------------
?其中的LOGO,可以通過事務代碼OAER,輸入對應信息
?找到對應LOGO
2.2、ALV事件方式實現(xiàn)
實現(xiàn)頁眉和頁腳,都可以通過注冊ALV事件EVENT,調用對應的子例程,顯示對應內容
?事件代碼
"--------------------@斌將軍--------------------
DATA:gt_event TYPE slis_t_event."事件
FORM frm_get_event.
DATA:lv_frm_top_of_page TYPE slis_formname VALUE 'FRM_TOP_OF_PAGE',"頁眉子例程
lv_frm_end_of_list TYPE slis_formname VALUE 'FRM_END_OF_LIST',"頁腳子例程
ls_events TYPE slis_alv_event.
"獲取事件
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = gt_event
EXCEPTIONS
list_type_wrong = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
"查找TOP_OF_PAGE事件,并將回調子例程傳輸給FORM
READ TABLE gt_event ASSIGNING FIELD-SYMBOL(<fs_ls_event>) WITH KEY name = slis_ev_top_of_page.
IF sy-subrc = 0.
<fs_ls_event>-form = lv_frm_top_of_page.
ELSE.
CLEAR:ls_events.
ls_events-form = lv_frm_top_of_page.
ls_events-name = lv_frm_top_of_page.
APPEND ls_events TO gt_event.
ENDIF.
"查找END_OF_LIST事件,并將回調子例程傳輸給FORM
READ TABLE gt_event ASSIGNING <fs_ls_event> WITH KEY name = slis_ev_end_of_list.
IF sy-subrc = 0.
<fs_ls_event>-form = lv_frm_end_of_list.
ELSE.
CLEAR:ls_events.
ls_events-form = lv_frm_end_of_list.
ls_events-name = lv_frm_end_of_list.
APPEND ls_events TO gt_event.
ENDIF.
ENDFORM. " FRM_GET_EVENT
"--------------------@斌將軍--------------------
在調用ALV時,傳入EVENT
2.3、ALV參數實現(xiàn)頁眉
如果單獨實現(xiàn)頁眉效果,就不需要這么復雜,可以直接將頁眉子例程傳入ALV函數REUSE_ALV_GRID_DISPLAY_LVC的I_CALLBACK_TOP_OF_PAGE參數中,調用子例程
3、ALV展示HTML頁眉頁腳
效果如下
ALV
頁眉和頁腳的子例程代碼類似
"--------------------@斌將軍--------------------
FORM frm_html_top_of_page USING document TYPE REF TO cl_dd_document.
DATA:lv_pos TYPE i,
lv_text TYPE sdydo_text_element,
lv_buffer TYPE string.
lv_buffer = '<HTML><CENTER><H1>' && '頁眉' && '</H1></CENTER></HTML>'.
CALL METHOD document->html_insert
EXPORTING
contents = lv_buffer
CHANGING
position = lv_pos.
lv_text = '標題'.
CALL METHOD document->add_text
EXPORTING
text = lv_text
sap_style = 'HEADING'.
"插入兩行空行
CALL METHOD document->new_line.
CALL METHOD document->add_icon
EXPORTING
sap_icon = 'ICON_CUSTOMER'.
"STRONG是加粗
lv_text = '用戶名:'.
CALL METHOD document->add_text
EXPORTING
text = lv_text
sap_emphasis = 'Strong'.
"間隔
CALL METHOD document->add_gap
EXPORTING
width = 2.
lv_text = '斌將軍'.
CALL METHOD document->add_text
EXPORTING
text = lv_text
sap_fontsize = cl_dd_document=>large
sap_fontstyle = cl_dd_document=>serif
sap_emphasis = cl_dd_document=>emphasis.
"間隔
CALL METHOD document->add_gap
EXPORTING
width = 10.
CALL METHOD document->add_icon
EXPORTING
sap_icon = 'ICON_DATE'.
lv_text = '日期:'.
CALL METHOD document->add_text
EXPORTING
text = lv_text
sap_emphasis = 'Strong'.
CALL METHOD document->add_gap
EXPORTING
width = 2.
lv_text = '20240420'.
CALL METHOD document->add_text
EXPORTING
text = lv_text
sap_style = 'Key'.
CALL METHOD document->add_gap
EXPORTING
width = 10.
CALL METHOD document->add_icon
EXPORTING
sap_icon = 'ICON_INFORMATION'.
lv_text = '鏈接:'.
CALL METHOD document->add_text
EXPORTING
text = lv_text
sap_emphasis = 'Strong'.
CALL METHOD document->add_link
EXPORTING
url = 'http://www.baidu.com'
tooltip = '百度' "小手指的提示信息
text = 'Baidu'.
"橫線
CALL METHOD document->underline.
ENDFORM. "HTML_TOP_OF_PAGE
"--------------------@斌將軍--------------------
4、OOALV頁眉頁腳
效果如下
首先,如上圖將界面分為上、中、下三部分。關于屏幕分割,也可以參考《OOALV 分割屏幕?》
"--------------------@斌將軍--------------------
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_CONTAINER_9000
*& 創(chuàng)建容器
*&---------------------------------------------------------------------*
FORM frm_create_container_9000.
"創(chuàng)建 容器
CREATE OBJECT g_container_9000
EXPORTING
repid = sy-repid
dynnr = '9000'
side = cl_gui_docking_container=>dock_at_top "ALV貼屏幕左邊,從左邊算屏幕寬度,
extension = 1000"屏幕寬度
style = cl_gui_control=>ws_child "可選參數,設置ALV是否可用手動拖動大小
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
MESSAGE s001(00) WITH '屏幕初始化失敗'.
LEAVE LIST-PROCESSING.
ENDIF.
"拆分成3行1列部分
CREATE OBJECT g_splitter
EXPORTING
parent = g_container_9000
rows = 3
columns = 1.
"第一行第一列 "用作頁眉
CALL METHOD g_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = g_container_t.
CALL METHOD g_splitter->set_row_height "設置行高
EXPORTING
id = 1 "第幾行
height = 20.
"第二行第一列 用作展示主要數據
CALL METHOD g_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = g_container_m.
"第三行第一列 "用作頁腳
CALL METHOD g_splitter->get_container
EXPORTING
row = 3
column = 1
RECEIVING
container = g_container_e.
CALL METHOD g_splitter->set_row_height "設置行高
EXPORTING
id = 3 "第幾行
height = 20.
CREATE OBJECT g_grid "中間部分為展示主數據
EXPORTING
i_parent = g_container_m.
ENDFORM.
"--------------------@斌將軍--------------------
定義類和方法,實現(xiàn)頁眉和頁腳
"--------------------@斌將軍--------------------
CLASS alv_event_9000 DEFINITION DEFERRED."
CLASS alv_event_9000 DEFINITION.
PUBLIC SECTION.
METHODS handle_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid
IMPORTING e_dyndoc_id.
METHODS handle_end_of_list FOR EVENT end_of_list OF cl_gui_alv_grid
IMPORTING e_dyndoc_id.
ENDCLASS. "alv_event_9000 DEFINITION
*----------------------------------------------------------------------*
* CLASS BELOW_ALV_EVENT IMPLEMENTATION 定義的事件類對應的事件響應模塊
*----------------------------------------------------------------------*
CLASS alv_event_9000 IMPLEMENTATION.
METHOD handle_top_of_page.
PERFORM frm_event_top_of_page USING g_dyndoc_t.
ENDMETHOD.
METHOD handle_end_of_list.
PERFORM frm_event_end_of_list USING g_dyndoc_e.
ENDMETHOD.
ENDCLASS. "alv_event_9000 IMPLEMENTATION
"--------------------@斌將軍--------------------
在事件中注冊頁眉和頁腳方法
"--------------------@斌將軍--------------------
FORM frm_alv_event_9000.
DATA: lr_event_handler TYPE REF TO alv_event_9000.
IF lr_event_handler IS INITIAL.
CREATE OBJECT lr_event_handler.
ENDIF.
SET HANDLER lr_event_handler->handle_top_of_page FOR g_grid.
SET HANDLER lr_event_handler->handle_end_of_list FOR g_grid.
ENDFORM.
"--------------------@斌將軍--------------------
顯示ALV
"--------------------@斌將軍--------------------
CALL METHOD g_grid->set_table_for_first_display
EXPORTING
i_save = 'A'
i_default = 'X' "允許定義默認布局
is_layout = gs_layout
CHANGING
it_outtab = gt_alv
it_fieldcatalog = gt_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
ENDIF.
CREATE OBJECT g_dyndoc_t
EXPORTING
style = 'ALV_GRID'.
* CALL METHOD g_dyndoc_t->initialize_document
* EXPORTING
* background_color = cl_dd_area=>col_textarea.
"對于頁眉使用TOP_OF_PAGE事件
CALL METHOD g_grid->list_processing_events
EXPORTING
i_event_name = 'TOP_OF_PAGE'
i_dyndoc_id = g_dyndoc_t.
CREATE OBJECT g_dyndoc_e
EXPORTING
style = 'ALV_GRID'.
"對于頁腳使用END_OF_LIST事件
CALL METHOD g_grid->list_processing_events
EXPORTING
i_event_name = 'END_OF_LIST'
i_dyndoc_id = g_dyndoc_e.
"--------------------@斌將軍--------------------
頁眉和頁腳的子例程類似,頁腳子例程如下
"--------------------@斌將軍--------------------
FORM frm_event_end_of_list USING document TYPE REF TO cl_dd_document.
DATA:lv_pos TYPE i,
lv_text TYPE sdydo_text_element,
lv_buffer TYPE string.
lv_buffer = '<HTML><CENTER><H1>' && '頁腳' && '</H1></CENTER></HTML>'.
CALL METHOD document->html_insert
EXPORTING
contents = lv_buffer
CHANGING
position = lv_pos.
"頁腳HTML視圖
IF g_html_e IS INITIAL.
CREATE OBJECT g_html_e
EXPORTING
parent = g_container_e.
ENDIF.
CALL METHOD document->merge_document.
document->html_control = g_html_e.
"顯示
CALL METHOD document->display_document
EXPORTING
reuse_control = 'X'
parent = g_container_e
EXCEPTIONS
html_display_error = 1.
ENDFORM.
"--------------------@斌將軍--------------------
參考代碼,可通過鏈接獲取
鏈接:https://pan.baidu.com/s/18bNmfmC9zSh1Si8W6AhQCQ?pwd=c0oj
提取碼:c0oj
5、總結
以上就是關于ALV合并單元格的介紹,希望對您有所幫助。
定期更文,歡迎關注文章來源:http://www.zghlxwxcb.cn/news/detail-857444.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-857444.html
到了這里,關于實現(xiàn)ALV頁眉頁腳的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!