ABAP UI如何使用Vertical Tabstrip for Controls

1 建立一个新程序,代码如下:
 REPORT zdrawer.
TABLES: trdir.
INCLUDE <icon>.

DATA: cc_drawer TYPE REF TO cl_gui_docking_container,
c_drawer TYPE REF TO cl_gui_container_bar,
c_container TYPE REF TO cl_gui_container,
l_caption TYPE sbptcaptn,
lt_captions TYPE sbptcaptns,
l_icon TYPE swd_icon,
lt_icons TYPE swd_icons,
ok_code TYPE sy-ucomm,
*
id TYPE i,
repid TYPE sy-repid,
dynnr TYPE sy-dynnr.
* Display data
TYPES: BEGIN OF ty_data ,
name LIKE trdir-name,
cnam LIKE trdir-cnam,
cdat LIKE trdir-cdat,
END OF ty_data.
DATA : g_alv_sd TYPE REF TO cl_gui_alv_grid,
g_alv_mm TYPE REF TO cl_gui_alv_grid,
g_alv_pp TYPE REF TO cl_gui_alv_grid,
g_alv_fi TYPE REF TO cl_gui_alv_grid,
g_alv_all TYPE REF TO cl_gui_alv_grid,
gs_data TYPE ty_data,
gt_data TYPE STANDARD TABLE OF ty_data.
CLASS lcl_application DEFINITION DEFERRED.
CLASS cl_gui_cfw DEFINITION LOAD.
DATA:
c_application TYPE REF TO lcl_application,
c_alv TYPE REF TO lcl_application.
*---------------------------------------------------------------------*
* CLASS lcl_application DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_application DEFINITION.
  PUBLIC SECTION.
    METHODS:
    on_click FOR EVENT clicked OF cl_gui_container_bar
    IMPORTING
    id
    container,
    on_hotspot_click FOR EVENT
    hotspot_click OF cl_gui_alv_grid IMPORTING
    e_row_id e_column_id.
ENDCLASS. "lcl_application DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_application IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_application IMPLEMENTATION.
  METHOD on_click.
    DATA: l_fcode TYPE ui_func,
    l_link TYPE swd_htmlco,
    l_quickinfo TYPE iconquick.
    DATA:
    lx_variant TYPE disvariant,
    lt_alv_cat TYPE lvc_t_fcat,
    lx_alv_cat TYPE lvc_s_fcat,
    lx_alv_lay TYPE lvc_s_layo.
    DEFINE m_fieldcat.
      add 1 to lx_alv_cat-col_pos.
      lx_alv_cat-fieldname = &1.
      case lx_alv_cat-fieldname.
        when 'NAME'.
          lx_alv_cat-key = 'X'.
          lx_alv_cat-hotspot = 'X'.
          lx_alv_cat-scrtext_m = 'Program Name'.
          lx_alv_cat-colddictxt = 'M'.
          lx_alv_cat-tipddictxt = 'M'.
        when 'CNAM'.
          lx_alv_cat-key = ''.
          lx_alv_cat-hotspot = ''.
          lx_alv_cat-scrtext_m = 'Created By'.
          lx_alv_cat-colddictxt = 'M'.
          lx_alv_cat-tipddictxt = 'M'.
        when 'CDAT'.
          lx_alv_cat-key = ''.
          lx_alv_cat-hotspot = ''.
          lx_alv_cat-scrtext_m = 'Created On'.
          lx_alv_cat-colddictxt = 'M'.
          lx_alv_cat-tipddictxt = 'M'.
      endcase.
      lx_alv_cat-ref_field = &2.
      lx_alv_cat-ref_table = &3.
      append lx_alv_cat to lt_alv_cat.
    END-OF-DEFINITION.
    CASE id.
      WHEN 1.
        FREE : g_alv_sd.
        IF g_alv_sd IS INITIAL.
          CREATE OBJECT g_alv_sd
          EXPORTING i_parent = container.
*Fill gt_data
          REFRESH gt_data[].
          SELECT name cnam cdat FROM trdir INTO CORRESPONDING FIELDS OF
          TABLE gt_data
          WHERE name LIKE 'ZSD%'.
*Fill the field catalog
          REFRESH lt_alv_cat[].
          m_fieldcat 'NAME' 'NAME' 'TRDIR'.
          m_fieldcat 'CNAM' 'CNAM' 'TRDIR'.
          m_fieldcat 'CDAT' 'CDAT' 'TRDIR'.
*Layout
          CLEAR lx_alv_lay.
          lx_alv_lay-zebra = 'X'.
          lx_alv_lay-cwidth_opt = 'X'.
          lx_alv_lay-grid_title = 'Sales and Distribution Reports'.
          lx_alv_lay-sel_mode = 'A'.
          lx_variant-report = sy-cprog.
*Display
          CALL METHOD g_alv_sd->set_table_for_first_display
          EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
          is_variant = lx_variant
* I_SAVE =
* I_DEFAULT = 'X'
          is_layout = lx_alv_lay
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
          CHANGING
          it_outtab = gt_data
          it_fieldcatalog = lt_alv_cat
* IT_SORT =
* IT_FILTER =
          EXCEPTIONS
          invalid_parameter_combination = 1
          program_error = 2
          too_many_lines = 3
          OTHERS = 4
          .
          IF c_alv IS INITIAL.
            CREATE OBJECT c_alv.
          ENDIF.
          SET HANDLER c_alv->on_hotspot_click FOR g_alv_sd.
        ENDIF.
      WHEN 2.
        FREE : g_alv_mm.
        IF g_alv_mm IS INITIAL.
          CREATE OBJECT g_alv_mm
          EXPORTING i_parent = container.
*Fill gt_data
          REFRESH gt_data[].
          SELECT name cnam cdat FROM trdir INTO CORRESPONDING FIELDS OF
          TABLE gt_data
          WHERE name LIKE 'ZMM%'.
*Fill the field catalog
          REFRESH lt_alv_cat[].
          m_fieldcat 'NAME' 'NAME' 'TRDIR'.
          m_fieldcat 'CNAM' 'CNAM' 'TRDIR'.
          m_fieldcat 'CDAT' 'CDAT' 'TRDIR'.
*Layout
          CLEAR lx_alv_lay.
          lx_alv_lay-zebra = 'X'.
          lx_alv_lay-cwidth_opt = 'X'.
          lx_alv_lay-grid_title = 'Material Management Reports'.
          lx_alv_lay-sel_mode = 'A'.
          lx_variant-report = sy-cprog.
*Display
          CALL METHOD g_alv_mm->set_table_for_first_display
          EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
          is_variant = lx_variant
* I_SAVE =
* I_DEFAULT = 'X'
          is_layout = lx_alv_lay
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
          CHANGING
          it_outtab = gt_data
          it_fieldcatalog = lt_alv_cat
* IT_SORT =
* IT_FILTER =
          EXCEPTIONS
          invalid_parameter_combination = 1
          program_error = 2
          too_many_lines = 3
          OTHERS = 4
          .
          IF c_alv IS INITIAL.
            CREATE OBJECT c_alv.
          ENDIF.
          SET HANDLER c_alv->on_hotspot_click FOR g_alv_mm.
        ENDIF.
      WHEN 3.
        FREE : g_alv_pp.
        IF g_alv_pp IS INITIAL.
          CREATE OBJECT g_alv_pp
          EXPORTING i_parent = container.
*Fill gt_data
          REFRESH gt_data[].
          SELECT name cnam cdat FROM trdir INTO CORRESPONDING FIELDS OF
          TABLE gt_data
          WHERE name LIKE 'ZPP%'.
*Fill the field catalog
          REFRESH lt_alv_cat[].
          m_fieldcat 'NAME' 'NAME' 'TRDIR'.
          m_fieldcat 'CNAM' 'CNAM' 'TRDIR'.
          m_fieldcat 'CDAT' 'CDAT' 'TRDIR'.
*Layout
          CLEAR lx_alv_lay.
          lx_alv_lay-zebra = 'X'.
          lx_alv_lay-cwidth_opt = 'X'.
          lx_alv_lay-grid_title = 'Production Planning Reports'.
          lx_alv_lay-sel_mode = 'A'.
          lx_variant-report = sy-cprog.
*Display
          CALL METHOD g_alv_pp->set_table_for_first_display
          EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
          is_variant = lx_variant
* I_SAVE =
* I_DEFAULT = 'X'
          is_layout = lx_alv_lay
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
          CHANGING
          it_outtab = gt_data
          it_fieldcatalog = lt_alv_cat
* IT_SORT =
* IT_FILTER =
          EXCEPTIONS
          invalid_parameter_combination = 1
          program_error = 2
          too_many_lines = 3
          OTHERS = 4
          .
          IF c_alv IS INITIAL.
            CREATE OBJECT c_alv.
          ENDIF.
          SET HANDLER c_alv->on_hotspot_click FOR g_alv_pp.
        ENDIF.
      WHEN 4.
        FREE : g_alv_fi.
        IF g_alv_fi IS INITIAL.
          CREATE OBJECT g_alv_fi
          EXPORTING i_parent = container.
*Fill gt_data
          REFRESH gt_data[].
          SELECT name cnam cdat FROM trdir INTO CORRESPONDING FIELDS OF
          TABLE gt_data
          WHERE name LIKE 'ZFI%'.
*Fill the field catalog
          REFRESH lt_alv_cat[].
          m_fieldcat 'NAME' 'NAME' 'TRDIR'.
          m_fieldcat 'CNAM' 'CNAM' 'TRDIR'.
          m_fieldcat 'CDAT' 'CDAT' 'TRDIR'.
*Layout
          CLEAR lx_alv_lay.
          lx_alv_lay-zebra = 'X'.
          lx_alv_lay-cwidth_opt = 'X'.
          lx_alv_lay-grid_title = 'Finance and Controlling Reports'.
          lx_alv_lay-sel_mode = 'A'.
          lx_variant-report = sy-cprog.
*Display
          CALL METHOD g_alv_fi->set_table_for_first_display
          EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
          is_variant = lx_variant
* I_SAVE =
* I_DEFAULT = 'X'
          is_layout = lx_alv_lay
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
          CHANGING
          it_outtab = gt_data
          it_fieldcatalog = lt_alv_cat
* IT_SORT =
* IT_FILTER =
          EXCEPTIONS
          invalid_parameter_combination = 1
          program_error = 2
          too_many_lines = 3
          OTHERS = 4
          .
          IF c_alv IS INITIAL.
            CREATE OBJECT c_alv.
          ENDIF.
          SET HANDLER c_alv->on_hotspot_click FOR g_alv_fi.
        ENDIF.
      WHEN 5.
        FREE : g_alv_all.
        IF g_alv_all IS INITIAL.
          CREATE OBJECT g_alv_all
          EXPORTING i_parent = container.
*Fill gt_data
          REFRESH gt_data[].
          SELECT name cnam cdat FROM trdir INTO CORRESPONDING FIELDS OF
          TABLE gt_data
          WHERE name LIKE 'Z%'.
*Fill the field catalog
          REFRESH lt_alv_cat[].
          m_fieldcat 'NAME' 'NAME' 'TRDIR'.
          m_fieldcat 'CNAM' 'CNAM' 'TRDIR'.
          m_fieldcat 'CDAT' 'CDAT' 'TRDIR'.
*Layout
          CLEAR lx_alv_lay.
          lx_alv_lay-zebra = 'X'.
          lx_alv_lay-cwidth_opt = 'X'.
          lx_alv_lay-grid_title = 'All custom Reports'.
          lx_alv_lay-sel_mode = 'A'.
          lx_variant-report = sy-cprog.
*Display
          CALL METHOD g_alv_all->set_table_for_first_display
          EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
* I_STRUCTURE_NAME =
          is_variant = lx_variant
* I_SAVE =
* I_DEFAULT = 'X'
          is_layout = lx_alv_lay
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
          CHANGING
          it_outtab = gt_data
          it_fieldcatalog = lt_alv_cat
* IT_SORT =
* IT_FILTER =
          EXCEPTIONS
          invalid_parameter_combination = 1
          program_error = 2
          too_many_lines = 3
          OTHERS = 4
          .
          IF c_alv IS INITIAL.
            CREATE OBJECT c_alv.
          ENDIF.
          SET HANDLER c_alv->on_hotspot_click FOR g_alv_all.
        ENDIF.
    ENDCASE.
  ENDMETHOD. "on_click
  METHOD on_hotspot_click.
    DATA:
    lx_selected_row TYPE lvc_s_row,
    ls_data TYPE ty_data.
    CLEAR lx_selected_row.
    MOVE-CORRESPONDING e_row_id TO lx_selected_row.
    READ TABLE gt_data INTO ls_data INDEX lx_selected_row-index.
    SET PARAMETER ID 'RID' FIELD ls_data-name.
    CALL TRANSACTION 'SE38' AND SKIP FIRST SCREEN.
  ENDMETHOD. "on_hotspot_click
ENDCLASS. "lcl_application IMPLEMENTATION
*DATA: c_application TYPE REF TO lcl_application.
START-OF-SELECTION.
  CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '100'.
  SET TITLEBAR '100'.
  repid = sy-repid.
  dynnr = sy-dynnr.
*Test the function
* create container for drawer
  IF cc_drawer IS INITIAL.
    CREATE OBJECT cc_drawer
    EXPORTING
    repid = repid
    dynnr = dynnr
    extension = 300.
  ENDIF.
* create drawer
  IF c_drawer IS INITIAL.
    l_caption-caption = 'Sales and Distribution Reports'(004)."text-004.
    l_caption-icon = icon_wizard.
    APPEND l_caption TO lt_captions.
    l_caption-caption = 'Material Management Reports'(005). "text-005.
    l_caption-icon = space.
    APPEND l_caption TO lt_captions.
    l_caption-caption = 'Production Planning Reports'(006). "text-006.
    l_caption-icon = icon_display_text.
    APPEND l_caption TO lt_captions.
    l_caption-caption = 'Finance and Controlling Reports'(007)."text-007.
    l_caption-icon = icon_display_text.
    APPEND l_caption TO lt_captions.
    l_caption-caption = 'All custom Reports'(008).          "text-008.
    l_caption-icon = icon_display_text.
    APPEND l_caption TO lt_captions.
* Create cl_gui_container_bar
    CREATE OBJECT c_drawer
    EXPORTING
    parent = cc_drawer
    captions = lt_captions
    EXCEPTIONS
    max_number_of_cells_exceeded = 1
    OTHERS = 2.
    IF sy-subrc <> 0.
      SET SCREEN 0. LEAVE SCREEN.
    ENDIF.
* Create cl_gui_container_bar
    IF c_application IS INITIAL.
      CREATE OBJECT c_application.
    ENDIF.
    SET HANDLER c_application->on_click FOR c_drawer.
    CALL METHOD c_drawer->set_active
      EXPORTING
        id = 1.
  ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  IF ok_code = 'EX'.
    CALL METHOD c_drawer->free.
    CALL METHOD cc_drawer->free.
    SET SCREEN 0. LEAVE SCREEN.
  ELSEIF ok_code = 'HI'.
    CALL METHOD c_drawer->set_active
      EXPORTING
        id = id.
  ELSEIF ok_code = 'ENTE'.
    CALL METHOD c_drawer->set_active
      EXPORTING
        id = id.
  ENDIF.
ENDMODULE. " USER_COMMAND_0100 INPUT

2 新建SCreen 100
并在屏幕上建立三个空间
2.1  1个文本控件,输入显示文本"vertical_tab_control" 和控件任何名称
2.2  1个文本输入控件,控件名称为"ID"
2.3  1个按钮控件, 输入显示文本"Set tab" 和控件任何名称,功能码为"HI"
2.4  设置屏幕功能码返回字段为"OK_CODE"
2.5  设置screen module
PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
 MODULE USER_COMMAND_0100.
并保存激活

3 新建title 100
输入任何文本

4新建Status 100
 设置标准工具条按钮对应的功能码: "ENTE" 和"EX"

原文地址:https://www.cnblogs.com/xiaomaohai/p/6157335.html