天天看點

SAP:OOALV執行個體

首先看OOALV與FMALV的差別:

1、OO ALV的螢幕需要自己建立生成,FM ALV的螢幕已經包含在函數中;

2、OO ALV更靈活,通過類的方法對ALV執行操作,比如,一個螢幕可以放多個ALV,而FM ALV不能;

3、OO ALV更安全,增加顯示效果,比如重新整理穩定性;

4、OO ALV能實作在顯示清單的頁腳或者邊上顯示LOGO,而FM不能;

5、類可執行個體化,而函數組不能(對象是類的執行個體,而函數不是函數組的執行個體)。

執行個體:

*&---------------------------------------------------------------------*
*& Report Z_ZHANGM_018
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_zhangm_018.

DATA:
  wcl_container TYPE REF TO cl_gui_custom_container,      "存放ALV的容器
  wcl_alv       TYPE REF TO cl_gui_alv_grid ,                      "ALV的網格
  gt_fieldcat   TYPE lvc_t_fcat ,                              "存放字段目錄的内表
  gs_layout     TYPE lvc_s_layo .                               "布局結構

DATA BEGIN OF gt_list OCCURS 0 .
INCLUDE STRUCTURE sflight .
DATA END OF gt_list .
DATA:ok_code LIKE sy-ucomm.  "按鈕事件
DATA:save_ok LIKE sy-ucomm.


CALL SCREEN '0100'.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'STATUS_100'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module DISPLAY_ALV OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE display_alv OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
  PERFORM display_alv .

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  save_ok = ok_code.
  CLEAR ok_code.
  CASE save_ok.
    WHEN 'BACK'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM display_alv .
  IF  wcl_alv IS INITIAL .
    CREATE OBJECT wcl_container    "建立容器
      EXPORTING
        container_name = 'WCL_CONTAINER'.  "螢幕上的定制控制名字,大寫
    IF wcl_container IS NOT INITIAL.
      CREATE OBJECT wcl_alv         "建立ALV執行個體
        EXPORTING
          i_parent = wcl_container.  "父節點:容器
    ENDIF.

*擷取字段目錄
    PERFORM prepare_field_catalog CHANGING gt_fieldcat .
*擷取樣式
    PERFORM prepare_layout CHANGING gs_layout .
*擷取需要顯示的資料
    PERFORM get_data TABLES gt_list.
*-----顯示ALV-------------------------------------------(詳細的用法在最後附錄)
    CALL METHOD wcl_alv->set_table_for_first_display
      EXPORTING
*       I_BUFFER_ACTIVE               =
*       I_CONSISTENCY_CHECK           =
*       I_STRUCTURE_NAME              =
*       IS_VARIANT                    =
*       I_SAVE                        =
*       I_DEFAULT                     = 'X'
        is_layout                     = gs_layout
*       IS_PRINT                      =
*       IT_SPECIAL_GROUPS             =
*       IT_TOOLBAR_EXCLUDING          =
*       IT_HYPERLINK                  =
      CHANGING
        it_outtab                     = gt_list[]
        it_fieldcatalog               = gt_fieldcat
*       IT_SORT                       =
*       IT_FILTER                     =
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
  ELSE .
*ALV----------------------
    CALL METHOD wcl_alv->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
      EXCEPTIONS
        finished = 1
        OTHERS   = 2.
    IF sy-subrc <> 0.
*--異常處理
    ENDIF.
  ENDIF .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form PREPARE_FIELD_CATALOG
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      <--P_GT_FIELDCAT  實參
*&---------------------------------------------------------------------*
FORM prepare_field_catalog  CHANGING p_gt_fieldcat.
  DATA ls_fcat TYPE lvc_s_fcat .
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
    EXPORTING
      i_structure_name       = 'SFLIGHT'
    CHANGING
      ct_fieldcat            = p_gt_fieldcat
*     ct_fieldcat            = gt_fieldcat[]
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
*--Exception handling
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form PREPARE_LAYOUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*      <--P_GS_LAYOUT  text
*&---------------------------------------------------------------------*
FORM prepare_layout CHANGING ps_layout TYPE lvc_s_layo.
  ps_layout-zebra = 'X' .
  ps_layout-grid_title = 'Flights' .
  ps_layout-smalltitle = 'X' .
ENDFORM. " prepare_layout

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&-------------------------------------------------------------------
FORM get_data  TABLES   rt_outtab LIKE gt_list[].
  SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE rt_outtab UP TO 30 ROWS.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  COMMIT_EXIT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE commit_exit INPUT.
  LEAVE PROGRAM.
ENDMODULE.
           

定義的螢幕:

SAP:OOALV執行個體

建立的定制控件:

SAP:OOALV執行個體

效果展示:

SAP:OOALV執行個體

繼續閱讀