第三代增强经典BADI-增强菜单栏和子屏幕

创建经典BADI

在这里插入图片描述

实施BADI

在这里插入图片描述

创建屏幕

在这里插入图片描述

绘制屏幕

在这里插入图片描述

定义GUI

在这里插入图片描述

运行结果

在这里插入图片描述

程序代码

*&---------------------------------------------------------------------*
*& Report  ZRP_BADITEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZRP_BADITEST.

DATA: OK_CODE LIKE SY-UCOMM.
DATA: PROGRAM TYPE PROGRAM,
      DYNPRO TYPE DYNNR.

DATA: REF_BADI_INTERFACE TYPE REF TO ZIF_EX_BADI_DEFINED.

CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  DATA  ACT_IMP_EXISTING.
  SET PF-STATUS '100'.
*  SET TITLEBAR 'xxx'.
  IF REF_BADI_INTERFACE IS INITIAL.
    CALL METHOD CL_EXITHANDLER=>GET_INSTANCE
      EXPORTING
        EXIT_NAME              = 'ZBADI_DEFINED'
                              "如果未找到BADI实现或有实现但未激活时,ref_badi_interface是否可以接受NULL(即 INITIAL)
                              "一般设置为空,在为空时,如果未实现或未激活时,还是会返回一个代理实现,这样后面程序运行不
                              "会出错,否则设置为X时,在未实现或未激活时,ref_badi_interface不会有值,则如果通过它调用
                              "方法时,会抛异常
        NULL_INSTANCE_ACCEPTED = ' '
      IMPORTING
        ACT_IMP_EXISTING       = ACT_IMP_EXISTING "实现是否已激活
      CHANGING
        INSTANCE               = REF_BADI_INTERFACE.
  ENDIF.

  IF ACT_IMP_EXISTING <> 'X'.
    MESSAGE 'BADI实现没有被激活' TYPE 'I'.
    "EXIT.
  ENDIF.

  CALL METHOD CL_EXITHANDLER=>GET_PROG_AND_DYNP_FOR_SUBSCR
    EXPORTING
      EXIT_NAME       = 'ZBADI_DEFINED' "BADI 出口名,即BADI定义名
      CALLING_DYNPRO  = '0100'"主调屏幕号
      CALLING_PROGRAM = 'ZRP_BADITEST' "主调屏幕所属程序
*     FLT_VAL         =
      SUBSCREEN_AREA  = 'SUB_SCREEN'"主调屏幕中的增强子屏幕区域名
    IMPORTING
      CALLED_DYNPRO   = DYNPRO
      CALLED_PROGRAM  = PROGRAM.
  WRITE:''.
ENDMODULE.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.

  CASE OK_CODE.
    WHEN 'FC1'.
      MESSAGE '普通菜单' TYPE 'I'.
      "只要BADI实现激活后,才会出现菜单,即可以点击,才可能走这里的逻辑
    WHEN '+BADI'.
      MESSAGE '增强菜单' TYPE 'I'.
    WHEN 'BUT1'.
      "如果BADI未实现或实现但未激活时,只要 cl_exithandler=>get_instance
      "时,设置输入参数 null_instance_accepted = ' ',ref_badi_interface
      "就会指向一个代理实现类,调用不会抛异常,但只是个空的方法,什么作用
      "也不会有
  ENDCASE.

ENDMODULE.                 " USER_COMMAND_0100  INPUT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值