ABAP_自定义屏幕08—选项卡控件(标签页)

ABAP_自定义屏幕08—选项卡控件

1、选项卡示例

如MM03中查看物料主数据的标签页(即本文的选项卡)

在这里插入图片描述

2、选项卡控件组成

选项卡控件包括:选项卡按钮、子屏幕区域(区域中包含子屏幕)

选项卡控件都放在主屏幕中,以下是一个包含选项卡控件的程序的完整组成图

在这里插入图片描述

3、两种实现方式

当多个选项卡控件(标签页)时,有下面两种实现方式

3.1 N个标签页 => (n个)子屏幕区域

3.1 N个标签页 => (同一个)子屏幕区域

关键点:是否有共用同一个子屏幕区域

4、单独子屏幕区域-非向导(不常用)

3.41 创建主屏幕

以下是初始代码

REPORT  zcsdn_lion_custom081.

DATA ok_code LIKE sy-ucomm.
DATA my_code LIKE sy-ucomm.

START-OF-SELECTION.
  CALL SCREEN '2000'.

*----------- 绑定工具栏、标题------------------------*
MODULE status_2000 OUTPUT.
  SET PF-STATUS 'TOOLS'.
  SET TITLEBAR 'TITLE'.

ENDMODULE.                 " STATUS_2000  OUTPUT

*------ PAI ------------*
MODULE user_command_2000 INPUT.
  my_code = ok_code.
  CLEAR ok_code.

  CASE my_code.
    WHEN '&BACK' OR '&EXIT'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_2000  INPUT

不要忘了主屏幕的OK_CODE

3.42 创建主屏幕的选项卡

在这里插入图片描述

3.43 选项卡设置

在这里插入图片描述
在这里插入图片描述

每个选项卡控件(标签页)都按上面设置

在这里插入图片描述
在这里插入图片描述

当功能型=空,每个TAB的功能代码必须相同(否则点击tab页不会跳转)

在这里插入图片描述

在这里插入图片描述

当选项卡控件都没有红色才表示属性完善,否则继续完善属性,直到无红色

在这里插入图片描述

3.44 新增子屏幕

几个tab就有几个子屏幕
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.45 将子屏幕加载到子屏幕区域

在主屏幕的PBO中添加下面的代码

PROCESS BEFORE OUTPUT.
  MODULE STATUS_2000.

*&--------------------------------------------*
*&      子屏幕加载到子屏幕区域
*&--------------------------------------------*
*       TAB1_REF1:子屏幕区域1.
*       TAB2_REF1:子屏幕区域2.
*       SY-REPID:当前程序
*----------------------------------------------*
  CALL SUBSCREEN TAB1_REF1 INCLUDING SY-REPID '2001'.
  CALL SUBSCREEN TAB2_REF1 INCLUDING SY-REPID '2002'.

3.46 运行结果

在这里插入图片描述

3.47 补充说明

3.471、取消折叠效果

如不需右上角的折叠效果,tab功能型=P + 功能代码命名不要一样(上面设置的功能代码都是一样的=&TAB1)

功能型=P:表示不触发主屏幕的PAI

在这里插入图片描述
在这里插入图片描述

如设置功能型=P后,还有折叠效果,请尝试把选项卡控件长宽高往大设置

3.472 子屏幕触发事件

如需触发子屏幕的事件,需做两点

1、在子屏幕的PAI添加以下代码

PROCESS AFTER INPUT.
 MODULE USER_COMMAND_2001.

2、在主屏幕PAI调用该子屏幕区域

PROCESS AFTER INPUT.
  MODULE USER_COMMAND_2000.
  CALL SUBSCREEN TAB1_REF1.

5、共用子屏幕区域-非向导(不常用)

按上面设置,区别有以下两点

5.1 设置TAB共享子屏幕

TAB2没有单独子屏幕区域,和TAB1共用同一个子屏幕区域:TAB1_REF1

在这里插入图片描述

5.2 每个TAB的功能型=空

在这里插入图片描述

5.3 在主屏幕PBO、PAI调用共用子屏幕区域

新增代码就是此次加入的代码

PROCESS BEFORE OUTPUT.
  MODULE STATUS_2000.

* 新增代码,SYNNR_NUM:子屏幕变量,需在主程序中定义.
  CALL SUBSCREEN TAB1_REF1 INCLUDING SY-REPID SYNNR_NUM.

PROCESS AFTER INPUT.
  MODULE USER_COMMAND_2000.
    
*新增代码
  CALL SUBSCREEN TAB1_REF1 .

5.4 在主屏幕PAI的Medule中添加代码

*此变量在主程序开始定义
DATA synnr_num LIKE sy-dynnr VALUE '2001'.

*这是主屏幕2000PAI的Medule
MODULE user_command_2000 INPUT.
  my_code = ok_code.
  CLEAR ok_code.

  CASE my_code.
    WHEN '&BACK' OR '&EXIT'.
      LEAVE TO SCREEN 0.
      
*----   新增代码    Start----
    WHEN '&TAB1'.
      synnr_num = '2001'.
      tab_main-activetab = my_code.
    WHEN '&TAB2'.
      synnr_num = '2002'.
      tab_main-activetab = my_code.
*----   新增代码    ENd----
      
  ENDCASE.

5.5 运行效果

在这里插入图片描述

6、向导方式创建-常用

1、新增主屏幕2000,选中向导式子屏幕

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

此时主程序已自动生成相关代码

在这里插入图片描述

在主程序中添加代码

CALL SCREEN '2000'.

运行效果

在这里插入图片描述

6.1 主程序生成代码

REPORT  ZCSDN_LION_CUSTOM083.

*&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TAB_MAIN'
CONSTANTS: BEGIN OF C_TAB_MAIN,
             TAB1 LIKE SY-UCOMM VALUE 'TAB1',
             TAB2 LIKE SY-UCOMM VALUE 'TAB2',
             TAB3 LIKE SY-UCOMM VALUE 'TAB3',
           END OF C_TAB_MAIN.
*&SPWIZARD: DATA FOR TABSTRIP 'TAB_MAIN'
CONTROLS:  TAB_MAIN TYPE TABSTRIP.
DATA:      BEGIN OF G_TAB_MAIN,
             SUBSCREEN   LIKE SY-DYNNR,
             PROG        LIKE SY-REPID VALUE 'ZCSDN_LION_CUSTOM083',
             PRESSED_TAB LIKE SY-UCOMM VALUE C_TAB_MAIN-TAB1,
           END OF G_TAB_MAIN.
DATA:      OK_CODE LIKE SY-UCOMM.




*------     这是我添加的  ----------
CALL SCREEN '2000'.




*&SPWIZARD: OUTPUT MODULE FOR TS 'TAB_MAIN'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: SETS ACTIVE TAB
MODULE TAB_MAIN_ACTIVE_TAB_SET OUTPUT.
  TAB_MAIN-ACTIVETAB = G_TAB_MAIN-PRESSED_TAB.
  CASE G_TAB_MAIN-PRESSED_TAB.
    WHEN C_TAB_MAIN-TAB1.
      G_TAB_MAIN-SUBSCREEN = '2001'.
    WHEN C_TAB_MAIN-TAB2.
      G_TAB_MAIN-SUBSCREEN = '2002'.
    WHEN C_TAB_MAIN-TAB3.
      G_TAB_MAIN-SUBSCREEN = '2003'.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

*&SPWIZARD: INPUT MODULE FOR TS 'TAB_MAIN'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GETS ACTIVE TAB
MODULE TAB_MAIN_ACTIVE_TAB_GET INPUT.
  OK_CODE = SY-UCOMM.
  CASE OK_CODE.
    WHEN C_TAB_MAIN-TAB1.
      G_TAB_MAIN-PRESSED_TAB = C_TAB_MAIN-TAB1.
    WHEN C_TAB_MAIN-TAB2.
      G_TAB_MAIN-PRESSED_TAB = C_TAB_MAIN-TAB2.
    WHEN C_TAB_MAIN-TAB3.
      G_TAB_MAIN-PRESSED_TAB = C_TAB_MAIN-TAB3.
    WHEN OTHERS.
*&SPWIZARD:      DO NOTHING
  ENDCASE.
ENDMODULE.

7、补充说明

7.1 尽量使用第6点向导方式创建

7.2 如需触发子屏幕的事件,需做两点

1、在子屏幕的PAI添加以下代码

PROCESS AFTER INPUT.
 MODULE USER_COMMAND_2001.

2、在主屏幕PAI调用该子屏幕区域

PROCESS AFTER INPUT.
  MODULE USER_COMMAND_2000.
  CALL SUBSCREEN TAB1_REF1.
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值