SAP - BAdI Concept
SAP - BAdI Concept
BAdI Concept..........................................................................................................................................................2
Architecture...............................................................................................................................................................2
Definition and Implementation............................................................................................................................2
Object Types Involved.........................................................................................................................................3
Definition of BAdIs....................................................................................................................................................4
Use.........................................................................................................................................................................4
Instance Generation Mode......................................................................................................................................5
Definition................................................................................................................................................................5
Use.........................................................................................................................................................................5
Example................................................................................................................................................................. 5
The Multiple Use Property.......................................................................................................................................6
Definition................................................................................................................................................................6
Use.........................................................................................................................................................................6
Function Code and Screen Enhancements..........................................................................................................7
Use.........................................................................................................................................................................7
Features.................................................................................................................................................................7
BAdIs Embedded in the Enhancement Framework.............................................................................................8
Use.........................................................................................................................................................................8
The Problem with Large BAdI Interfaces...............................................................................................................9
The Problem..........................................................................................................................................................9
The Solution..........................................................................................................................................................9
Enhancement Spots and Enhancement Implementation............................................................................10
BAdIs – a Typical Use Case.................................................................................................................................13
Task...................................................................................................................................................................... 14
Execution.............................................................................................................................................................14
Explanation..........................................................................................................................................................14
Single-Use BAdI.....................................................................................................................................................15
Use Case 1: Single Customer Enhancement.................................................................................................15
Use Case 2: Multiple Customer Enhancements.............................................................................................15
Use Case 3: Use Existing Coding As Default.................................................................................................15
Multiple-Use BAdI...................................................................................................................................................16
Use Case 1: Multiple-Use BAdI........................................................................................................................16
Use Case 2: BAdI With Optional Functionality...............................................................................................16
Use Case 2: Encapsulating Data for Two BAdIs Within One Class............................................................17
Use Case 3: Encapsulating Data for Two BAdIs Within Several Compilation Units..................................18
Use Case 4: Inherit From a Default Class.......................................................................................................18
How to Use Filters..................................................................................................................................................18
Step-By-Step Examples with BAdIs.....................................................................................................................21
Building Your First BAdI.........................................................................................................................................21
Use Case.............................................................................................................................................................21
Building an Enhancement Spot........................................................................................................................21
Creating a BAdI...................................................................................................................................................21
The BAdI Interface..............................................................................................................................................22
Writing the Source Code....................................................................................................................................24
A Fallback Class.................................................................................................................................................24
How to Implement a BAdI......................................................................................................................................25
Create a Container for the Implementation.....................................................................................................25
The Implementing Class....................................................................................................................................27
Creating a Second BAdI Implementation........................................................................................................28
How to Use Filters..................................................................................................................................................29
Migrating Classic BAdIs.....................................................................................................................................31
Differences Between Classic and New BAdIs....................................................................................................31
Migrating BAdIs.......................................................................................................................................................32
Tips and Tricks........................................................................................................................................................32
Organization of BAdIs........................................................................................................................................32
Contexts for BAdIs..............................................................................................................................................32
Example...............................................................................................................................................................33
Working with Enhancements.............................................................................................................................33
Enhancement Builder..........................................................................................................................................34
BAdI Concept
A BAdI within the Enhancement Framework is an enhancement option or an anchor point for an
object plug-in. A BAdI is an explicit enhancement option, which means that BAdIs are not
provided by the framework and have to be defined explicitly by the developer.
There are two different roles in the process of providing and implementing enhancement
options:
● (Enhancement) option provider
The person who builds an enhancement option (functions like a “hook” to which others can
attach something). In general, the option provider is identical to the developer of a
development object who has to offer an explicit enhancement option (the so-called basic
development object). Typically, the developer of the basic development object is someone
working in the SAP core who anticipates that a customer or an industry solution might
want to add some code at a particular point. In this case, the option provider creates both
the development object to be enhanced and defines an enhancement option.
● Implementer
The developer who implements an enhancement option. The implementer is not interested
in the details of an enhancement option, he or she just needs to know how to implement it.
The option provider has control on what the implementer does by defining the interface and
confining the implementer to the class that implements the BAdI.
The BAdI implementer cannot interfere with the basic program. It is assured that a BAdI
implementation can only change the parameters that were handed over to the BAdI. The
implementation of a method has a context of its own and the variables of the development object
using the BAdI are not even visible from inside the BAdI implementation.
Architecture
Definition and Implementation
In the definitions for the Enhancement Framework, BAdIs are element definitions for
enhancement spots. They are processed directly in the Enhancement Builder.
BAdIs are the basis for object plug-ins that serve to enhance the functions in ABAP programs
without having to make modifications. BAdIs enable the creation of enhancement options in the
form of interfaces that can be appropriately implemented later on in the same system or an
external system.
As with all enhancements, BAdIs make a distinction between the definition and individual
implementations. The definition of a BAdI is usually created by SAP and, together with its
calling points in ABAP programs, it forms explicit enhancement options in such programs.
The definition of a BAdI contains a BAdI interface, a set of selection filters, and some settings
that affect runtime behaviour later on. A BAdI interface forms the entire interface or part of the
interface of an object plug-in.
A BAdI implementation is the term used in the Enhancement Framework for an enhancement
implementation element. A BAdI implementation consists of a BAdI implementation class that
implements the BAdI interface, and of a condition imposed on the filters specified in the BAdI
definition. These can be used to select the BAdI implementation.
The calling points of a BAdI are defined through the ABAP statements GET BADIand CALL
BADI, which – in the definition world of the Enhancement Framework – form the enhancement
spot element calls of the explicit enhancement option.
For more information about BAdI definitions, see Definition of BAdIs.
Object Types Involved
In keeping with design patterns, the command GET BADI corresponds to the call for an
abstract factory. It returns – depending on the filter values and a context – an instance of a proxy
object. The static constellation of the interfaces and classes involved is displayed in the
following UML diagram.
The BAdI has the name badi_name. The class shown here with the same name is a BAdI class,
which is created during the definition of a BAdI in the Enhancement Builder as the final
subclass of the abstract global class cl_badi_base. The BAdI class is the template for the BAdI
object, and does not play any visible role (with the exception of the namespace).
The name of the BAdI interface for which badi_name is defined is if_intf and contains the
predefined tag interface if_badi_interface. The BAdI interface must not contain any variable
attributes. If the BAdI can be used on a multiple basis, it must not contain any methods
with exporting or returning parameters. The methods of a BAdI interface are called BAdI
methods.
The BAdI implementation classes cl_imp1, ... , cl_impn also implement the BAdI
interface if_intf. The abstract class cl_abstract_imp displayed here is only for demonstration
purposes since, in contrast to the classical BAdIs, there are no limitations with regard to the
classes to be implemented provided they implement the BAdI interface only. A BAdI
implementation class can even implement two different BAdI interfaces. This makes it possible
when defining BAdIs, for example, to create partial implementations in the form of (abstract)
BAdI implementation classes from which the actual BAdI implementation classes inherit.
The BAdI class is not a BAdI implementation class and does not really implement the
BAdI interface, but merely contains references to the actual object plug-ins (objects
of BAdI implementation classes).
The architecture of BAdIs can be viewed also in relation to another design pattern,
known as the parameterized event handler. Here, the BAdI implementation classes
play the role ofobservers that automatically register at GET BADI for the
appropriate BAdI object. The BAdI object takes on the role of subject, and method
calls with CALL BADI correspond to a N
Definition of BAdIs
Use
When you define a BAdI, you must specify a name, a BAdI interface as the interface for the
enhancement option, and the required filters.
The name of a BAdI is in the same namespace as data types from the ABAP Dictionary, global
classes, or interfaces. It is recommended that you use suitable prefixes, such as “BADI_”.
A filter consists of a filter name and a data type (integer, string, and so on).
In addition, you also define BAdI properties that are relevant at the runtime of a program with
the appropriate statements GET BADI and CALL BADI. For more information, see Instance
Generation Mode and Multiple Use.
Other properties that can be assigned to a BAdI include:
● An optional fallback BAdI implementation class. This option is used if no BAdI
implementation with suitable filter conditions and no standard implementation is found.
● Whether the BAdI is internal or not.
An internal BAdI must only be implemented by SAP and is not visible outside of
SAP.
● Whether the BAdI is a function code or screen enhancement.
A BAdI that is defined as a function code enhancement must not have any filters, must not be
defined for multiple use, or assigned to any switch. It may contain methods that are independent
of the actual function code enhancement.
A BAdI that is defined as a screen enhancement must be defined in the instance generation
mode for the reused instantiation and must not be defined for multiple use. It may contain BAdI
methods that can be used to fill or evaluate the screen fields of the respective subscreens.
If object plug-ins are to get reusable data, only specifications 1 and 2 are allowed.
Example
The figures below show the situation for context-free BAdIs, after two statements following
each other:
GET BADI bd1.
GET BADI bd2.
The upper rectangles represent the BAdI objects. The broken-line arrows show which object
plug-ins are referenced by the BAdI objects, whereby the case of two suitable BAdI
implementation classes cl_imp1 and cl_imp2 is demonstrated.
Figure 1 shows the newly created instantiation. Each time a BAdI object is created, new object
plug-ins are created – first imp1 and imp2, then imp3 and imp4.
Figure 1
Figure 2 shows the reused instantiation. For each BAdI implementation class, only one instance
is created. All BAdI objects reference the same instance, irrespective of where (in internal
mode) and how the BAdI object is called.
Figure 2
A BAdI is always assigned to the same package, like the enhancement spot, to which it
belongs.
Example
The structuring features of BAdIs in enhancement spots can be of a technical or a subject nature.
If, in the definition of several BAdIs, you have the provision that they are to be used in the
same context (this is a feature known only by the person who defines the BAdIs), they must be
used by the same simple enhancement spot.
From a subject point of view, all BAdIs must then be grouped together by affiliation to
functional units – for example, payroll – in combined enhancement spots.
Assume that in many solutions only the first three methods are needed, the others are known as
optional methods, which are only used by some customers in their system. Nevertheless, an
implementation of this BAdI has to implement all methods. A common result will be that the
first three methods get a real implementation while the rest get an empty implementation.
Now you are faced with a problem. When the BAdI definition is modified for some reason or
when there is an upgrade, in the SPAU_ENH you have to touch also the 47 methods that are
empty. So you spend your time on some work that is not necessary in any way.
The Solution
The solution to this problem is not to put the methods you need and optional methods in one
BAdI, but to tailor small BAdIs containing only the methods that are needed by a group of
customers. Of course, this does not mean you should put all methods you need in one large
BAdI if you need them for one IS. When designing a BAdI, you should adhere to the principles
of good object-oriented design. Do not define gigantic BAdIs, but small ones tailored for
definite problems or even parts of a problem. In any case, keep your BAdIs small, not as a
means in itself, but to have manageable BAdIs that do not force those who implement the BAdI
to write empty implementations. The figure below shows how you separate the methods:
When implementing a BAdI, you have to implement all its methods. This is a
consequence of the fact that a BAdI defines an interface, and interfaces have to be
implemented completely. Syntactically, there is no such thing as partially
implementing an interface.
How to Group the Small BAdIs
When designing small BAdIs, you can face a problem caused by the fact that the BAdIs are
small. Of course, you will get a higher number of BAdIs and a huge mass of BAdIs in the same
namespace, and this could soon lead to a disorganized mess.
To prevent this, you need containers in which you put the BAdIs. And this is, where the (simple)
enhancement spot is used. As for all the other enhancement types, this spot can be used as a
container for BAdI definitions. Of course, the BAdIs are still in the same namespace, but they
are structured in larger units, that is, the enhancement spots. Therefore they are easier to handle.
The following figure shows how you use containers:
Enhancement Spots and Enhancement Implementation
● The use of implementations that serve as containers.
On the right side of the figure below you have (simple) enhancement implementations
which serve as containers for the BAdI implementations.
The figure below presents a resulting picture again, which now is no longer simplified.
The two yellow lines show something which might not happen often. Of course, you can
have many implementations of one BAdI in one (simple) enhancement implementation.
You need this if you need different classes as implementations that can be switched
together and, of course, your BAdI can be so defined that it can have multiple instances.
In case you want to cover different filter values with different implementations using the
same class, it is better to take only one implementation and to use a disjunction of filter
values for this implementation.
In most cases, you have only one BAdI implementation in one (simple) enhancement
implementation, if you want to switch the implementation separately. Just think of the
cases in which you have a BAdI which must have exactly one implementation (a single use
BAdI).
The figure below illustrates the fact that a (simple) enhancement implementation belongs
uniquely to a (simple) enhancement spot. One (simple) enhancement implementation
cannot contain BAdI implementations that are assigned to different (simple) enhancement
spots.
Single-Use BAdI
Use Case 1: Single Customer Enhancement
The normal customer enhancement is a BAdI without a filter which is called once. No state has
to be kept, so you can use static methods. Such a BAdI is defined in the core or an industry
solution and is implemented by a customer.
If the BAdI is a single-use BAdI, that is, it requires exactly one implementation, a default class
must be provided by SAP. Otherwise, the GET BADI will raise an exception if this statement is
executed before the customer has inserted his or her implementation.
You have an existing report with procedural coding. You want to use some parts of
this report that cannot easily be transformed into a class.
Let the already existing code cover the default in case no BAdI implementation fits.
You accomplish this by using a TRY-ENDTRY construct and putting the procedural
code you want to reuse in the CATCH construct:
TRY
GET BADI
CALL BADI
CATCH cx_badi_multiply_implemented.
*Go somewhere up in the call hierarchy
CATCH CX_BADI_NOT_IMPLEMENTED.
*Your code that must be reused
ENDTRY
Multiple-Use BAdI
Use Case 1: Multiple-Use BAdI
You use a multiple-use BAdI with static methods if no data is kept and many implementations
make sense. For example, you can write defined results specified in the interface to different
destinations.
badi_additional_export
Export the book entry to additional destination(s) at the end of a book entry.
*Some_Code
*End of program
CALL BADI badi_additional->export
The result of this example is:
● Implementation1: Export to XML file
● Implementation2: Export to sequential file
● Implementation3: Export to external file
Use Case 2: BAdI With Optional Functionality
In the example figure below, the methods method_a and method_b have to be put into one
BAdI. All the optional methods are put in another BAdI:
Never put
mandatory and optional methods for a given solution or customer in one BAdI.
A large number of empty implementations indicates that your BAdI is too large.
If there are many empty methods that are often not implemented, divide the BAdI.
A design which leads to empty implementations of methods is a poor design: You will
have unnecessary work with empty methods if there are any changes to the BAdI.
Instead of leaving optional methods empty, define them in different BAdIs.
Adding new smaller BAdIs instead of modifying large BAdIs to reduce the effort for
implementation during import or upgrade.
Use Case 2: Encapsulating Data for Two BAdIs Within One Class
Sometimes you have two BAdIs that have to work on the same encapsulated data. An example
can be a BAdI that manages some data and writes it to the database and a BAdI that reads this
data.
If you have a class that implements the interfaces of both BAdIs, this class is selected as the
implementation for both selections. If you pass the same context object in both cases, you get
the same implementation because the class mentioned implements both interfaces. Because of
the same context object you get also the same the same instance.
When modifying your example you do not take into account the differentiation
between the BAdI provider and the implementer. In real life it is the BAdI provider
who defines a BAdI with a filter or adds a filter to an existing BAdI. It is also part of
this role to use the filter condition to select the respective BAdI implementation in the
ABAP code. It is the implementer who determines the filter value(s) or an interval for
one or many BAdI implementations. For more information about the different roles,
see BAdIs Concept.
1. Navigate to your enhancement spot and open the Enh. Spot Element Definition tab that
shows a list of all the enhancement elements of the spot.
2. Switch to a change mode, select your BAdI in the list, and choose the Filter icon from the
toolbar above.
The following dialog appears, where you fill in the corresponding fields:
respective BAdI implementation by double-clicking the respective row in the table of BAdI
implementations.
5. Switch to change mode, double -click the triangle in front of the BAdI implementation in the tree and then
double-click on the filter icon below.
6. On the next screen, select the Combination icon.
7. Select Country as the filter and confirm
8. Double-click on the row below Combination 1.
9. Activate
the (simple) enhancement implementation and navigate back to the spot.
The other implementation, that is the one for USA, also needs the respective filter value. So you go to the respective
(simple) enhancement implementation and change the BAdI implementation in the same way as you just did above.
The respective filter value for this country is 'US'.
10. Return to your program and adapt it to the modified BAdI. Running the syntax check shows you that you need
to have a filter parameter in the GET BADI command if the BAdI you try to instantiate is defined with a filter. The
required addition to the GET BADI command is FILTERS. It is after this keyword that you insert the name of the
BAdI filter and a value the filter is compared to. You also have to take care that an appropriate value can be passed to
the GET BADI routine:
REPORT Z_DEMO_ENH.
parameters: ctry(2) type c.
DATA: handle TYPE REF TO z_badi_calc_vat,
sum TYPE p,
vat TYPE p,
percent TYPE p.
sum = 50.
GET BADI handle FILTERS Country = ctry.
CALL BADI handle->get_vat
EXPORTING im_amount = sum
IMPORTING ex_amount_vat = vat
ex_percent_vat = percent.
WRITE: 'percentage:', percent, 'VAT:' ,vat.
If you pass GB to the parameter ctry, you get a VAT rate of 16.5 percent. If the value of
the parameter ctry is US, the VAT rate is 4 percent. When the parameter ctry has any other
value, you still get a calculated value for the data field percent. This is because you have
defined a fallback class for your BAdI. The fallback class is not only selected if no BAdI
implementation is available, but also if none of the existing BAdI implementations meets
the filter conditions in the GET BADI command. Accordingly, you get a VAT rate of 20
percent, which is the VAT rate you have implemented in the method get_vat in the fallback
class.
choose Create → Enhancement → Enhancement Spot.
A dialog appears.
3. Enter a name and a short text description for the enhancement spot.
Creating a BAdI
1. To create a BAdI within the new enhancement spot, choose
2. In the dialog window that appears, enter the BAdI name z_badi_calc_vat and a short
description.
You now have a BAdI in your enhancement spot.
3. Deselect the Multiple Use option because for the current calculation you need a single-
use BAdI:
the class:
2. Choose Change to go back to the Class Builder.
The respective method of the BAdI interface is already automatically defined. You only have
to implement it:
DATA: percent TYPE p VALUE 20.
ex_amount_vat = im_amount * percent / 100.
ex_percent_vat = percent.
3. Save and activate the class.
4. Navigate back to the enhancement spot and activate it.
As you already know, the fallback class is chosen in case no BAdI implementation is available. As you have not created a BAdI
implementation so far, the method implementation of the fallback class is used in your example code.
In this section you will learn how to create a BAdI implementation. As soon as there is a suitable BAdI implementation, the
methods of the fallback class are not used any longer.
The BAdI interface defines an important part of the BAdI identity. It defines the BAdI methods that can be used.
That is why you have to create a container that is uniquely assigned to the enhancement spot to which your BAdI belongs. The
respective tool in the SE80 has paved a smooth way to do this:
1. In the Object Navigator (transaction SE80), open the enhancement spot you have already created and choose the Create
Enhancement Implementation pushbutton.
2. In the new dialog that appears, create a (simple) enhancement implementation:
3.
You have created so far a container for BAdI implementations- an enhancement implementation. This container is uniquely
assigned to your enhancement spot. Once this connection is established, you can create a BAdI implementation for the
BAdI within the enhancement spot. Since you have defined only one BAdI within the enhancement spot, you have no
choice. If you had more BAdIs in your enhancement spot, this will be the point where you would select which BAdI you
want to implement.
4. Enter z_bdi_calc_vat_us as the name of the BAdI implementation, confirm and save the enhancement spot in the next
figure, which shows a (simple) enhancement implementation that contains the BAdI implementation z_bdi_calc_vat_us:
The appearance of a (simple) enhancement implementation in the tool is pretty much like the one of an enhancement spot.
Under the Enh. Implementation Elements tab there is a tree with the BAdI implementation(s) contained on the right-hand
side. On the left, you see the properties of the marked BAdI implementation.
Select the property Implementation is active in the Runtime Behavior pane in the figure above. If you do this, the
text below changes to Implementation is called. This is intended to help you understand what the selection you
have just made is for. Further below, there is a list that shows the properties of the BAdI definition your BAdI
implementation is assigned to.
1. Choose the triangle in front of the name of the BAdI implementation in the tree.
2. In the Implementing Class field, enter z_cl_calc_vat_us and choose the Change pushbutton.
The Class Builder opens. The relevant interface methods are already defined there. In your case it is only the
method get_vat().
ex_percent_vat = percent .
sum TYPE p,
vat TYPE p,
percent TYPE p.
sum = 50.
ex_percent_vat = percent.
The result is a percentage of four percent. This is because the fallback class is not selected when there is an active BAdI
implementation.
To make your example more like real world programming, you create another enhancement implementation, that is, another
container. This is because implementing the taxes for different countries most probably belongs to different projects and
because the structure of the (simple) enhancement implementations must mirror the project structure.
2. Navigate to your enhancement spot and use the same button as you have done above. Name the simple enhancement
implementation z_ei_bad_calc_gb, the BAdI implementation z_bdi_calc_vat_gb, and the implementing
class Z_BDI_CALC_VAT_GB. The implementation of the method get_vat is the same as for USA except for the VAT rate,
which you assume to be 16.5%.
3. After saving and activating the enhancement implementation and the class, return to the program and run it again.
You have defined a single-use BAdI by deselecting the Multiple Use option. When instantiating a single-use BAdI,
you have to make sure that there is only one active non-default implementation. Otherwise, you get the respective
exceptions at runtime.
What you need now is a way to select among different BAdI implementations. That can be easily done with filters. For more
information, see How to Use Filters.
When modifying your example you do not take into account the differentiation
between the BAdI provider and the implementer. In real life it is the BAdI provider
who defines a BAdI with a filter or adds a filter to an existing BAdI. It is also part of
this role to use the filter condition to select the respective BAdI implementation in the
ABAP code. It is the implementer who determines the filter value(s) or an interval for
one or many BAdI implementations. For more information about the different roles,
see BAdIs Concept.
1. Navigate to your enhancement spot and open the Enh. Spot Element Definition tab that
shows a list of all the enhancement elements of the spot.
2. Switch to a change mode, select your BAdI in the list, and choose the Filter icon from
respective BAdI implementation by double-clicking the respective row in the table of BAdI
implementations.
5. Switch to change mode, double -click the triangle in front of the BAdI implementation in
the tree and then double-click on the filter icon below.
6. On the next screen, select the Combination icon.
9. Activate the (simple) enhancement implementation and navigate back to the spot.
The other implementation, that is the one for USA, also needs the respective filter value.
So you go to the respective (simple) enhancement implementation and change the BAdI
implementation in the same way as you just did above. The respective filter value for this
country is 'US'.
10. Return to your program and adapt it to the modified BAdI. Running the syntax check
shows you that you need to have a filter parameter in the GET BADI command if the BAdI you
try to instantiate is defined with a filter. The required addition to the GET BADI command
is FILTERS. It is after this keyword that you insert the name of the BAdI filter and a value the
filter is compared to. You also have to take care that an appropriate value can be passed to
the GET BADI routine:
REPORT Z_DEMO_ENH.
parameters: ctry(2) type c.
DATA: handle TYPE REF TO z_badi_calc_vat,
sum TYPE p,
vat TYPE p,
percent TYPE p.
sum = 50.
GET BADI handle FILTERS Country = ctry.
CALL BADI handle->get_vat
EXPORTING im_amount = sum
IMPORTING ex_amount_vat = vat
ex_percent_vat = percent.
WRITE: 'percentage:', percent, 'VAT:' ,vat.
If you pass GB to the parameter ctry, you get a VAT rate of 16.5 percent. If the value of
the parameter ctry is US, the VAT rate is 4 percent. When the parameter ctry has any other
value, you still get a calculated value for the data field percent. This is because you have
defined a fallback class for your BAdI. The fallback class is not only selected if no BAdI
implementation is available, but also if none of the existing BAdI implementations meets
the filter conditions in the GET BADI command. Accordingly, you get a VAT rate of 20
percent, which is the VAT rate you have implemented in the method get_vat in the fallback
class.
Due to that fact that calling new BAdIs is significantly faster, we recommend that
you define only new BAdIs and migrate all classic BAdIs and their calls to new
BAdIs. Make sure that you migrateonly your own BAdIs. Customers should never
migrate the BAdIs that are provided by SAP.
A completely automated migration of all existing classic BAdIs is impossible because of the
existing differences between classic and new BAdIs. For that reason, we recommend that you
use the procedure for semi-automatic migration.
statement GET BADIas a handle for the calls of BAdI methods and you reference it with a
reference variable of the type of the BAdI. A BAdI object is an instance of an internal BAdI
class which is invisible to the outside world.
● Passing comparison values for the filter
a. In the case of classic BAdIs, the filter values are stored in a structure and passed
with the call of the BAdI methods.
b. In the case of new BAdIs, the comparison values for the filters used to search
for implementations are passed when the BAdI object is created with the GET
BADIstatement.
Migrating BAdIs
1. Call the classical BAdI Builder (transaction SE18).
2. Enter the name of the BAdI you want to migrate.
3. Choose Utilities → Migrate.
In this case, a message with identifier 6 will appear in the input log of the
transport request.
b. Choose the traffic light in front of the BAdI implementation.
c. Enter an enhancement implementation.
Enhancement Builder
The Enhancement Builder is a tool for creating and managing enhancements which is fully
integrated into the ABAP Workbench. You cannot use a transaction code to call it directly.
Besides defining enhancement options for repository objects which can be enhanced within the
enhancement concept and the related actual enhancements, you can edit enhancement
spots and enhancement implementations in the Enhancement Builder.
For more information, see Creating, Editing, and Deleting Enhancement Spots and Creating,
Editing, and Deleting Enhancement Implementations.