最近开发的代码需要实现增强点,所以需要实现一个BAdI来完成这个需求。

BAdI的全称是Business Add-ins,是SAP基于面向对象编程模式提出的另一种customer exits,除了是基于面向对象的方式,BAdI还提供一系列高级的特性,可以实现多次,每种实现方式可以根据过滤条件的不同而采用不同的实现方式。本文将用实例接触如果实现一个BAdI增强点。

定义一个BAdI, 主要分三步:

1. 创建增强点。

2. 创建BAdI定义。

3. 创建BAdI接口。

1. 创建增强点Enhancement Spot

增强点是BAdI定义的封装器(Wrapper),一个增强点具有多个BAdI定义。为了创建一个增强点,执行应用以下步骤:

到事务码SE18,BadI Builder,选择Enhancement Spot按键,提供增强点的名字点击创建,如下图所示。

BAdI实现全过程实录_复选框

2. 在创建增强点的界面,提供描述信息,在technology下拉列表选择BAdI定义,在Composite enhancement spot字段可以选择一个composite enhancement spot名称,这个是为了把关联的增强点组合在一起的一个简便方法。这个信息只是个语义方面的概念,相当于包的概念。

3. 点击OK,继续。

BAdI实现全过程实录_面向对象_02

然后我们进入增强点修改页面,包含四个标签页:

在ENH. SPOT ELEMENT DEFINITION标签页,如图所示,点击创建BAdI按钮。

BAdI实现全过程实录_复选框_03

然后出现下面的对话框,输入BAdI的名称和描述信息。

BAdI实现全过程实录_面向对象_04

如下图是BAdI定义的页面,一旦选择BAdI定义,会有一些属性的设置。

BAdI实现全过程实录_标签页_05

在Usability部分,你可以选择或者取消multiple use复选框,这取决于你的是否有多个BAdI实现代码,如果有多个实现,那么选择这个复选框,那么通过filter来判断哪个实现代码被调用。在Instance creation mode部分,可以选择是新创建一个实例,还是重用实例。如果选择了Context specific实例,那么实例通过context来判断,如果是同一个context,那么会使用同一个BAdI实例。指定的context类需要实现接口:IF_BADI_CONTEXT。

Fallback class选项可以让你实现一个fallback类,如果没有激活状态的BAdI实现,那么会调用这个fallback class,或者选择了multiple use选项,而且filter没有满足任何条件,那么也会调用这个fallback class。

可以在BAdI定义的名字上右键,选择create filter,来创建一个filter,如下图。

BAdI实现全过程实录_复选框_06

创建接口

双击Interface,来定义BAdI的接口,如下图:

BAdI实现全过程实录_标签页_07

弹出窗口填写接口名称

BAdI实现全过程实录_复选框_08

然后会跳转到class builder进行接口方法体的定义。

实现BAdI

使用事务码SE19来实现BAdI,或者在BAdI定义名称右键选择创建BAdI实现,然后会出现一个弹出窗口。

BAdI实现全过程实录_复选框_09

输入信息,然后弹出以下窗口,输入实现类的名称。

BAdI实现全过程实录_面向对象_10

如下图双击Implementing Class来看接口的方法,然后双击方法,来实现这个方法。

BAdI实现全过程实录_复选框_11

在SE24实现method,然后激活方法,会看到如下信息。

BAdI实现全过程实录_面向对象_12

BAdI创建成功。根据需要可以编写filter和filter的筛选逻辑,还有实现fallback class。

然后就是调用BAdI的实例了,如下是调用的代码:

BAdI实现全过程实录_标签页_13

抛砖引玉,希望你有机会创建自己的BAdI的时候,参考此文。谢谢。


BAdI实现全过程实录_标签页_14