特点: 1. 不用Reuse function
2. 能自动调节长宽比
注意:
1.设置一下screen 100 的PAI与PBO
2.设置一下screen100 的 Status 跟title
REPORT ztest_alv.
CLASS cls_event DEFINITION DEFERRED.
*&----TABLES-----------------------------------------------------------*
TABLES: makt.
*&----GLOBAL OBJECTS---------------------------------------------------*
DATA: grid1 TYPE REF TO cl_gui_alv_grid,
g_custom_container TYPE REF TO cl_gui_docking_container,
g_ref_event TYPE REF TO cls_event.
*&----GLOBAL INTERNAL TABLES-------------------------------------------*
DATA: gt_fieldcat TYPE lvc_t_fcat,
gt_data TYPE TABLE OF makt.
*&---GLOBAL WORK AREA--------------------------------------------------*
DATA: gw_layout type lvc_s_layo.
*&---GLOBAL VARIABLES--------------------------------------------------*
DATA: okcode TYPE syucomm,
gv_okcode TYPE syucomm.
*&---CONSTANTS--------------------------------------------------*
CONSTANTS: c_x TYPE char1 VALUE 'X'.
*------SELECTION-SCREEN------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: so_matnr FOR makt-matnr.
SELECTION-SCREEN END OF BLOCK bl1.
*------SELECTION-------------------------------------------------------*
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_data
FROM makt
WHERE matnr IN so_matnr.
*------ALV output------------------------------------------------------*
IF NOT gt_data IS INITIAL.
CALL SCREEN 100.
ENDIF.
*----------------------------------------------------------------------*
* CLASS cls_event DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cls_event DEFINITION.
PUBLIC SECTION.
METHODS:
event_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING
e_row_id
e_column_id
es_row_no.
ENDCLASS. "cls_event DEFINITION
*----------------------------------------------------------------------*
* CLASS cls_event IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS cls_event IMPLEMENTATION.
METHOD event_hotspot_click.
DATA: lw_data TYPE makt.
READ TABLE gt_data INTO lw_data
INDEX e_row_id-index.
IF sy-subrc EQ 0.
CASE e_column_id-fieldname.
* Call transaction
WHEN 'MATNR'.
* Call transaction
SET PARAMETER ID 'MAT' FIELD lw_data-matnr.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDIF.
CLEAR:e_row_id,
e_column_id,
es_row_no,
lw_data.
ENDMETHOD. "event_hotspot_click
"event_hotspot_click
ENDCLASS. "cls_event IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form init_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM init_alv .
DATA: lv_ratio TYPE i,
lv_height TYPE i VALUE '800',
lv_width TYPE i.
CREATE OBJECT g_custom_container
EXPORTING
dynnr = '100'. " Screen number
CREATE OBJECT grid1
EXPORTING
i_parent = g_custom_container.
IF NOT g_custom_container IS INITIAL.
* Dock This Control on Specified Side of Main Window
CALL METHOD g_custom_container->dock_at
EXPORTING
side = 1.
* Returns Current Percentage of Current Screen
CALL METHOD g_custom_container->get_ratio
IMPORTING
ratio = lv_ratio.
lv_width = lv_height / lv_ratio.
CALL METHOD g_custom_container->set_position
EXPORTING
height = lv_height
width = lv_width.
ENDIF.
ENDFORM. "init_alv
*&---------------------------------------------------------------------*
*& Form prepare_field_catalog
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->GT_FIELDCAT text
*----------------------------------------------------------------------*
FORM prepare_field_catalog.
DATA: lw_fieldcat TYPE lvc_s_fcat,
*lw_fieldcat TYPE lvc_s_fcat.
REFRESH: gt_fieldcat.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'MAKT'
CHANGING
ct_fieldcat = gt_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.
LOOP AT gt_fieldcat INTO lw_fieldcat.
MOVE lw_fieldcat TO *lw_fieldcat.
CASE lw_fieldcat-fieldname.
WHEN 'MATNR'.
lw_fieldcat-hotspot = 'X'.
ENDCASE.
IF lw_fieldcat NE *lw_fieldcat.
MODIFY gt_fieldcat FROM lw_fieldcat.
ENDIF.
ENDLOOP.
ENDFORM. "prepare_field_catalog
*&---------------------------------------------------------------------*
*& Form set_alv_first_displ
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM set_alv_first_displ.
DATA: lv_lines TYPE i,
lv_title TYPE lvc_title.
* Event
IF g_ref_event IS INITIAL.
PERFORM register_events.
ENDIF.
* Get alv title
DESCRIBE TABLE gt_data LINES lv_lines.
MOVE lv_lines TO lv_title.
SHIFT lv_title LEFT DELETING LEADING space.
CONCATENATE lv_title
'LINES' INTO lv_title SEPARATED BY space.
* Change alv layout
PERFORM prepare_layout_cost USING lv_title.
CALL METHOD grid1->set_table_for_first_display
EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
* is_variant =
* i_save =
* i_default =
is_layout = gw_layout
* is_print =
* it_special_groups =
* it_toolbar_excluding =
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = gt_data
it_fieldcatalog = gt_fieldcat
* it_sort =
* it_filter =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4 .
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "set_alv_first_displ
*&---------------------------------------------------------------------*
*& Form prepare_layout_cost
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_TITLE text
*----------------------------------------------------------------------*
FORM prepare_layout_cost USING p_lv_title TYPE lvc_title.
MOVE c_x TO gw_layout-zebra.
MOVE c_x TO gw_layout-cwidth_opt.
MOVE p_lv_title TO gw_layout-grid_title.
ENDFORM. "prepare_layout_cost
*&---------------------------------------------------------------------*
*& Form register_events
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM register_events .
* Create new event handler
CREATE OBJECT g_ref_event.
* Register events
SET HANDLER g_ref_event->event_hotspot_click
FOR grid1.
ENDFORM. "register_events
*----------------------------------------------------------------------*
* MODULE init_alv_ouput OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE init_alv_ouput OUTPUT.
IF g_custom_container IS INITIAL.
PERFORM init_alv.
ENDIF.
PERFORM prepare_field_catalog.
PERFORM set_alv_first_displ.
ENDMODULE. "init_alv_ouput OUTPUT
*----------------------------------------------------------------------*
* MODULE status_0100 OUTPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET TITLEBAR 'ZTEST_HY_ALV'.
SET PF-STATUS 'MAIN100'.
ENDMODULE. "status_0100 OUTPUT
*----------------------------------------------------------------------*
* MODULE user_command_0100 INPUT
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
gv_okcode = okcode.
CLEAR okcode.
CASE gv_okcode.
WHEN 'BACK'.
SET SCREEN 0.
WHEN 'EXIT'.
SUBMIT (sy-repid) VIA SELECTION-SCREEN.
ENDCASE.
ENDMODULE. " USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT.
IF sy-ucomm EQ 'LEAVE'.
LEAVE PROGRAM.
ENDIF.
ENDMODULE.