您的位置:首页 > 其它

用OO方法开发ALV(实现横向alv head,与纵向ALV head比较相似,只有少许不同)

2010-04-13 16:04 507 查看


实现横向ALV HEAD和纵向ALV的不同之处请注意红色代码:

REPORT zctest13.
CLASS cl_events DEFINITION DEFERRED.
TABLES: kna1.
DATA: save_ok TYPE sy-ucomm,
ok_code TYPE sy-ucomm,
w_fname TYPE scrfname VALUE 'CONT1',
w_grid TYPE REF TO cl_gui_alv_grid,
w_cont TYPE REF TO cl_gui_custom_container,
it_fieldcat TYPE lvc_t_fcat,
iw_layout TYPE lvc_s_layo,
w_receiver TYPE REF TO cl_events,
it_exclude TYPE ui_functions.
DATA: w_doc TYPE REF TO cl_dd_document,
w_splitter TYPE REF TO cl_gui_splitter_container,
w_viewer TYPE REF TO cl_gui_html_viewer,
w_head TYPE REF TO cl_gui_container,
w_body TYPE REF TO cl_gui_container.
DATA: it_kna1 TYPE TABLE OF kna1,
iw_kna1 TYPE kna1.
*----------------------------------------------------------------------*
* CLASS cl_events DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cl_events DEFINITION.
PUBLIC SECTION.
METHODS handle_double_click FOR EVENT double_click
OF cl_gui_alv_grid IMPORTING e_row e_column.
METHODS handle_top_of_page FOR EVENT top_of_page
OF cl_gui_alv_grid IMPORTING e_dyndoc_id.
ENDCLASS. "cl_events DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_events IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS cl_events IMPLEMENTATION.
METHOD handle_double_click.
PERFORM f_double_click USING e_row.
ENDMETHOD. "handle_double_click
METHOD handle_top_of_page.
PERFORM f_top_of_page USING e_dyndoc_id.
ENDMETHOD. "handle_top_of_page
ENDCLASS. "cl_events DEFINITION
SELECT-OPTIONS s_kunnr FOR kna1-kunnr.
START-OF-SELECTION.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE it_kna1
FROM kna1
WHERE kunnr IN s_kunnr.
CALL SCREEN 0100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STU_0100'.
IF w_cont IS INITIAL.
PERFORM f_create_alv.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'SAVE'.
CALL METHOD w_grid->check_changed_data.
WHEN 'BACK' or 'CANCEL'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module CANCEL INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE cancel INPUT.
LEAVE TO SCREEN 0.
ENDMODULE. " CANCEL INPUT
*&---------------------------------------------------------------------*
*& Form f_create_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_create_alv .
DATA: lw_line TYPE i,
liw_fieldcat TYPE lvc_s_fcat.
CREATE OBJECT w_cont
EXPORTING
container_name = w_fname.
CREATE OBJECT w_doc.
* EXPORTING
* style = 'ALV_GRID'.
CREATE OBJECT w_splitter
EXPORTING
parent = w_cont
rows = 2
columns = 1.  "将容器分为两上下两部分
* 分配容器
CALL METHOD w_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = w_head.
CALL METHOD w_splitter->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = w_body. "将上下两部分分配给两个container
* 设定上边容器初始高度
CALL METHOD w_splitter->set_row_height
EXPORTING
id = 1
height = 15.
CREATE OBJECT w_grid
EXPORTING
i_parent = w_body.
* CALL METHOD w_grid->register_edit_event
* EXPORTING
* i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CREATE OBJECT w_receiver.
SET HANDLER w_receiver->handle_double_click FOR w_grid.
SET HANDLER w_receiver->handle_top_of_page FOR w_grid.
CALL METHOD cl_gui_control=>set_focus
EXPORTING
control = w_grid.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'KNA1'
CHANGING
ct_fieldcat = it_fieldcat.
DESCRIBE TABLE it_fieldcat LINES lw_line.
DELETE it_fieldcat FROM 9 TO lw_line.
READ TABLE it_fieldcat INTO liw_fieldcat INDEX 5.
liw_fieldcat-edit = 'X'.
liw_fieldcat-drdn_hndl = '1'.
liw_fieldcat-checktable = '!'.
MODIFY it_fieldcat FROM liw_fieldcat INDEX 5.
READ TABLE it_fieldcat INTO liw_fieldcat INDEX 6.
liw_fieldcat-edit = 'X'.
liw_fieldcat-drdn_hndl = '1'.
liw_fieldcat-checktable = '!'.
MODIFY it_fieldcat FROM liw_fieldcat INDEX 6.
PERFORM f_fill_exclude.
PERFORM f_dropdown.
CALL METHOD w_grid->set_table_for_first_display
EXPORTING
it_toolbar_excluding = it_exclude
CHANGING
it_outtab = it_kna1
it_fieldcatalog = it_fieldcat.
CALL METHOD w_grid->set_ready_for_input
EXPORTING
i_ready_for_input = 1.
* CALL METHOD w_doc->initialize_document.
CALL METHOD w_grid->list_processing_events
EXPORTING
i_event_name = 'TOP_OF_PAGE'
i_dyndoc_id = w_doc.
ENDFORM. " f_create_alv
*&---------------------------------------------------------------------*
*& Form F_FILL_EXCLUDE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_fill_exclude .
DATA liw_exclude TYPE ui_func.
liw_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND liw_exclude TO it_exclude.
liw_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND liw_exclude TO it_exclude.
liw_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND liw_exclude TO it_exclude.
liw_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND liw_exclude TO it_exclude.
liw_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND liw_exclude TO it_exclude.
liw_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND liw_exclude TO it_exclude.
liw_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND liw_exclude TO it_exclude.
liw_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND liw_exclude TO it_exclude.
liw_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND liw_exclude TO it_exclude.
liw_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND liw_exclude TO it_exclude.
ENDFORM. " F_FILL_EXCLUDE
*&---------------------------------------------------------------------*
*& Form F_DROPDOWN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_dropdown .
DATA: lit_dropdown TYPE lvc_t_drop,
liw_dropdown TYPE lvc_s_drop.
liw_dropdown-handle = '1'.
liw_dropdown-value = '1'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '2'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '3'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '4'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '5'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '6'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '7'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '8'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '9'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '10'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '11'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '12'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '13'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '14'.
APPEND liw_dropdown TO lit_dropdown.
liw_dropdown-handle = '1'.
liw_dropdown-value = '15'.
APPEND liw_dropdown TO lit_dropdown.
CALL METHOD w_grid->set_drop_down_table
EXPORTING
it_drop_down = lit_dropdown.
ENDFORM. " F_DROPDOWN
*&---------------------------------------------------------------------*
*& Form F_DOUBLE_CLICK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_double_click USING f_row TYPE lvc_s_row.
DATA: w_kunnr TYPE kunnr.
CLEAR iw_kna1.
READ TABLE it_kna1 INTO iw_kna1 INDEX f_row-index.
CHECK iw_kna1-kunnr IS NOT INITIAL.
w_kunnr = iw_kna1-kunnr.
SET PARAMETER ID 'KUN' FIELD w_kunnr.
CALL TRANSACTION 'VD02' AND SKIP FIRST SCREEN.
CLEAR it_kna1.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE it_kna1
FROM kna1
WHERE kunnr IN s_kunnr.
CALL METHOD w_grid->refresh_table_display.
ENDFORM. " F_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*& Form F_TOP_OF_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_top_of_page USING f_doc TYPE REF TO cl_dd_document.
DATA: lw_back TYPE sdydo_key VALUE space.
CALL METHOD f_doc->add_text
EXPORTING
text = '文本1'
sap_style = 'HEADING'. "大字黑体
CALL METHOD f_doc->new_line.
CALL METHOD f_doc->add_text
EXPORTING
text = '文本2'
sap_emphasis = 'EMPHASIS'. "斜体
IF w_viewer IS INITIAL.
CREATE OBJECT w_viewer
EXPORTING
parent = w_head.
ENDIF.
CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
EXPORTING
document = w_doc
bottom = space.
CALL METHOD w_doc->merge_document.
CALL METHOD w_doc->set_document_background
EXPORTING
picture_id = lw_back.
w_doc->html_control = w_viewer.
CALL METHOD w_doc->display_document
EXPORTING
reuse_control = 'X'
parent = w_head.
ENDFORM. " F_TOP_OF_PAGE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐