zoukankan      html  css  js  c++  java
  • 2021.08.26 【ABAP随笔】- OO ALV开发模版 (震惊,输出一个OO ALV只需要几行代码,瞎扯)

    OO ALV 模版

    部分代码参考了SAP孙亮(公众号:ABAPer-LL)

    一 创建ALV前的所需操作

    1. 取数据

    这里我们随便取数据

    1 SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)
    2   UP TO 20 ROWS.

    2. 创建屏幕

    注意,我们这里使用的是行列200/255 最大值

    同时设置容器CONTAINER自动调节 最少行列为10/10,这样屏幕就会根据你的电脑屏幕大小来自动调节了

     

     创建了OK_CODE

    3. 添加逻辑流

    在逻辑流中打开PBO,PAI的注释,分别创建2个module,同时创建STATUS,TITLE(可选),

     status 仅仅需要这3个按钮即可

    二 使用ALV 类直接显示

     输入以下代码,然后直接点击执行程序

     1 REPORT z_tab_test03.
     2 DATA ok_code TYPE sy-ucomm.
     3  4 SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)
     5   UP TO 20 ROWS.
     6  7 DATA(cl_oo_alv) = NEW zcl_tab_oo_alv( ).
     8  9 CALL METHOD cl_oo_alv->create_oo_alv
    10   EXPORTING
    11 *   iv_repid          = SY-CPROG
    12 *   iv_screen         = '9000'
    13 *   iv_default_ex     = 'X'
    14 *   is_layout         =
    15 *   it_fieldcat       =
    16 *   it_exclude        =
    17 *   iv_split_number   =
    18 *   iv_split_container          =
    19     iv_container_name = 'CONTAINER'
    20 *   iv_variant_handle = '1'
    21 *   i_f4_form         =
    22 *   i_toolbar_form    =
    23 *   i_user_command_form         =
    24 *   i_hotspot_form    =
    25 *   i_datachanged_form          =
    26 *   i_datachanged_finished_form =
    27 *   i_before_ucomm_form         =
    28 *   i_double_click_form         =
    29 *   i_menu_button_form          =
    30   CHANGING
    31     it_data           = gt_sflight.
    32 33 CALL SCREEN 9000.
    34 *&---------------------------------------------------------------------*
    35 *& Module STATUS_9000 OUTPUT
    36 *&---------------------------------------------------------------------*
    37 *&
    38 *&---------------------------------------------------------------------*
    39 MODULE status_9000 OUTPUT.
    40   SET PF-STATUS 'STATUS'.
    41   SET TITLEBAR 'TITLE'.
    42 ENDMODULE.
    43 *&---------------------------------------------------------------------*
    44 *&      Module  USER_COMMAND_9000  INPUT
    45 *&---------------------------------------------------------------------*
    46 *       text
    47 *----------------------------------------------------------------------*
    48 MODULE user_command_9000 INPUT.
    49   CASE ok_code.
    50     WHEN 'EXIT' OR 'BACK'.
    51       LEAVE TO SCREEN 0.
    52     WHEN  'CANC'.
    53       LEAVE PROGRAM.
    54     WHEN OTHERS.
    55   ENDCASE.
    56   CLEAR ok_code.
    57 ENDMODULE.

    我们就可以看到一个ALV画面了

    下面介绍ZCL_TAB_OO_ALV代码- 复制可用

    小伙伴们可以直接SE24,创建一个类,然后点击基于源代码创建,然后COPY代码即可

     

    对于方法ZCL_TAB_OO_ALV=>SPLIT_CONTAINER , 可以直接静态调用,将容器切割后,返回多个容器,然后将返回的容器分别调用cl_oo_alv->create_oo_alv方法即可实现多个ALV显示

     简单的显示多个ALV代码如下:

     1 REPORT z_tab_test03.
     2 DATA ok_code TYPE sy-ucomm.
     3  4 SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)
     5   UP TO 20 ROWS.
     6 CHECK sy-subrc EQ 0.
     7 SELECT * FROM scarr INTO TABLE @DATA(gt_scarr)
     8   FOR ALL ENTRIES IN @gt_sflight
     9   WHERE carrid = @gt_sflight-carrid.
    10 11 12 CALL METHOD zcl_tab_oo_alv=>split_container
    13   EXPORTING
    14     iv_container_name = 'CONTAINER'
    15     i_row             = 1
    16     i_col             = 2
    17   IMPORTING
    18     et_container_t    = DATA(lt_container_t).
    19 20 CHECK lt_container_t IS NOT INITIAL.
    21 22 DATA(cl_oo_alv1) = NEW zcl_tab_oo_alv( ).
    23 DATA(cl_oo_alv2) = NEW zcl_tab_oo_alv( ).
    24 25 26 READ TABLE lt_container_t INTO DATA(ls_container) INDEX 1.
    27 IF sy-subrc EQ 0.
    28   CALL METHOD cl_oo_alv1->create_oo_alv
    29     EXPORTING
    30       iv_split_number    = 1
    31       iv_split_container = ls_container-container
    32     CHANGING
    33       it_data            = gt_sflight.
    34 ENDIF.
    35 36 READ TABLE lt_container_t INTO ls_container INDEX 2.
    37 IF sy-subrc EQ 0.
    38   CALL METHOD cl_oo_alv1->create_oo_alv
    39     EXPORTING
    40       iv_split_number    = 2
    41       iv_split_container = ls_container-container
    42     CHANGING
    43       it_data            = gt_scarr.
    44 ENDIF.
    45 46 47 CALL SCREEN 9000.

    三 ZCL_TAB_OO_ALV代码如下

      1 CLASS zcl_tab_oo_alv DEFINITION
      2   PUBLIC
      3   CREATE PUBLIC .
      4 
      5 *&=====================================================================*
      6 *& Create date:  2021.08.26
      7 *& Created by:   Tab-Zhu (微信公众号:Tab_JXZHU)
      8 *&---------------------------------------------------------------------*
      9   PUBLIC SECTION.
     10 
     11     TYPES:
     12       BEGIN OF ty_splits,
     13         row       TYPE i,
     14         col       TYPE i,
     15         container TYPE REF TO cl_gui_container,
     16       END OF ty_splits .
     17     TYPES:
     18       ty_t_splits TYPE TABLE OF ty_splits .
     19 
     20     CONSTANTS gc_a TYPE c VALUE 'A' ##NO_TEXT.
     21     CONSTANTS gc_d TYPE c VALUE 'D' ##NO_TEXT.
     22     DATA cr_grid TYPE REF TO cl_gui_alv_grid .
     23     DATA cr_container TYPE REF TO cl_gui_custom_container .
     24     DATA split_n TYPE i .
     25     DATA m_repid TYPE progname .
     26     DATA m_f4_form TYPE string .                                         "
     27     DATA m_toolbar_form TYPE string .
     28     DATA m_hotspot_form TYPE string .
     29     DATA m_user_command_form TYPE string .
     30     DATA m_datachanged_form TYPE string .
     31     DATA m_datachanged_finished_form TYPE string .
     32     DATA m_before_ucomm_form TYPE string .
     33     DATA m_double_click_form TYPE string .
     34     DATA m_menu_button_form TYPE string .
     35 
     36     METHODS create_oo_alv
     37       IMPORTING
     38         VALUE(iv_repid)              TYPE progname DEFAULT sy-cprog
     39         VALUE(iv_screen)             TYPE sy-dynnr DEFAULT '9000'               "默认屏幕号码
     40         VALUE(iv_default_ex)         TYPE char1 DEFAULT 'X'           "使用默认的按钮组
     41         VALUE(is_layout)             TYPE lvc_s_layo OPTIONAL
     42         VALUE(it_fieldcat)           TYPE lvc_t_fcat OPTIONAL
     43         VALUE(it_exclude)            TYPE ui_functions OPTIONAL              "需要排除的按钮
     44         VALUE(iv_split_number)       TYPE i OPTIONAL         "分割容器号码
     45         VALUE(iv_split_container)    TYPE REF TO cl_gui_container OPTIONAL            "分割容器号码有值时,请传入容器类,必填
     46         VALUE(iv_container_name)     TYPE char30 OPTIONAL       "当分割容器号没有值时,必填
     47         VALUE(iv_variant_handle)     TYPE disvariant-handle DEFAULT '1'
     48         !i_f4_form                   TYPE string OPTIONAL
     49         !i_toolbar_form              TYPE string OPTIONAL
     50         !i_user_command_form         TYPE string OPTIONAL
     51         !i_hotspot_form              TYPE string OPTIONAL
     52         !i_datachanged_form          TYPE string OPTIONAL
     53         !i_datachanged_finished_form TYPE string OPTIONAL
     54         !i_before_ucomm_form         TYPE string OPTIONAL
     55         !i_double_click_form         TYPE string OPTIONAL
     56         !i_menu_button_form          TYPE string OPTIONAL
     57       CHANGING
     58         !it_data                     TYPE STANDARD TABLE .
     59     "分割 容器
     60     CLASS-METHODS split_container
     61       IMPORTING
     62         !iv_container_name TYPE char30
     63         !i_row             TYPE i
     64         !i_col             TYPE i
     65       EXPORTING
     66         !et_container_t    TYPE ty_t_splits .
     67     "设置默认排除按钮-OO ALV
     68     CLASS-METHODS default_exclude_func
     69       EXPORTING
     70         VALUE(it_exclude) TYPE ui_functions .
     71     "得到默认字段属性-根据内表
     72     CLASS-METHODS get_default_fieldcat
     73       CHANGING
     74         !it_data           TYPE STANDARD TABLE
     75       RETURNING
     76         VALUE(rt_fieldcat) TYPE lvc_t_fcat
     77       EXCEPTIONS
     78         error_in_get_fieldcat .
     79     "得到默认的Layout
     80     CLASS-METHODS get_default_layout
     81       RETURNING
     82         VALUE(es_layout) TYPE lvc_s_layo .
     83     "设置按钮
     84     METHODS handle_toolbar
     85       FOR EVENT toolbar OF cl_gui_alv_grid
     86       IMPORTING
     87         !e_object
     88         !e_interactive .
     89     "设置F4帮助
     90     METHODS handle_f4
     91       FOR EVENT onf4 OF cl_gui_alv_grid
     92       IMPORTING
     93         !e_fieldname
     94         !e_fieldvalue
     95         !es_row_no
     96         !er_event_data
     97         !et_bad_cells
     98         !e_display .
     99     "设置热点单击
    100     METHODS handle_hotspot
    101       FOR EVENT hotspot_click OF cl_gui_alv_grid
    102       IMPORTING
    103         !e_row_id
    104         !e_column_id
    105         !es_row_no .
    106     METHODS handle_user_command
    107       FOR EVENT user_command OF cl_gui_alv_grid
    108       IMPORTING
    109         !e_ucomm .
    110     METHODS handle_datachanged
    111       FOR EVENT data_changed OF cl_gui_alv_grid
    112       IMPORTING
    113         !er_data_changed
    114         !e_onf4
    115         !e_onf4_before
    116         !e_onf4_after
    117         !e_ucomm .
    118     METHODS handle_datachanged_finished
    119       FOR EVENT data_changed_finished OF cl_gui_alv_grid
    120       IMPORTING
    121         !e_modified
    122         !et_good_cells .
    123     METHODS handle_before_ucomm
    124       FOR EVENT before_user_command OF cl_gui_alv_grid
    125       IMPORTING
    126         !e_ucomm .
    127     METHODS handle_double_click
    128       FOR EVENT double_click OF cl_gui_alv_grid
    129       IMPORTING
    130         !e_row
    131         !e_column
    132         !es_row_no .
    133     METHODS handle_menu_button
    134       FOR EVENT menu_button OF cl_gui_alv_grid
    135       IMPORTING
    136         !e_object
    137         !e_ucomm .
    138   PROTECTED SECTION.
    139   PRIVATE SECTION.
    140 ENDCLASS.
    141 
    142 
    143 
    144 CLASS ZCL_TAB_OO_ALV IMPLEMENTATION.
    145 
    146 
    147 * <SIGNATURE>---------------------------------------------------------------------------------------+
    148 * | Instance Public Method ZCL_TAB_OO_ALV->CREATE_OO_ALV
    149 * +-------------------------------------------------------------------------------------------------+
    150 * | [--->] IV_REPID                       TYPE        PROGNAME (default =SY-CPROG)
    151 * | [--->] IV_SCREEN                      TYPE        SY-DYNNR (default ='9000')
    152 * | [--->] IV_DEFAULT_EX                  TYPE        CHAR1 (default ='X')
    153 * | [--->] IS_LAYOUT                      TYPE        LVC_S_LAYO(optional)
    154 * | [--->] IT_FIELDCAT                    TYPE        LVC_T_FCAT(optional)
    155 * | [--->] IT_EXCLUDE                     TYPE        UI_FUNCTIONS(optional)
    156 * | [--->] IV_SPLIT_NUMBER                TYPE        I(optional)
    157 * | [--->] IV_SPLIT_CONTAINER             TYPE REF TO CL_GUI_CONTAINER(optional)
    158 * | [--->] IV_CONTAINER_NAME              TYPE        CHAR30(optional)
    159 * | [--->] IV_VARIANT_HANDLE              TYPE        DISVARIANT-HANDLE (default ='1')
    160 * | [--->] I_F4_FORM                      TYPE        STRING(optional)
    161 * | [--->] I_TOOLBAR_FORM                 TYPE        STRING(optional)
    162 * | [--->] I_USER_COMMAND_FORM            TYPE        STRING(optional)
    163 * | [--->] I_HOTSPOT_FORM                 TYPE        STRING(optional)
    164 * | [--->] I_DATACHANGED_FORM             TYPE        STRING(optional)
    165 * | [--->] I_DATACHANGED_FINISHED_FORM    TYPE        STRING(optional)
    166 * | [--->] I_BEFORE_UCOMM_FORM            TYPE        STRING(optional)
    167 * | [--->] I_DOUBLE_CLICK_FORM            TYPE        STRING(optional)
    168 * | [--->] I_MENU_BUTTON_FORM             TYPE        STRING(optional)
    169 * | [<-->] IT_DATA                        TYPE        STANDARD TABLE
    170 * +--------------------------------------------------------------------------------------</SIGNATURE>
    171   METHOD create_oo_alv.
    172 
    173     DATA lt_filedcat TYPE lvc_t_fcat.
    174     DATA ls_layout TYPE lvc_s_layo.
    175     "iv_split_number
    176     "判断是否是分割容器
    177     IF iv_split_number IS INITIAL.
    178       CREATE OBJECT cr_container
    179         EXPORTING
    180           container_name = iv_container_name. "屏幕上用户自定义控件名
    181 * create alv
    182       CREATE OBJECT cr_grid
    183         EXPORTING
    184           i_parent = cr_container.
    185     ELSE.
    186       "分割容器
    187       CREATE OBJECT cr_grid
    188         EXPORTING
    189           i_parent = iv_split_container.
    190     ENDIF.
    191 
    192     CHECK cr_grid IS NOT INITIAL.
    193 
    194     DATA lt_exclude TYPE ui_functions.
    195     IF iv_default_ex = 'X'.
    196       "使用默认排除按钮
    197       CALL METHOD me->default_exclude_func
    198         IMPORTING
    199           it_exclude = lt_exclude.
    200     ENDIF.
    201     "手动排除按钮
    202     IF it_exclude[] IS NOT INITIAL.
    203       APPEND LINES OF it_exclude TO lt_exclude.
    204       SORT lt_exclude.
    205       DELETE ADJACENT DUPLICATES FROM lt_exclude.
    206     ENDIF.
    207     "布局
    208     IF is_layout IS NOT INITIAL.
    209       ls_layout = is_layout.
    210     ELSE.
    211       ls_layout = me->get_default_layout( ).
    212     ENDIF.
    213     "字段目录
    214     IF it_fieldcat[] IS NOT INITIAL.
    215       lt_filedcat = it_fieldcat.
    216     ELSE.
    217       CALL METHOD me->get_default_fieldcat
    218         CHANGING
    219           it_data               = it_data
    220         RECEIVING
    221           rt_fieldcat           = lt_filedcat
    222         EXCEPTIONS
    223           error_in_get_fieldcat = 1
    224           OTHERS                = 2.
    225       IF sy-subrc NE 0.
    226         MESSAGE e368(00) WITH 'Failed to get fiedlcat' ''.
    227       ENDIF.
    228     ENDIF.
    229 
    230     "变式布局
    231     DATA:ls_disvariant TYPE disvariant.
    232     ls_disvariant-report = sy-repid.
    233     ls_disvariant-handle = iv_variant_handle.
    234     ls_disvariant-username = sy-uname.
    235 
    236 *    CALL METHOD
    237     CALL METHOD cr_grid->set_table_for_first_display
    238       EXPORTING
    239         is_variant           = ls_disvariant
    240         i_default            = abap_on
    241         i_save               = gc_a
    242         is_layout            = ls_layout
    243         it_toolbar_excluding = lt_exclude
    244       CHANGING
    245         it_outtab            = it_data
    246         it_fieldcatalog      = lt_filedcat.
    247 *SET EVENT
    248     DEFINE d_set_handler.
    249       IF &1 IS SUPPLIED.
    250         &2 = &1.
    251         SET HANDLER me->&3 FOR cr_grid.
    252       ENDIF.
    253     END-OF-DEFINITION.
    254 
    255     m_repid = iv_repid.
    256 
    257     "绑定事件
    258     d_set_handler:
    259       i_f4_form                     m_f4_form                     handle_f4,
    260       i_toolbar_form                m_toolbar_form                handle_toolbar,
    261       i_user_command_form           m_user_command_form           handle_user_command,
    262       i_hotspot_form                m_hotspot_form                handle_hotspot,
    263       i_datachanged_form            m_datachanged_form            handle_datachanged,
    264       i_datachanged_finished_form   m_datachanged_finished_form   handle_datachanged_finished,
    265       i_before_ucomm_form           m_before_ucomm_form           handle_before_ucomm,
    266       i_double_click_form           m_double_click_form           handle_double_click,
    267       i_menu_button_form            m_menu_button_form            handle_menu_button.
    268 
    269 *    SET HANDLER me->handle_toolbar       FOR cr_grid.
    270 *    SET HANDLER me->handle_datachanged_finished  FOR cr_grid.
    271 *    SET HANDLER me->handle_datachanged FOR cr_grid.
    272 *    SET HANDLER me->handle_user_command  FOR cr_grid.
    273 *    SET HANDLER me->handle_hotspot FOR cr_grid .
    274 
    275     CALL METHOD cr_grid->set_toolbar_interactive.
    276 * register enter event
    277     CALL METHOD cr_grid->register_edit_event
    278       EXPORTING
    279         i_event_id = cl_gui_alv_grid=>mc_evt_enter
    280       EXCEPTIONS
    281         error      = 1
    282         OTHERS     = 2.
    283     IF sy-subrc NE 0.
    284       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
    285       sy-msgv2 sy-msgv3 sy-msgv4.
    286     ENDIF.
    287 
    288     CALL METHOD cr_grid->register_edit_event     "register modify event
    289       EXPORTING
    290         i_event_id = cl_gui_alv_grid=>mc_evt_modified
    291       EXCEPTIONS
    292         error      = 1
    293         OTHERS     = 2.
    294     IF sy-subrc NE 0.
    295       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
    296       sy-msgv2 sy-msgv3 sy-msgv4.
    297     ENDIF.
    298 
    299   ENDMETHOD.
    300 
    301 
    302 * <SIGNATURE>---------------------------------------------------------------------------------------+
    303 * | Static Public Method ZCL_TAB_OO_ALV=>DEFAULT_EXCLUDE_FUNC
    304 * +-------------------------------------------------------------------------------------------------+
    305 * | [<---] IT_EXCLUDE                     TYPE        UI_FUNCTIONS
    306 * +--------------------------------------------------------------------------------------</SIGNATURE>
    307   METHOD default_exclude_func.
    308     DATA: ls_exclude TYPE ui_func.
    309     ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy .
    310     APPEND ls_exclude TO it_exclude.
    311     ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row .
    312     APPEND ls_exclude TO it_exclude.
    313     ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
    314     APPEND ls_exclude TO it_exclude.
    315     ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
    316     APPEND ls_exclude TO it_exclude.
    317     ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
    318     APPEND ls_exclude TO it_exclude.
    319     ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
    320     APPEND ls_exclude TO it_exclude.
    321     ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
    322     APPEND ls_exclude TO it_exclude.
    323     ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
    324     APPEND ls_exclude TO it_exclude.
    325     ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
    326     APPEND ls_exclude TO it_exclude.
    327     ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
    328     APPEND ls_exclude TO it_exclude.
    329     ls_exclude = cl_gui_alv_grid=>mc_fc_maximum .
    330     APPEND ls_exclude TO it_exclude.
    331     ls_exclude = cl_gui_alv_grid=>mc_fc_minimum .
    332     APPEND ls_exclude TO it_exclude.
    333 *  ls_exclude = cl_gui_alv_grid=>mc_fc_view_excel.
    334 *  append ls_exclude to it_exclude.
    335     ls_exclude = cl_gui_alv_grid=>mc_fc_view_lotus .
    336     APPEND ls_exclude TO it_exclude.
    337 *    LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_EXPORT .
    338 *    APPEND LS_EXCLUDE TO IT_EXCLUDE.
    339     ls_exclude = cl_gui_alv_grid=>mc_fc_sum .
    340     APPEND ls_exclude TO it_exclude.
    341     ls_exclude = cl_gui_alv_grid=>mc_fc_average .
    342     APPEND ls_exclude TO it_exclude.
    343 *  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_SUBTOT .
    344 *  APPEND LS_EXCLUDE TO it_exclude.
    345     ls_exclude = cl_gui_alv_grid=>mc_fc_check.
    346     APPEND ls_exclude TO it_exclude.
    347     ls_exclude = cl_gui_alv_grid=>mc_fc_refresh.
    348     APPEND ls_exclude TO it_exclude.
    349 
    350 *  ls_exclude = '&LOAD'.
    351 *  append ls_exclude to it_exclude.
    352 *  LS_EXCLUDE = '&COL0'.
    353 *  APPEND LS_EXCLUDE TO it_exclude.
    354 *  LS_EXCLUDE = '&SAVE '.
    355 *  APPEND LS_EXCLUDE TO it_exclude.
    356 *  LS_EXCLUDE = '&MAINTAIN '.
    357 *  APPEND LS_EXCLUDE TO IT_EXCLUDE.
    358     ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
    359     APPEND ls_exclude TO it_exclude.
    360     ls_exclude = cl_gui_alv_grid=>mc_fc_print .
    361     APPEND ls_exclude TO it_exclude.
    362     ls_exclude = '&INFO'.
    363     APPEND ls_exclude TO it_exclude.
    364     ls_exclude = '&GRAPH'.
    365     APPEND ls_exclude TO it_exclude.
    366   ENDMETHOD.
    367 
    368 
    369 * <SIGNATURE>---------------------------------------------------------------------------------------+
    370 * | Static Public Method ZCL_TAB_OO_ALV=>GET_DEFAULT_FIELDCAT
    371 * +-------------------------------------------------------------------------------------------------+
    372 * | [<-->] IT_DATA                        TYPE        STANDARD TABLE
    373 * | [<-()] RT_FIELDCAT                    TYPE        LVC_T_FCAT
    374 * | [EXC!] ERROR_IN_GET_FIELDCAT
    375 * +--------------------------------------------------------------------------------------</SIGNATURE>
    376   METHOD get_default_fieldcat.
    377     DATA: salv_table TYPE REF TO cl_salv_table.
    378     TRY.
    379         cl_salv_table=>factory( IMPORTING
    380                                   r_salv_table   = salv_table
    381                                 CHANGING
    382                                   t_table        = it_data[] ).
    383         rt_fieldcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
    384             r_columns      = salv_table->get_columns( ) " ALV Filter
    385             r_aggregations = salv_table->get_aggregations( ) " ALV Aggregations
    386     ).
    387       CATCH cx_root INTO DATA(lx_root).
    388         DATA(lv_text) = lx_root->get_text( ).
    389         RAISE error_in_get_fieldcat.
    390     ENDTRY.
    391 
    392     "当你的内表字段不是参考数据库结构/表创建的时候,F4搜索帮助有图标但是无效
    393     "有2种处理方法
    394     "1. F4AVAILABL = abap_false
    395     "2. 加上:REF_TABLE ,REF_FIELD
    396 
    397 
    398   ENDMETHOD.
    399 
    400 
    401 * <SIGNATURE>---------------------------------------------------------------------------------------+
    402 * | Static Public Method ZCL_TAB_OO_ALV=>GET_DEFAULT_LAYOUT
    403 * +-------------------------------------------------------------------------------------------------+
    404 * | [<-()] ES_LAYOUT                      TYPE        LVC_S_LAYO
    405 * +--------------------------------------------------------------------------------------</SIGNATURE>
    406   METHOD get_default_layout.
    407     es_layout-sel_mode    = gc_d ."
    408     es_layout-zebra = abap_on. "
    409     es_layout-cwidth_opt = abap_on. "
    410   ENDMETHOD.
    411 
    412 
    413 * <SIGNATURE>---------------------------------------------------------------------------------------+
    414 * | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_BEFORE_UCOMM
    415 * +-------------------------------------------------------------------------------------------------+
    416 * | [--->] E_UCOMM                        LIKE
    417 * +--------------------------------------------------------------------------------------</SIGNATURE>
    418   METHOD handle_before_ucomm.
    419     PERFORM (m_before_ucomm_form) IN PROGRAM (m_repid) IF FOUND
    420       USING e_ucomm.
    421 *FORM 示例
    422 *FORM handle_before_ucomm USING e_ucomm TYPE sy-ucomm.
    423 *ENDFORM.                    "handle_before_ucomm
    424   ENDMETHOD.
    425 
    426 
    427 * <SIGNATURE>---------------------------------------------------------------------------------------+
    428 * | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_DATACHANGED
    429 * +-------------------------------------------------------------------------------------------------+
    430 * | [--->] ER_DATA_CHANGED                LIKE
    431 * | [--->] E_ONF4                         LIKE
    432 * | [--->] E_ONF4_BEFORE                  LIKE
    433 * | [--->] E_ONF4_AFTER                   LIKE
    434 * | [--->] E_UCOMM                        LIKE
    435 * +--------------------------------------------------------------------------------------</SIGNATURE>
    436   METHOD handle_datachanged.
    437     PERFORM (m_datachanged_form) IN PROGRAM (m_repid) IF FOUND
    438           USING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
    439 *FORM 示例
    440 *FORM handle_datachanged_cpmx USING  er_data_changed TYPE REF TO cl_alv_changed_data_protocol
    441 *                                    e_onf4 TYPE char01
    442 *                                    e_onf4_before TYPE char01
    443 *                                    e_onf4_after TYPE char01
    444 *                                    e_ucomm TYPE sy-ucomm.
    445 *  FIELD-SYMBOLS: <ls_cell> TYPE lvc_s_modi.
    446 *  DATA: ls_cpmx TYPE ty_cpmx,
    447 *        lt_mod_cells TYPE lvc_t_modi WITH HEADER LINE.
    448 *
    449 *  CLEAR: g_error.
    450 *
    451 *  DEFINE add_protocol_entry.
    452 *    g_error = 'X'.
    453 *    call method er_data_changed->add_protocol_entry
    454 *      exporting
    455 *        i_msgid     = &1
    456 *        i_msgty     = &2
    457 *        i_msgno     = &3
    458 *        i_msgv1     = &4
    459 *        i_msgv2     = &5
    460 *        i_msgv3     = &6
    461 *        i_msgv4     = &7
    462 *        i_fieldname = <ls_cell>-fieldname
    463 *        i_row_id    = <ls_cell>-row_id
    464 *        i_tabix     = <ls_cell>-tabix.
    465 *  END-OF-DEFINITION.
    466 *  DEFINE modify_cell.
    467 *    call method er_data_changed->modify_cell
    468 *      exporting
    469 *        i_row_id    = <ls_cell>-row_id
    470 *        i_tabix     = <ls_cell>-tabix
    471 *        i_fieldname = &1
    472 *        i_value     = &2.
    473 *  END-OF-DEFINITION.
    474 *
    475 *  LOOP AT er_data_changed->mt_mod_cells ASSIGNING <ls_cell>.
    476 *    CASE <ls_cell>-fieldname.
    477 *      WHEN 'BUKRS'.  "公司代码描述
    478 *        CLEAR gs_t001.
    479 *        READ TABLE gt_t001 INTO gs_001 WITH KEY bukrs = <ls_cell>-value.
    480 *        IF sy-subrc <> 0 AND <ls_cell>-value IS NOT INITIAL.
    481 *          add_protocol_entry: '00' 'E' '001' '公司代码:' <ls_cell>-value '不存在' ''.
    482 *        ENDIF.
    483 *        modify_cell: 'BUTXT' gs_001-butxt.
    484 *    ENDCASE.
    485 *  ENDLOOP.
    486   ENDMETHOD.
    487 
    488 
    489 * <SIGNATURE>---------------------------------------------------------------------------------------+
    490 * | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_DATACHANGED_FINISHED
    491 * +-------------------------------------------------------------------------------------------------+
    492 * | [--->] E_MODIFIED                     LIKE
    493 * | [--->] ET_GOOD_CELLS                  LIKE
    494 * +--------------------------------------------------------------------------------------</SIGNATURE>
    495   METHOD handle_datachanged_finished.
    496     PERFORM (m_datachanged_finished_form) IN PROGRAM (m_repid) IF FOUND
    497   USING e_modified et_good_cells.
    498 *FORM 示例
    499 *FORM handle_datachanged_finished USING  e_modified TYPE char01
    500 *                                        et_good_cells TYPE lvc_t_modi.
    501 *ENDFORM.                    "HANDLE_DATACHANGED_FINISHED
    502   ENDMETHOD.
    503 
    504 
    505 * <SIGNATURE>---------------------------------------------------------------------------------------+
    506 * | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_DOUBLE_CLICK
    507 * +-------------------------------------------------------------------------------------------------+
    508 * | [--->] E_ROW                          LIKE
    509 * | [--->] E_COLUMN                       LIKE
    510 * | [--->] ES_ROW_NO                      LIKE
    511 * +--------------------------------------------------------------------------------------</SIGNATURE>
    512   METHOD handle_double_click.
    513     PERFORM (m_double_click_form) IN PROGRAM (m_repid) IF FOUND
    514       USING e_row e_column es_row_no.
    515 *FORM 示例
    516 *FORM handle_double_click USING  e_row TYPE lvc_s_row
    517 *                                e_column TYPE lvc_s_col
    518 *                                es_row_no TYPE lvc_s_roid.
    519 *ENDFORM.                    "handle_before_ucomm
    520   ENDMETHOD.
    521 
    522 
    523 * <SIGNATURE>---------------------------------------------------------------------------------------+
    524 * | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_F4
    525 * +-------------------------------------------------------------------------------------------------+
    526 * | [--->] E_FIELDNAME                    LIKE
    527 * | [--->] E_FIELDVALUE                   LIKE
    528 * | [--->] ES_ROW_NO                      LIKE
    529 * | [--->] ER_EVENT_DATA                  LIKE
    530 * | [--->] ET_BAD_CELLS                   LIKE
    531 * | [--->] E_DISPLAY                      LIKE
    532 * +--------------------------------------------------------------------------------------</SIGNATURE>
    533   METHOD handle_f4.
    534     PERFORM (m_f4_form) IN PROGRAM (m_repid) IF FOUND
    535     USING e_fieldname e_fieldvalue es_row_no er_event_data et_bad_cells e_display.
    536 *FORM 示例
    537 *FORM handle_f4  USING           e_fieldname TYPE lvc_fname
    538 *                                e_fieldvalue TYPE lvc_value
    539 *                                es_row_no TYPE lvc_s_roid
    540 *                                er_event_data TYPE REF TO cl_alv_event_data
    541 *                                et_bad_cells TYPE lvc_t_modi
    542 *                                e_display TYPE char01.
    543 *  DATA: ls_row TYPE lvc_s_row,
    544 *        ls_col TYPE lvc_s_col,
    545 *        ls_modi TYPE lvc_s_modi,
    546 *        l_tabname TYPE tabname,
    547 *        l_fieldtext TYPE fieldtext,
    548 *        l_ref_table TYPE lvc_rtname,
    549 *        l_ref_field TYPE lvc_rfname.
    550 *  FIELD-SYMBOLS: <lt_modi> TYPE lvc_t_modi.
    551 *
    552 *  er_event_data->m_event_handled = 'X'.
    553 *
    554 *  CASE e_fieldname.
    555 *    WHEN 'TABNAME'.
    556 *      PERFORM f4_dd_table(rsaqddic) USING 'SAPLAQJD_CNTRL'
    557 *                                          '0300'
    558 *                                          'G_DYN_0300-TNAME'
    559 *                                    CHANGING e_fieldvalue.  "搜索帮助代码,来于SQVI中“插入表”的搜索帮助
    560 *    WHEN OTHERS.
    561 *      EXIT.
    562 *  ENDCASE.
    563 *
    564 *  ASSIGN er_event_data->m_data->* TO <lt_modi>.
    565 *  ls_modi-row_id    = es_row_no-row_id."
    566 *  ls_modi-fieldname = e_fieldname.
    567 *  ls_modi-value     = e_fieldvalue.
    568 *  APPEND ls_modi TO <lt_modi>.
    569 *  IF e_fieldname = 'FIELDNAME'.
    570 *    ls_modi-row_id    = es_row_no-row_id."
    571 *    ls_modi-fieldname = 'SCRTEXT_L'.
    572 *    ls_modi-value     = l_fieldtext.
    573 *    APPEND ls_modi TO <lt_modi>.
    574 *
    575 *    ls_modi-row_id    = es_row_no-row_id."
    576 *    ls_modi-fieldname = 'REF_TABLE'.
    577 *    ls_modi-value     = l_ref_table.
    578 *    APPEND ls_modi TO <lt_modi>.
    579 *
    580 *    ls_modi-row_id    = es_row_no-row_id."
    581 *    ls_modi-fieldname = 'REF_FIELD'.
    582 *    ls_modi-value     = l_ref_field.
    583 *    APPEND ls_modi TO <lt_modi>.
    584 *  ENDIF.
    585 *
    586 *ENDFORM.
    587   ENDMETHOD.
    588 
    589 
    590 * <SIGNATURE>---------------------------------------------------------------------------------------+
    591 * | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_HOTSPOT
    592 * +-------------------------------------------------------------------------------------------------+
    593 * | [--->] E_ROW_ID                       LIKE
    594 * | [--->] E_COLUMN_ID                    LIKE
    595 * | [--->] ES_ROW_NO                      LIKE
    596 * +--------------------------------------------------------------------------------------</SIGNATURE>
    597   METHOD handle_hotspot.
    598     PERFORM (m_hotspot_form) IN PROGRAM (m_repid) IF FOUND
    599       USING e_row_id e_column_id es_row_no.
    600 *FORM 示例
    601 *FORM handle_hotspot  USING    p_row_id     TYPE lvc_s_row
    602 *                              p_column_id  TYPE lvc_s_col
    603 *                              p_row_no     TYPE lvc_s_roid.
    604 *  CASE p_column_id-fieldname.
    605 *    WHEN 'COUNT'.
    606 *  ENDCASE.
    607 *ENDFORM.
    608   ENDMETHOD.                    "handle_hotspot
    609 
    610 
    611 * <SIGNATURE>---------------------------------------------------------------------------------------+
    612 * | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_MENU_BUTTON
    613 * +-------------------------------------------------------------------------------------------------+
    614 * | [--->] E_OBJECT                       LIKE
    615 * | [--->] E_UCOMM                        LIKE
    616 * +--------------------------------------------------------------------------------------</SIGNATURE>
    617   METHOD handle_menu_button.
    618     PERFORM (m_menu_button_form) IN PROGRAM (m_repid) IF FOUND USING e_object e_ucomm.
    619 *FORM 示例
    620 *FORM handle_menu_button  USING  e_object TYPE REF TO cl_ctmenu
    621 *                                e_ucomm TYPE sy-ucomm.
    622 *  CASE e_ucomm.
    623 *    WHEN 'MENU'.
    624 *      CALL METHOD e_object->add_function
    625 *        EXPORTING
    626 *          fcode = 'MENU1'
    627 *          text  = '菜单1'.
    628 *  ENDCASE.
    629 *ENDFORM.                    "handle_menu_button
    630   ENDMETHOD.
    631 
    632 
    633 * <SIGNATURE>---------------------------------------------------------------------------------------+
    634 * | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_TOOLBAR
    635 * +-------------------------------------------------------------------------------------------------+
    636 * | [--->] E_OBJECT                       LIKE
    637 * | [--->] E_INTERACTIVE                  LIKE
    638 * +--------------------------------------------------------------------------------------</SIGNATURE>
    639   METHOD handle_toolbar.
    640     PERFORM (m_toolbar_form) IN PROGRAM (m_repid) IF FOUND USING e_object e_interactive.
    641 *FORM 示例
    642 *FORM handle_toolbar USING   e_object TYPE REF TO cl_alv_event_toolbar_set
    643 *                            e_interactive TYPE char1.
    644 *  DATA: ls_toolbar TYPE stb_button.
    645 *
    646 *  ls_toolbar-function = 'IMPORT'.
    647 *  ls_toolbar-icon = icon_import.
    648 *  ls_toolbar-text = '导入表格字段'.
    649 *  ls_toolbar-quickinfo = '导入表格字段'.
    650 *  APPEND ls_toolbar TO e_object->mt_toolbar.
    651 *  CLEAR: ls_toolbar.
    652 *
    653 *  ls_toolbar-function = 'ALL'.
    654 *  ls_toolbar-text = '输出:全选'.
    655 *  ls_toolbar-quickinfo = '全部输出'.
    656 *  APPEND ls_toolbar TO e_object->mt_toolbar.
    657 *  CLEAR: ls_toolbar.
    658 *
    659 *  ls_toolbar-function = 'NONE'.
    660 *  ls_toolbar-text = '输出:取消全选'.
    661 *  ls_toolbar-quickinfo = '全部不输出'.
    662 *  APPEND ls_toolbar TO e_object->mt_toolbar.
    663 *  CLEAR: ls_toolbar.
    664 *ENDFORM.
    665   ENDMETHOD.
    666 
    667 
    668 * <SIGNATURE>---------------------------------------------------------------------------------------+
    669 * | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_USER_COMMAND
    670 * +-------------------------------------------------------------------------------------------------+
    671 * | [--->] E_UCOMM                        LIKE
    672 * +--------------------------------------------------------------------------------------</SIGNATURE>
    673   METHOD handle_user_command.
    674     PERFORM (m_user_command_form) IN PROGRAM (m_repid) IF FOUND USING e_ucomm.
    675 *FORM 示例
    676 *FORM handle_user_command  USING    e_ucomm TYPE sy-ucomm.
    677 *  DATA: ok_code TYPE sy-ucomm.
    678 *  ok_code = e_ucomm.
    679 *  CLEAR e_ucomm.
    680 *
    681 *  CASE ok_code.
    682 *    WHEN 'IMPORT'.
    683 *      go_alv->refresh_table_display( ).
    684 *  ENDCASE.
    685 *ENDFORM.
    686   ENDMETHOD.
    687 
    688 
    689 * <SIGNATURE>---------------------------------------------------------------------------------------+
    690 * | Static Public Method ZCL_TAB_OO_ALV=>SPLIT_CONTAINER
    691 * +-------------------------------------------------------------------------------------------------+
    692 * | [--->] IV_CONTAINER_NAME              TYPE        CHAR30
    693 * | [--->] I_ROW                          TYPE        I
    694 * | [--->] I_COL                          TYPE        I
    695 * | [<---] ET_CONTAINER_T                 TYPE        TY_T_SPLITS
    696 * +--------------------------------------------------------------------------------------</SIGNATURE>
    697   METHOD split_container.
    698     DATA lv_row TYPE i.
    699     DATA lv_col TYPE i.
    700     DATA ls_splits TYPE ty_splits.
    701     DATA(lo_cc) = NEW cl_gui_custom_container( container_name = iv_container_name ).
    702     IF lo_cc IS BOUND.
    703       DATA(lo_split) = NEW cl_gui_splitter_container( parent = lo_cc rows = i_row columns = i_col ).
    704     ENDIF.
    705 
    706     lv_row = 1.
    707     lv_col = 1.
    708     DO.
    709       DATA(lo_split_cc1) = lo_split->get_container( EXPORTING
    710       row       = lv_row
    711       column    = lv_col
    712       ).
    713       CHECK lo_split_cc1 IS BOUND.
    714       ls_splits-row = lv_row.
    715       ls_splits-col = lv_col.
    716       ls_splits-container = lo_split_cc1.
    717       APPEND ls_splits TO et_container_t.
    718       CLEAR ls_splits.
    719 
    720       IF lv_col < i_col.
    721         lv_col = lv_col + 1.
    722       ELSE.
    723         "lv_col = i_col
    724         IF lv_row < i_row.
    725           lv_row = lv_row + 1.
    726         ELSE.
    727           EXIT.
    728         ENDIF.
    729       ENDIF.
    730       CLEAR lo_split_cc1.
    731     ENDDO.
    732 
    733   ENDMETHOD.
    734 ENDCLASS.

    希望对大家的开发有帮助哈

  • 相关阅读:
    生成1--n的全排列
    小P的秘籍
    小P的字符串
    小P的金字塔
    2198: 小P当志愿者送餐
    交换排序(快速排序重点)
    关于上级机构的冲突性测试bug修复
    系统当前时间system.currenttimemillis与new Date().getTime() 区别
    Servlet中(Session、cookies、servletcontext)的基本用法
    默认图片展示(个人信息模块)
  • 原文地址:https://www.cnblogs.com/jxzhu/p/15187670.html
Copyright © 2011-2022 走看看