前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >个人OO ALV 模版-加快你的ALV开发

个人OO ALV 模版-加快你的ALV开发

作者头像
Tab Zhu
发布2022-06-27 18:52:04
6260
发布2022-06-27 18:52:04
举报
文章被收录于专栏:TAB的coding生活TAB的coding生活

Title

OO ALV 模版

创建ALV前的所需操作

上次摸鱼群有个老兄让我写个OO,今天在这里交代一下。

1. 取数据

这里我们随便取数据

代码语言:javascript
复制
SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)
  UP TO 20 ROWS.

2. 创建屏幕

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

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

创建了OK_CODE

3. 添加逻辑流

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

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

使用ALV 类直接显示

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

代码语言:javascript
复制
REPORT z_tab_test03.
DATA ok_code TYPE sy-ucomm.

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

DATA(cl_oo_alv) = NEW zcl_tab_oo_alv( ).

CALL METHOD cl_oo_alv->create_oo_alv
  EXPORTING
*   iv_repid          = SY-CPROG
*   iv_screen         = '9000'
*   iv_default_ex     = 'X'
*   is_layout         =
*   it_fieldcat       =
*   it_exclude        =
*   iv_split_number   =
*   iv_split_container          =
    iv_container_name = 'CONTAINER'
*   iv_variant_handle = '1'
*   i_f4_form         =
*   i_toolbar_form    =
*   i_user_command_form         =
*   i_hotspot_form    =
*   i_datachanged_form          =
*   i_datachanged_finished_form =
*   i_before_ucomm_form         =
*   i_double_click_form         =
*   i_menu_button_form          =
  CHANGING
    it_data           = gt_sflight.

CALL SCREEN 9000.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  SET PF-STATUS 'STATUS'.
  SET TITLEBAR 'TITLE'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_9000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
  CASE ok_code.
    WHEN 'EXIT' OR 'BACK'.
      LEAVE TO SCREEN 0.
    WHEN  'CANC'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.
  CLEAR ok_code.
ENDMODULE.

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

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

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

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

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

代码语言:javascript
复制
REPORT z_tab_test03.
DATA ok_code TYPE sy-ucomm.

SELECT * FROM sflight INTO TABLE @DATA(gt_sflight)
  UP TO 20 ROWS.
CHECK sy-subrc EQ 0.
SELECT * FROM scarr INTO TABLE @DATA(gt_scarr)
  FOR ALL ENTRIES IN @gt_sflight
  WHERE carrid = @gt_sflight-carrid.


CALL METHOD zcl_tab_oo_alv=>split_container
  EXPORTING
    iv_container_name = 'CONTAINER'
    i_row             = 1
    i_col             = 2
  IMPORTING
    et_container_t    = DATA(lt_container_t).

CHECK lt_container_t IS NOT INITIAL.

DATA(cl_oo_alv1) = NEW zcl_tab_oo_alv( ).
DATA(cl_oo_alv2) = NEW zcl_tab_oo_alv( ).


READ TABLE lt_container_t INTO DATA(ls_container) INDEX 1.
IF sy-subrc EQ 0.
  CALL METHOD cl_oo_alv1->create_oo_alv
    EXPORTING
      iv_split_number    = 1
      iv_split_container = ls_container-container
    CHANGING
      it_data            = gt_sflight.
ENDIF.

READ TABLE lt_container_t INTO ls_container INDEX 2.
IF sy-subrc EQ 0.
  CALL METHOD cl_oo_alv1->create_oo_alv
    EXPORTING
      iv_split_number    = 2
      iv_split_container = ls_container-container
    CHANGING
      it_data            = gt_scarr.
ENDIF.


CALL SCREEN 9000.

ZCL_TAB_OO_ALV代码如下

代码语言:javascript
复制
CLASS zcl_tab_oo_alv DEFINITION
  PUBLIC
  CREATE PUBLIC .
*&=====================================================================*
*& Create date:  2021.08.26
*& Created by:   Tab-Zhu (微信公众号:Tab_JXZHU)
*&---------------------------------------------------------------------*
  PUBLIC SECTION.

    TYPES:
      BEGIN OF ty_splits,
        row       TYPE i,
        col       TYPE i,
        container TYPE REF TO cl_gui_container,
      END OF ty_splits .
    TYPES:
      ty_t_splits TYPE TABLE OF ty_splits .

    CONSTANTS gc_a TYPE c VALUE 'A' ##NO_TEXT.
    CONSTANTS gc_d TYPE c VALUE 'D' ##NO_TEXT.
    DATA cr_grid TYPE REF TO cl_gui_alv_grid .
    DATA cr_container TYPE REF TO cl_gui_custom_container .
    DATA split_n TYPE i .
    DATA m_repid TYPE progname .
    DATA m_f4_form TYPE string .                                       "
    DATA m_toolbar_form TYPE string .
    DATA m_hotspot_form TYPE string .
    DATA m_user_command_form TYPE string .
    DATA m_datachanged_form TYPE string .
    DATA m_datachanged_finished_form TYPE string .
    DATA m_before_ucomm_form TYPE string .
    DATA m_double_click_form TYPE string .
    DATA m_menu_button_form TYPE string .

    METHODS create_oo_alv
      IMPORTING
        VALUE(iv_repid)              TYPE progname DEFAULT sy-cprog
        VALUE(iv_screen)             TYPE sy-dynnr DEFAULT '9000' "默认屏幕号码
        VALUE(iv_default_ex)         TYPE char1 DEFAULT 'X' "使用默认的按钮组
        VALUE(is_layout)             TYPE lvc_s_layo OPTIONAL
        VALUE(it_fieldcat)           TYPE lvc_t_fcat OPTIONAL
        VALUE(it_exclude)            TYPE ui_functions OPTIONAL "需要排除的按钮
        VALUE(iv_split_number)       TYPE i OPTIONAL "分割容器号码
        VALUE(iv_split_container)    TYPE REF TO cl_gui_container OPTIONAL"分割容器号码有值时,请传入容器类,必填
        VALUE(iv_container_name)     TYPE char30 OPTIONAL "当分割容器号没有值时,必填
        VALUE(iv_variant_handle)     TYPE disvariant-handle DEFAULT '1'
        !i_f4_form                   TYPE string OPTIONAL
        !i_toolbar_form              TYPE string OPTIONAL
        !i_user_command_form         TYPE string OPTIONAL
        !i_hotspot_form              TYPE string OPTIONAL
        !i_datachanged_form          TYPE string OPTIONAL
        !i_datachanged_finished_form TYPE string OPTIONAL
        !i_before_ucomm_form         TYPE string OPTIONAL
        !i_double_click_form         TYPE string OPTIONAL
        !i_menu_button_form          TYPE string OPTIONAL
      CHANGING
        !it_data                     TYPE STANDARD TABLE .
    "分割 容器
    CLASS-METHODS split_container
      IMPORTING
        !iv_container_name TYPE char30
        !i_row             TYPE i
        !i_col             TYPE i
      EXPORTING
        !et_container_t    TYPE ty_t_splits .
    "设置默认排除按钮-OO ALV
    CLASS-METHODS default_exclude_func
      EXPORTING
        VALUE(it_exclude) TYPE ui_functions .
    "得到默认字段属性-根据内表
    CLASS-METHODS get_default_fieldcat
      CHANGING
        !it_data           TYPE STANDARD TABLE
      RETURNING
        VALUE(rt_fieldcat) TYPE lvc_t_fcat
      EXCEPTIONS
        error_in_get_fieldcat .
    "得到默认的Layout
    CLASS-METHODS get_default_layout
      RETURNING
        VALUE(es_layout) TYPE lvc_s_layo .
    "设置按钮
    METHODS handle_toolbar
      FOR EVENT toolbar OF cl_gui_alv_grid
      IMPORTING
        !e_object
        !e_interactive .
    "设置F4帮助
    METHODS handle_f4
      FOR EVENT onf4 OF cl_gui_alv_grid
      IMPORTING
        !e_fieldname
        !e_fieldvalue
        !es_row_no
        !er_event_data
        !et_bad_cells
        !e_display .
    "设置热点单击
    METHODS handle_hotspot
      FOR EVENT hotspot_click OF cl_gui_alv_grid
      IMPORTING
        !e_row_id
        !e_column_id
        !es_row_no .
    METHODS handle_user_command
      FOR EVENT user_command OF cl_gui_alv_grid
      IMPORTING
        !e_ucomm .
    METHODS handle_datachanged
      FOR EVENT data_changed OF cl_gui_alv_grid
      IMPORTING
        !er_data_changed
        !e_onf4
        !e_onf4_before
        !e_onf4_after
        !e_ucomm .
    METHODS handle_datachanged_finished
      FOR EVENT data_changed_finished OF cl_gui_alv_grid
      IMPORTING
        !e_modified
        !et_good_cells .
    METHODS handle_before_ucomm
      FOR EVENT before_user_command OF cl_gui_alv_grid
      IMPORTING
        !e_ucomm .
    METHODS handle_double_click
      FOR EVENT double_click OF cl_gui_alv_grid
      IMPORTING
        !e_row
        !e_column
        !es_row_no .
    METHODS handle_menu_button
      FOR EVENT menu_button OF cl_gui_alv_grid
      IMPORTING
        !e_object
        !e_ucomm .
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS ZCL_TAB_OO_ALV IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_OO_ALV->CREATE_OO_ALV
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_REPID                       TYPE        PROGNAME (default =SY-CPROG)
* | [--->] IV_SCREEN                      TYPE        SY-DYNNR (default ='9000')
* | [--->] IV_DEFAULT_EX                  TYPE        CHAR1 (default ='X')
* | [--->] IS_LAYOUT                      TYPE        LVC_S_LAYO(optional)
* | [--->] IT_FIELDCAT                    TYPE        LVC_T_FCAT(optional)
* | [--->] IT_EXCLUDE                     TYPE        UI_FUNCTIONS(optional)
* | [--->] IV_SPLIT_NUMBER                TYPE        I(optional)
* | [--->] IV_SPLIT_CONTAINER             TYPE REF TO CL_GUI_CUSTOM_CONTAINER(optional)
* | [--->] IV_CONTAINER_NAME              TYPE        CHAR30(optional)
* | [--->] IV_VARIANT_HANDLE              TYPE        DISVARIANT-HANDLE (default ='1')
* | [--->] I_F4_FORM                      TYPE        STRING(optional)
* | [--->] I_TOOLBAR_FORM                 TYPE        STRING(optional)
* | [--->] I_USER_COMMAND_FORM            TYPE        STRING(optional)
* | [--->] I_HOTSPOT_FORM                 TYPE        STRING(optional)
* | [--->] I_DATACHANGED_FORM             TYPE        STRING(optional)
* | [--->] I_DATACHANGED_FINISHED_FORM    TYPE        STRING(optional)
* | [--->] I_BEFORE_UCOMM_FORM            TYPE        STRING(optional)
* | [--->] I_DOUBLE_CLICK_FORM            TYPE        STRING(optional)
* | [--->] I_MENU_BUTTON_FORM             TYPE        STRING(optional)
* | [<-->] IT_DATA                        TYPE        STANDARD TABLE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD create_oo_alv.

    DATA lt_filedcat TYPE lvc_t_fcat.
    DATA ls_layout TYPE lvc_s_layo.
    "iv_split_number
    "判断是否是分割容器
    IF iv_split_number IS INITIAL.
      CREATE OBJECT cr_container
        EXPORTING
          container_name = iv_container_name. "屏幕上用户自定义控件名
* create alv
      CREATE OBJECT cr_grid
        EXPORTING
          i_parent = cr_container.
    ELSE.
      "分割容器
      cr_container = iv_split_container.
      CREATE OBJECT cr_grid
        EXPORTING
          i_parent = cr_container.
    ENDIF.

    CHECK cr_grid IS NOT INITIAL.

    DATA lt_exclude TYPE ui_functions.
    IF iv_default_ex = 'X'.
      "使用默认排除按钮
      CALL METHOD me->default_exclude_func
        IMPORTING
          it_exclude = lt_exclude.
    ENDIF.
    "手动排除按钮
    IF it_exclude[] IS NOT INITIAL.
      APPEND LINES OF it_exclude TO lt_exclude.
      SORT lt_exclude.
      DELETE ADJACENT DUPLICATES FROM lt_exclude.
    ENDIF.
    "布局
    IF is_layout IS NOT INITIAL.
      ls_layout = is_layout.
    ELSE.
      ls_layout = me->get_default_layout( ).
    ENDIF.
    "字段目录
    IF it_fieldcat[] IS NOT INITIAL.
      lt_filedcat = it_fieldcat.
    ELSE.
      CALL METHOD me->get_default_fieldcat
        CHANGING
          it_data               = it_data
        RECEIVING
          rt_fieldcat           = lt_filedcat
        EXCEPTIONS
          error_in_get_fieldcat = 1
          OTHERS                = 2.
      IF sy-subrc NE 0.
        MESSAGE e368(00) WITH 'Failed to get fiedlcat' ''.
      ENDIF.
    ENDIF.

    "变式布局
    DATA:ls_disvariant TYPE disvariant.
    ls_disvariant-report = sy-repid.
    ls_disvariant-handle = iv_variant_handle.
    ls_disvariant-username = sy-uname.

*    CALL METHOD
    CALL METHOD cr_grid->set_table_for_first_display
      EXPORTING
        is_variant           = ls_disvariant
        i_default            = abap_on
        i_save               = gc_a
        is_layout            = ls_layout
        it_toolbar_excluding = lt_exclude
      CHANGING
        it_outtab            = it_data
        it_fieldcatalog      = lt_filedcat.
*SET EVENT
    DEFINE d_set_handler.
      IF &1 IS SUPPLIED.
        &2 = &1.
        SET HANDLER me->&3 FOR cr_grid.
      ENDIF.
    END-OF-DEFINITION.

    m_repid = iv_repid.

    "绑定事件
    d_set_handler:
      i_f4_form                     m_f4_form                     handle_f4,
      i_toolbar_form                m_toolbar_form                handle_toolbar,
      i_user_command_form           m_user_command_form           handle_user_command,
      i_hotspot_form                m_hotspot_form                handle_hotspot,
      i_datachanged_form            m_datachanged_form            handle_datachanged,
      i_datachanged_finished_form   m_datachanged_finished_form   handle_datachanged_finished,
      i_before_ucomm_form           m_before_ucomm_form           handle_before_ucomm,
      i_double_click_form           m_double_click_form           handle_double_click,
      i_menu_button_form            m_menu_button_form            handle_menu_button.

*    SET HANDLER me->handle_toolbar       FOR cr_grid.
*    SET HANDLER me->handle_datachanged_finished  FOR cr_grid.
*    SET HANDLER me->handle_datachanged FOR cr_grid.
*    SET HANDLER me->handle_user_command  FOR cr_grid.
*    SET HANDLER me->handle_hotspot FOR cr_grid .

    CALL METHOD cr_grid->set_toolbar_interactive.
* register enter event
    CALL METHOD cr_grid->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_enter
      EXCEPTIONS
        error      = 1
        OTHERS     = 2.
    IF sy-subrc NE 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
      sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    CALL METHOD cr_grid->register_edit_event     "register modify event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified
      EXCEPTIONS
        error      = 1
        OTHERS     = 2.
    IF sy-subrc NE 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1
      sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_TAB_OO_ALV=>DEFAULT_EXCLUDE_FUNC
* +-------------------------------------------------------------------------------------------------+
* | [<---] IT_EXCLUDE                     TYPE        UI_FUNCTIONS
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD default_exclude_func.
    DATA: ls_exclude TYPE ui_func.
    ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy .
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row .
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_maximum .
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_minimum .
    APPEND ls_exclude TO it_exclude.
*  ls_exclude = cl_gui_alv_grid=>mc_fc_view_excel.
*  append ls_exclude to it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_view_lotus .
    APPEND ls_exclude TO it_exclude.
*    LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_EXPORT .
*    APPEND LS_EXCLUDE TO IT_EXCLUDE.
    ls_exclude = cl_gui_alv_grid=>mc_fc_sum .
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_average .
    APPEND ls_exclude TO it_exclude.
*  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_MB_SUBTOT .
*  APPEND LS_EXCLUDE TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_check.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_refresh.
    APPEND ls_exclude TO it_exclude.

*  ls_exclude = '&LOAD'.
*  append ls_exclude to it_exclude.
*  LS_EXCLUDE = '&COL0'.
*  APPEND LS_EXCLUDE TO it_exclude.
*  LS_EXCLUDE = '&SAVE '.
*  APPEND LS_EXCLUDE TO it_exclude.
*  LS_EXCLUDE = '&MAINTAIN '.
*  APPEND LS_EXCLUDE TO IT_EXCLUDE.
    ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = cl_gui_alv_grid=>mc_fc_print .
    APPEND ls_exclude TO it_exclude.
    ls_exclude = '&INFO'.
    APPEND ls_exclude TO it_exclude.
    ls_exclude = '&GRAPH'.
    APPEND ls_exclude TO it_exclude.
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_TAB_OO_ALV=>GET_DEFAULT_FIELDCAT
* +-------------------------------------------------------------------------------------------------+
* | [<-->] IT_DATA                        TYPE        STANDARD TABLE
* | [<-()] RT_FIELDCAT                    TYPE        LVC_T_FCAT
* | [EXC!] ERROR_IN_GET_FIELDCAT
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD get_default_fieldcat.
    DATA: salv_table TYPE REF TO cl_salv_table.
    TRY.
        cl_salv_table=>factory( IMPORTING
                                  r_salv_table   = salv_table
                                CHANGING
                                  t_table        = it_data[] ).
        rt_fieldcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
            r_columns      = salv_table->get_columns( ) " ALV Filter
            r_aggregations = salv_table->get_aggregations( ) " ALV Aggregations
    ).
      CATCH cx_root INTO DATA(lx_root).
        DATA(lv_text) = lx_root->get_text( ).
        RAISE error_in_get_fieldcat.
    ENDTRY.

    "当你的内表字段不是参考数据库结构/表创建的时候,F4搜索帮助有图标但是无效
    "有2种处理方法
    "1. F4AVAILABL = abap_false
    "2. 加上:REF_TABLE ,REF_FIELD


  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_TAB_OO_ALV=>GET_DEFAULT_LAYOUT
* +-------------------------------------------------------------------------------------------------+
* | [<-()] ES_LAYOUT                      TYPE        LVC_S_LAYO
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD get_default_layout.
    es_layout-sel_mode    = gc_d ."
    es_layout-zebra = abap_on. "
    es_layout-cwidth_opt = abap_on. "
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_BEFORE_UCOMM
* +-------------------------------------------------------------------------------------------------+
* | [--->] E_UCOMM                        LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD handle_before_ucomm.
    PERFORM (m_before_ucomm_form) IN PROGRAM (m_repid) IF FOUND
      USING e_ucomm.
*FORM 示例
*FORM handle_before_ucomm USING e_ucomm TYPE sy-ucomm.
*ENDFORM.                    "handle_before_ucomm
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_DATACHANGED
* +-------------------------------------------------------------------------------------------------+
* | [--->] ER_DATA_CHANGED                LIKE
* | [--->] E_ONF4                         LIKE
* | [--->] E_ONF4_BEFORE                  LIKE
* | [--->] E_ONF4_AFTER                   LIKE
* | [--->] E_UCOMM                        LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD handle_datachanged.
    PERFORM (m_datachanged_form) IN PROGRAM (m_repid) IF FOUND
          USING er_data_changed e_onf4 e_onf4_before e_onf4_after e_ucomm.
*FORM 示例
*FORM handle_datachanged_cpmx USING  er_data_changed TYPE REF TO cl_alv_changed_data_protocol
*                                    e_onf4 TYPE char01
*                                    e_onf4_before TYPE char01
*                                    e_onf4_after TYPE char01
*                                    e_ucomm TYPE sy-ucomm.
*  FIELD-SYMBOLS: <ls_cell> TYPE lvc_s_modi.
*  DATA: ls_cpmx TYPE ty_cpmx,
*        lt_mod_cells TYPE lvc_t_modi WITH HEADER LINE.
*
*  CLEAR: g_error.
*
*  DEFINE add_protocol_entry.
*    g_error = 'X'.
*    call method er_data_changed->add_protocol_entry
*      exporting
*        i_msgid     = &1
*        i_msgty     = &2
*        i_msgno     = &3
*        i_msgv1     = &4
*        i_msgv2     = &5
*        i_msgv3     = &6
*        i_msgv4     = &7
*        i_fieldname = <ls_cell>-fieldname
*        i_row_id    = <ls_cell>-row_id
*        i_tabix     = <ls_cell>-tabix.
*  END-OF-DEFINITION.
*  DEFINE modify_cell.
*    call method er_data_changed->modify_cell
*      exporting
*        i_row_id    = <ls_cell>-row_id
*        i_tabix     = <ls_cell>-tabix
*        i_fieldname = &1
*        i_value     = &2.
*  END-OF-DEFINITION.
*
*  LOOP AT er_data_changed->mt_mod_cells ASSIGNING <ls_cell>.
*    CASE <ls_cell>-fieldname.
*      WHEN 'BUKRS'.  "公司代码描述
*        CLEAR gs_t001.
*        READ TABLE gt_t001 INTO gs_001 WITH KEY bukrs = <ls_cell>-value.
*        IF sy-subrc <> 0 AND <ls_cell>-value IS NOT INITIAL.
*          add_protocol_entry: '00' 'E' '001' '公司代码:' <ls_cell>-value '不存在' ''.
*        ENDIF.
*        modify_cell: 'BUTXT' gs_001-butxt.
*    ENDCASE.
*  ENDLOOP.
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_DATACHANGED_FINISHED
* +-------------------------------------------------------------------------------------------------+
* | [--->] E_MODIFIED                     LIKE
* | [--->] ET_GOOD_CELLS                  LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD handle_datachanged_finished.
    PERFORM (m_datachanged_finished_form) IN PROGRAM (m_repid) IF FOUND
  USING e_modified et_good_cells.
*FORM 示例
*FORM handle_datachanged_finished USING  e_modified TYPE char01
*                                        et_good_cells TYPE lvc_t_modi.
*ENDFORM.                    "HANDLE_DATACHANGED_FINISHED
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_DOUBLE_CLICK
* +-------------------------------------------------------------------------------------------------+
* | [--->] E_ROW                          LIKE
* | [--->] E_COLUMN                       LIKE
* | [--->] ES_ROW_NO                      LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD handle_double_click.
    PERFORM (m_double_click_form) IN PROGRAM (m_repid) IF FOUND
      USING e_row e_column es_row_no.
*FORM 示例
*FORM handle_double_click USING  e_row TYPE lvc_s_row
*                                e_column TYPE lvc_s_col
*                                es_row_no TYPE lvc_s_roid.
*ENDFORM.                    "handle_before_ucomm
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_F4
* +-------------------------------------------------------------------------------------------------+
* | [--->] E_FIELDNAME                    LIKE
* | [--->] E_FIELDVALUE                   LIKE
* | [--->] ES_ROW_NO                      LIKE
* | [--->] ER_EVENT_DATA                  LIKE
* | [--->] ET_BAD_CELLS                   LIKE
* | [--->] E_DISPLAY                      LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD handle_f4.
    PERFORM (m_f4_form) IN PROGRAM (m_repid) IF FOUND
    USING e_fieldname e_fieldvalue es_row_no er_event_data et_bad_cells e_display.
*FORM 示例
*FORM handle_f4  USING           e_fieldname TYPE lvc_fname
*                                e_fieldvalue TYPE lvc_value
*                                es_row_no TYPE lvc_s_roid
*                                er_event_data TYPE REF TO cl_alv_event_data
*                                et_bad_cells TYPE lvc_t_modi
*                                e_display TYPE char01.
*  DATA: ls_row TYPE lvc_s_row,
*        ls_col TYPE lvc_s_col,
*        ls_modi TYPE lvc_s_modi,
*        l_tabname TYPE tabname,
*        l_fieldtext TYPE fieldtext,
*        l_ref_table TYPE lvc_rtname,
*        l_ref_field TYPE lvc_rfname.
*  FIELD-SYMBOLS: <lt_modi> TYPE lvc_t_modi.
*
*  er_event_data->m_event_handled = 'X'.
*
*  CASE e_fieldname.
*    WHEN 'TABNAME'.
*      PERFORM f4_dd_table(rsaqddic) USING 'SAPLAQJD_CNTRL'
*                                          '0300'
*                                          'G_DYN_0300-TNAME'
*                                    CHANGING e_fieldvalue.  "搜索帮助代码,来于SQVI中“插入表”的搜索帮助
*    WHEN OTHERS.
*      EXIT.
*  ENDCASE.
*
*  ASSIGN er_event_data->m_data->* TO <lt_modi>.
*  ls_modi-row_id    = es_row_no-row_id."
*  ls_modi-fieldname = e_fieldname.
*  ls_modi-value     = e_fieldvalue.
*  APPEND ls_modi TO <lt_modi>.
*  IF e_fieldname = 'FIELDNAME'.
*    ls_modi-row_id    = es_row_no-row_id."
*    ls_modi-fieldname = 'SCRTEXT_L'.
*    ls_modi-value     = l_fieldtext.
*    APPEND ls_modi TO <lt_modi>.
*
*    ls_modi-row_id    = es_row_no-row_id."
*    ls_modi-fieldname = 'REF_TABLE'.
*    ls_modi-value     = l_ref_table.
*    APPEND ls_modi TO <lt_modi>.
*
*    ls_modi-row_id    = es_row_no-row_id."
*    ls_modi-fieldname = 'REF_FIELD'.
*    ls_modi-value     = l_ref_field.
*    APPEND ls_modi TO <lt_modi>.
*  ENDIF.
*
*ENDFORM.
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_HOTSPOT
* +-------------------------------------------------------------------------------------------------+
* | [--->] E_ROW_ID                       LIKE
* | [--->] E_COLUMN_ID                    LIKE
* | [--->] ES_ROW_NO                      LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD handle_hotspot.
    PERFORM (m_hotspot_form) IN PROGRAM (m_repid) IF FOUND
      USING e_row_id e_column_id es_row_no.
*FORM 示例
*FORM handle_hotspot  USING    p_row_id     TYPE lvc_s_row
*                              p_column_id  TYPE lvc_s_col
*                              p_row_no     TYPE lvc_s_roid.
*  CASE p_column_id-fieldname.
*    WHEN 'COUNT'.
*  ENDCASE.
*ENDFORM.
  ENDMETHOD.                    "handle_hotspot


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_MENU_BUTTON
* +-------------------------------------------------------------------------------------------------+
* | [--->] E_OBJECT                       LIKE
* | [--->] E_UCOMM                        LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD handle_menu_button.
    PERFORM (m_menu_button_form) IN PROGRAM (m_repid) IF FOUND USING e_object e_ucomm.
*FORM 示例
*FORM handle_menu_button  USING  e_object TYPE REF TO cl_ctmenu
*                                e_ucomm TYPE sy-ucomm.
*  CASE e_ucomm.
*    WHEN 'MENU'.
*      CALL METHOD e_object->add_function
*        EXPORTING
*          fcode = 'MENU1'
*          text  = '菜单1'.
*  ENDCASE.
*ENDFORM.                    "handle_menu_button
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_TOOLBAR
* +-------------------------------------------------------------------------------------------------+
* | [--->] E_OBJECT                       LIKE
* | [--->] E_INTERACTIVE                  LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD handle_toolbar.
    PERFORM (m_toolbar_form) IN PROGRAM (m_repid) IF FOUND USING e_object e_interactive.
*FORM 示例
*FORM handle_toolbar USING   e_object TYPE REF TO cl_alv_event_toolbar_set
*                            e_interactive TYPE char1.
*  DATA: ls_toolbar TYPE stb_button.
*
*  ls_toolbar-function = 'IMPORT'.
*  ls_toolbar-icon = icon_import.
*  ls_toolbar-text = '导入表格字段'.
*  ls_toolbar-quickinfo = '导入表格字段'.
*  APPEND ls_toolbar TO e_object->mt_toolbar.
*  CLEAR: ls_toolbar.
*
*  ls_toolbar-function = 'ALL'.
*  ls_toolbar-text = '输出:全选'.
*  ls_toolbar-quickinfo = '全部输出'.
*  APPEND ls_toolbar TO e_object->mt_toolbar.
*  CLEAR: ls_toolbar.
*
*  ls_toolbar-function = 'NONE'.
*  ls_toolbar-text = '输出:取消全选'.
*  ls_toolbar-quickinfo = '全部不输出'.
*  APPEND ls_toolbar TO e_object->mt_toolbar.
*  CLEAR: ls_toolbar.
*ENDFORM.
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_TAB_OO_ALV->HANDLE_USER_COMMAND
* +-------------------------------------------------------------------------------------------------+
* | [--->] E_UCOMM                        LIKE
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD handle_user_command.
    PERFORM (m_user_command_form) IN PROGRAM (m_repid) IF FOUND USING e_ucomm.
*FORM 示例
*FORM handle_user_command  USING    e_ucomm TYPE sy-ucomm.
*  DATA: ok_code TYPE sy-ucomm.
*  ok_code = e_ucomm.
*  CLEAR e_ucomm.
*
*  CASE ok_code.
*    WHEN 'IMPORT'.
*      go_alv->refresh_table_display( ).
*  ENDCASE.
*ENDFORM.
  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_TAB_OO_ALV=>SPLIT_CONTAINER
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_CONTAINER_NAME              TYPE        CHAR30
* | [--->] I_ROW                          TYPE        I
* | [--->] I_COL                          TYPE        I
* | [<---] ET_CONTAINER_T                 TYPE        TY_T_SPLITS
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD split_container.
    DATA lv_row TYPE i.
    DATA lv_col TYPE i.
    DATA ls_splits TYPE ty_splits.
    DATA(lo_cc) = NEW cl_gui_custom_container( container_name = iv_container_name ).
    IF lo_cc IS BOUND.
      DATA(lo_split) = NEW cl_gui_splitter_container( parent = lo_cc rows = i_row columns = i_col ).
    ENDIF.

    lv_row = 1.
    lv_col = 1.
    DO.
      DATA(lo_split_cc1) = lo_split->get_container( EXPORTING
      row       = lv_row
      column    = lv_col
      ).
      CHECK lo_split_cc1 IS BOUND.
      ls_splits-row = lv_row.
      ls_splits-col = lv_col.
      ls_splits-container = lo_split_cc1.
      APPEND ls_splits TO et_container_t.
      CLEAR ls_splits.

      IF lv_col < i_col.
        lv_col = lv_col + 1.
      ELSE.
        "lv_col = i_col
        IF lv_row < i_row.
          lv_row = lv_row + 1.
        ELSE.
          EXIT.
        ENDIF.
      ENDIF.
      CLEAR lo_split_cc1.
    ENDDO.

  ENDMETHOD.
ENDCLASS.

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAP TAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档