SAP 自定义BADI增强点

应用场景

        标准化代码中预留客制化部分,保证代码主体完整性,可以在预留增强位置预留两种类型的增强处理,其一为标准增强类型的,增强部分代码属于增加的逻辑,其二对于部分多样化的逻辑,使用优先执行默认逻辑,有增强实施则执行增强实施中的代码逻辑。

步骤

1. 创建增强点(Enhancement Spot)

SE18输入增强点名称,点击创建

SAP 自定义BADI增强点_第1张图片

SAP 自定义BADI增强点_第2张图片

创建增强点包含的BADI定义

SAP 自定义BADI增强点_第3张图片

一般BADI定义属性如下

SAP 自定义BADI增强点_第4张图片

创建BADI定义对应的接口

SAP 自定义BADI增强点_第5张图片

定义接口方法

SAP 自定义BADI增强点_第6张图片

添加BADI过滤器

SAP 自定义BADI增强点_第7张图片

创建BADI实施示例

SAP 自定义BADI增强点_第8张图片

2. Demo测试

创建BADI实施

SAP 自定义BADI增强点_第9张图片

BADI调用程序示例

DATA: lo_badi_test                 TYPE REF TO zbadi_demo_01_a.

TRY.
    GET BADI lo_badi_test
      FILTERS
        mode = 'A'.
  CATCH cx_badi_not_implemented.
ENDTRY.

CALL BADI lo_badi_test->check.
CALL BADI lo_badi_test->data_before_save.
CALL BADI lo_badi_test->data_after_save.

测试结果

SAP 自定义BADI增强点_第10张图片

BADI实例创建属性-重用实例

实施类增加实例属性

SAP 自定义BADI增强点_第11张图片

方法中为实例属性赋值

SAP 自定义BADI增强点_第12张图片

后续方法输出该值

SAP 自定义BADI增强点_第13张图片

调用代码

DATA: lo_badi_test TYPE REF TO zbadi_demo_01_a. 

TRY.
    GET BADI lo_badi_test
      FILTERS
        mode = 'A'.
  CATCH cx_badi_not_implemented.
ENDTRY.

CALL BADI lo_badi_test->check.

TRY.
    GET BADI lo_badi_test
      FILTERS
        mode = 'A'.
  CATCH cx_badi_not_implemented.
ENDTRY.

CALL BADI lo_badi_test->data_before_save.
CALL BADI lo_badi_test->data_after_save.

BADI实例创建模式为创建实例化时,输出结果

SAP 自定义BADI增强点_第14张图片

BADI实例创建模式为重用实例时,输出结果

SAP 自定义BADI增强点_第15张图片

BADI默认调用类-在过滤器无对应实施时调用,否则不调用

调用代码如下时

SAP 自定义BADI增强点_第16张图片

输出结果

3. 可用开发对象

        CL_BADI_QUERY 查询对应BADI实施数量

        CL_EXIT_MASTER 增强实例操作

你可能感兴趣的:(ABAP,功能,操作,abap,sap)