ALV例子1(不用REUSE function)

特點: 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.

發佈了17 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章