弹出式alv,使用oo的写法,可以任意改变弹出框大小
*----------------------------------------------------------------------*
* class
*----------------------------------------------------------------------*
CLASS cl_event_receiver_02 DEFINITION.
PUBLIC SECTION.
METHODS:
handle_hotspot_click_attach FOR EVENT hotspot_click
OF cl_gui_alv_grid IMPORTING e_row_id e_column_id.
ENDCLASS.
CLASS cl_event_receiver_02 IMPLEMENTATION.
*---method for hotspot
METHOD handle_hotspot_click_attach.
PERFORM handel_hotspot_click_attach USING e_row_id e_column_id.
ENDMETHOD.
ENDCLASS.
DATA: evt_rcver_02 TYPE REF TO cl_event_receiver_02.
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
on_close FOR EVENT close
OF cl_gui_dialogbox_container IMPORTING sender.
ENDCLASS.
CLASS lcl_event_handler IMPLEMENTATION.
METHOD on_close.
CALL METHOD sender->free.
FREE: box_container, box_alv.
ENDMETHOD.
ENDCLASS.
DATA:box_container TYPE REF TO cl_gui_dialogbox_container,
box_alv TYPE REF TO cl_gui_alv_grid.
DATA: ls_layout TYPE lvc_s_layo. " ALV的layout属性内表
DATA: ls_fieldcat TYPE slis_fieldcat_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv.
CREATE OBJECT box_container
EXPORTING
width = 700 "窗口大小
height = 200
top = 100
left = 120
caption = 'xxxxx' "弹出窗口标题
EXCEPTIONS
OTHERS = 1.
SET HANDLER lcl_event_handler=>on_close FOR box_container.
CREATE OBJECT box_alv
EXPORTING
i_parent = box_container
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'LV_GET'
i_inclname = sy-repid
CHANGING
ct_fieldcat = lt_fieldcat[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CALL FUNCTION 'LVC_TRANSFER_FROM_SLIS'
EXPORTING
it_fieldcat_alv = lt_fieldcat[]
IMPORTING
et_fieldcat_lvc = gt_fcat_02[]
TABLES
it_data = lv_get[]
EXCEPTIONS
it_data_missing = 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.
LOOP AT gt_fcat_02 ASSIGNING FIELD-SYMBOL(<fc>).
CASE <fc>-fieldname.
WHEN 'xxxx1'.
<fc>-coltext = 'xxxx1'.
<fc>-just = 'L'.
<fc>-key = 'X'.
<fc>-outputlen = '50'.
<fc>-col_pos = '1'.
WHEN 'xxxx2'.
<fc>-coltext = 'xxxx2'.
<fc>-just = 'L'.
<fc>-outputlen = '500'.
<fc>-col_pos = '2'.
<fc>-hotspot = 'X'.
ENDCASE.
ENDLOOP.
"写入layout属性
ls_layout-zebra = 'X'.
ls_layout-sel_mode = 'D'.
ls_layout-cwidth_opt = 'X'.
CALL METHOD box_alv->set_table_for_first_display
EXPORTING
is_layout = ls_layout "layout属性
i_default = 'X'
CHANGING
it_outtab = lv_get[] "内表
it_fieldcatalog = gt_fcat_02 "fieldcat属性
EXCEPTIONS
OTHERS = 1.
CREATE OBJECT evt_rcver_02.
SET HANDLER evt_rcver_02->handle_hotspot_click_attach FOR box_alv.