ABAP dialog tabstrip 的Demo

1 第一步

新建程序

 2 第二步新建屏幕9000

 3 第三步点击图示带模板生成

4 命名直接下一步 

5 第五步几个屏幕页签填几个

 6 本例子定义四个

 7 一直下一步直至完成如图示

 8 激活屏幕 激活程序

会生成下面代码程序

*&---------------------------------------------------------------------*
*& Report ZTEST_10
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_10.



START-OF-SELECTION.

  CALL SCREEN 9000.

*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TEST'
  CONSTANTS: BEGIN OF c_test,
               tab1 LIKE sy-ucomm VALUE 'TEST_FC1',
               tab2 LIKE sy-ucomm VALUE 'TEST_FC2',
               tab3 LIKE sy-ucomm VALUE 'TEST_FC3',
               tab4 LIKE sy-ucomm VALUE 'TEST_FC4',
             END OF c_test.
*&SPWIZARD: DATA FOR TABSTRIP 'TEST'
  CONTROLS:  test TYPE TABSTRIP.
  DATA: BEGIN OF g_test,
          subscreen   LIKE sy-dynnr,
          prog        LIKE sy-repid VALUE 'ZTEST_10',
          pressed_tab LIKE sy-ucomm VALUE c_test-tab1,
        END OF g_test.
  DATA:      ok_code LIKE sy-ucomm.


*&SPWIZARD: OUTPUT MODULE FOR TS 'TEST'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE test_active_tab_set OUTPUT.
  test-activetab = g_test-pressed_tab.
  CASE g_test-pressed_tab.
    WHEN c_test-tab1.
      g_test-subscreen = '9001'.
    WHEN c_test-tab2.
      g_test-subscreen = '9002'.
    WHEN c_test-tab3.
      g_test-subscreen = '9003'.
    WHEN c_test-tab4.
      g_test-subscreen = '9004'.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TS 'TEST'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE test_active_tab_get INPUT.
  ok_code = sy-ucomm.
  CASE ok_code.
    WHEN c_test-tab1.
      g_test-pressed_tab = c_test-tab1.
    WHEN c_test-tab2.
      g_test-pressed_tab = c_test-tab2.
    WHEN c_test-tab3.
      g_test-pressed_tab = c_test-tab3.
    WHEN c_test-tab4.
      g_test-pressed_tab = c_test-tab4.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

对代码定义变量改变一下其位置

如下图所示

*&---------------------------------------------------------------------*
*& Report ZTEST_10
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest_10.
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TEST'
CONSTANTS: BEGIN OF c_test,
             tab1 LIKE sy-ucomm VALUE 'TEST_FC1',
             tab2 LIKE sy-ucomm VALUE 'TEST_FC2',
             tab3 LIKE sy-ucomm VALUE 'TEST_FC3',
             tab4 LIKE sy-ucomm VALUE 'TEST_FC4',
           END OF c_test.
*&SPWIZARD: DATA FOR TABSTRIP 'TEST'
CONTROLS:  test TYPE TABSTRIP.
DATA: BEGIN OF g_test,
        subscreen   LIKE sy-dynnr,
        prog        LIKE sy-repid VALUE 'ZTEST_10',
        pressed_tab LIKE sy-ucomm VALUE c_test-tab1,
      END OF g_test.
DATA:      ok_code LIKE sy-ucomm.


START-OF-SELECTION.

  CALL SCREEN 9000.




*&SPWIZARD: OUTPUT MODULE FOR TS 'TEST'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE test_active_tab_set OUTPUT.
  test-activetab = g_test-pressed_tab.
  CASE g_test-pressed_tab.
    WHEN c_test-tab1.
      g_test-subscreen = '9001'.
    WHEN c_test-tab2.
      g_test-subscreen = '9002'.
    WHEN c_test-tab3.
      g_test-subscreen = '9003'.
    WHEN c_test-tab4.
      g_test-subscreen = '9004'.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TS 'TEST'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE test_active_tab_get INPUT.
  ok_code = sy-ucomm.
  CASE ok_code.
    WHEN c_test-tab1.
      g_test-pressed_tab = c_test-tab1.
    WHEN c_test-tab2.
      g_test-pressed_tab = c_test-tab2.
    WHEN c_test-tab3.
      g_test-pressed_tab = c_test-tab3.
    WHEN c_test-tab4.
      g_test-pressed_tab = c_test-tab4.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

第九步 分别对屏幕 9001 9002 9003 9004   绘制 容器区域并命名

后面ALV创建 需要用到 container_name

生成的屏幕是下图所示

 点击图示并点删除

 删完后如图示

然后绘制容器区域 点击图示按钮

绘画完成之后如图示 命名 CUST1

 屏幕9002 9003 9004 如上依次操作,命名为CUST2 CUST3 CUST4

第十步  对程序进行改造添加自定义逻辑

添加自定义按钮 退出操作 

MODULE status_9000 OUTPUT.
  SET PF-STATUS 'ZZZZ'.
* SET TITLEBAR 'xxx'.
ENDMODULE.

状态栏如下图

然后在生成的MODULE ztest_09_active_tab_get

添加如下代码

  WHEN '&F03' OR '&F15' OR '&F12'.

      LEAVE TO SCREEN  0.

 11 第十一步 全局ALV变量 table 变量

DATA: gt_sflight TYPE STANDARD TABLE OF sflight.

DATA:go_alv_grid01 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid02 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid03 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid04 TYPE REF TO cl_gui_alv_grid.

DATA:go_alv_container01 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container02 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container03 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container04 TYPE REF TO cl_gui_custom_container.

然后对图示module 添加处理逻辑

改造添加的代码如图示

 代码如下:

 DATA:lv_code            TYPE sy-ucomm.
  lv_code = ok_code.
  CLEAR ok_code.
  CASE lv_code.
    WHEN c_ztest_09-tab1.

      g_ztest_09-pressed_tab = c_ztest_09-tab1.


      PERFORM display_alv  USING  go_alv_grid01  go_alv_container01 'CUST1'.

    WHEN c_ztest_09-tab2.

      g_ztest_09-pressed_tab = c_ztest_09-tab2.

      PERFORM display_alv  USING  go_alv_grid02  go_alv_container02 'CUST2'.

    WHEN c_ztest_09-tab3.

      g_ztest_09-pressed_tab = c_ztest_09-tab3.

      PERFORM display_alv  USING  go_alv_grid03  go_alv_container03 'CUST3'.

    WHEN c_ztest_09-tab4.

      g_ztest_09-pressed_tab = c_ztest_09-tab4.

      PERFORM display_alv  USING  go_alv_grid04  go_alv_container04 'CUST4'.

    WHEN '&F03' OR '&F15' OR '&F12'.

      LEAVE TO SCREEN  0.

    WHEN OTHERS.

*&SPWIZARD:      DO NOTHING
  ENDCASE.

Form 代码如下

FORM display_alv  USING    io_alv_grid      TYPE REF TO cl_gui_alv_grid
                           io_alv_container TYPE REF TO cl_gui_custom_container
                           iv_container_name  TYPE char30.
  DATA: ls_stable TYPE lvc_s_stbl.
  ls_stable-row = 'X'.
  ls_stable-col = 'X'.

  SELECT * UP TO 100 ROWS
    INTO CORRESPONDING FIELDS OF TABLE @gt_sflight
  FROM sflight.

  IF io_alv_container IS INITIAL.
    CREATE OBJECT io_alv_container
      EXPORTING
        container_name              = CONV #( iv_container_name )
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.
  ENDIF.

  DATA: lv_isedit  TYPE char01,
        ls_layout  TYPE lvc_s_layo,
        ls_variant TYPE disvariant.

  IF  io_alv_grid IS INITIAL.

    CREATE OBJECT io_alv_grid
      EXPORTING
        i_parent = io_alv_container.

    "设置布局和变式
    ls_layout-cwidth_opt  = 'X'.
    ls_layout-zebra       = 'X'.
    ls_variant-report = sy-repid.
    ls_variant-handle = '1'.
    "输出alv
    CALL METHOD io_alv_grid->set_table_for_first_display
      EXPORTING
        i_structure_name              = 'SFLIGHT'
        i_save                        = 'A'
        is_layout                     = ls_layout
        is_variant                    = ls_variant
      CHANGING
        it_outtab                     = gt_sflight
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.

    CALL METHOD io_alv_grid->set_gridtitle
      EXPORTING
        i_gridtitle = TEXT-001.   " ALV Control: Title bar text

  ELSE.

    CALL METHOD io_alv_grid->refresh_table_display
      EXPORTING
        is_stable = ls_stable.
  ENDIF.

ENDFORM.

然后对屏幕9001 做初始化操作如图

 代码如下:

MODULE init_contr OUTPUT.

  PERFORM display_alv  USING  go_alv_grid01  go_alv_container01 'CUST1'.

ENDMODULE.

最后效果如图

最后一步:完整代码如下

REPORT ztest_09.
*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'ZTEST_09'
CONSTANTS: BEGIN OF c_ztest_09,
             tab1 LIKE sy-ucomm VALUE 'ZTEST_09_FC1',
             tab2 LIKE sy-ucomm VALUE 'ZTEST_09_FC2',
             tab3 LIKE sy-ucomm VALUE 'ZTEST_09_FC3',
             tab4 LIKE sy-ucomm VALUE 'ZTEST_09_FC4',
           END OF c_ztest_09.
*&SPWIZARD: DATA FOR TABSTRIP 'ZTEST_09'
CONTROLS:  ztest_09 TYPE TABSTRIP.
DATA: BEGIN OF g_ztest_09,
        subscreen   LIKE sy-dynnr,
        prog        LIKE sy-repid VALUE 'ZTEST_09',
        pressed_tab LIKE sy-ucomm VALUE c_ztest_09-tab1,
      END OF g_ztest_09.
DATA:ok_code LIKE sy-ucomm.

DATA: gt_sflight TYPE STANDARD TABLE OF sflight.

DATA:go_alv_grid01 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid02 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid03 TYPE REF TO cl_gui_alv_grid.
DATA:go_alv_grid04 TYPE REF TO cl_gui_alv_grid.

DATA:go_alv_container01 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container02 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container03 TYPE REF TO cl_gui_custom_container.
DATA:go_alv_container04 TYPE REF TO cl_gui_custom_container.



START-OF-SELECTION.

  CALL SCREEN 9000.



*&SPWIZARD: OUTPUT MODULE FOR TS 'ZTEST_09'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE ztest_09_active_tab_set OUTPUT.
  ztest_09-activetab = g_ztest_09-pressed_tab.
  CASE g_ztest_09-pressed_tab.
    WHEN c_ztest_09-tab1.
      g_ztest_09-subscreen = '9001'.
    WHEN c_ztest_09-tab2.
      g_ztest_09-subscreen = '9002'.
    WHEN c_ztest_09-tab3.
      g_ztest_09-subscreen = '9003'.
    WHEN c_ztest_09-tab4.
      g_ztest_09-subscreen = '9004'.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TS 'ZTEST_09'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE ztest_09_active_tab_get INPUT.
  DATA:lv_code            TYPE sy-ucomm.
  lv_code = ok_code.
  CLEAR ok_code.
  CASE lv_code.
    WHEN c_ztest_09-tab1.

      g_ztest_09-pressed_tab = c_ztest_09-tab1.


      PERFORM display_alv  USING  go_alv_grid01  go_alv_container01 'CUST1'.

    WHEN c_ztest_09-tab2.

      g_ztest_09-pressed_tab = c_ztest_09-tab2.

      PERFORM display_alv  USING  go_alv_grid02  go_alv_container02 'CUST2'.

    WHEN c_ztest_09-tab3.

      g_ztest_09-pressed_tab = c_ztest_09-tab3.

      PERFORM display_alv  USING  go_alv_grid03  go_alv_container03 'CUST3'.

    WHEN c_ztest_09-tab4.

      g_ztest_09-pressed_tab = c_ztest_09-tab4.

      PERFORM display_alv  USING  go_alv_grid04  go_alv_container04 'CUST4'.

    WHEN '&F03' OR '&F15' OR '&F12'.

      LEAVE TO SCREEN  0.

    WHEN OTHERS.

*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
  SET PF-STATUS 'ZZZZ'.
* SET TITLEBAR 'xxx'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form display_alv
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> G_ZTEST_09_PRESSED_TAB
*&---------------------------------------------------------------------*
FORM display_alv  USING    io_alv_grid      TYPE REF TO cl_gui_alv_grid
                           io_alv_container TYPE REF TO cl_gui_custom_container
                           iv_container_name  TYPE char30.
  DATA: ls_stable TYPE lvc_s_stbl.
  ls_stable-row = 'X'.
  ls_stable-col = 'X'.

  SELECT * UP TO 100 ROWS
    INTO CORRESPONDING FIELDS OF TABLE @gt_sflight
  FROM sflight.

  IF io_alv_container IS INITIAL.
    CREATE OBJECT io_alv_container
      EXPORTING
        container_name              = CONV #( iv_container_name )
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5
        OTHERS                      = 6.
  ENDIF.

  DATA: lv_isedit  TYPE char01,
        ls_layout  TYPE lvc_s_layo,
        ls_variant TYPE disvariant.

  IF  io_alv_grid IS INITIAL.

    CREATE OBJECT io_alv_grid
      EXPORTING
        i_parent = io_alv_container.

    "设置布局和变式
    ls_layout-cwidth_opt  = 'X'.
    ls_layout-zebra       = 'X'.
    ls_variant-report = sy-repid.
    ls_variant-handle = '1'.
    "输出alv
    CALL METHOD io_alv_grid->set_table_for_first_display
      EXPORTING
        i_structure_name              = 'SFLIGHT'
        i_save                        = 'A'
        is_layout                     = ls_layout
        is_variant                    = ls_variant
      CHANGING
        it_outtab                     = gt_sflight
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.

    CALL METHOD io_alv_grid->set_gridtitle
      EXPORTING
        i_gridtitle = TEXT-001.   " ALV Control: Title bar text

  ELSE.

    CALL METHOD io_alv_grid->refresh_table_display
      EXPORTING
        is_stable = ls_stable.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*& Module INIT_CONTR OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE init_contr OUTPUT.

  PERFORM display_alv  USING  go_alv_grid01  go_alv_container01 'CUST1'.

ENDMODULE.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值