Sunteți pe pagina 1din 6

GET BADI - ABAP Keyword Documentation

help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abapget_badi.htm

SAP NetWeaver AS ABAP Release 750, ©Copyright 2016 SAP AG. All rights reserved.

GET BADI

Quick Reference

Syntax
GET BADI { badi [FILTERS f1 = x1 f2 = x2 ... ] }
| { badi TYPE (name)
[ {FILTERS f1 = x1 f2 = x2 ... }
| {FILTER-TABLE ftab}] }
[CONTEXT con].

Additions
1. ... FILTERS f1 = x1 f2 = x2 ...

2. ... FILTER-TABLE ftab

3. ... CONTEXT con

Effect
This statement creates a new BAdI object and sets the BAdI reference to the object in a
BAdI reference variable badi. This statement has a static and a dynamic variant.

In the case of the static variant, the addition TYPE is not specified. The static type of
the reference variable badi must be a BAdI. This determines which BAdI will be
used.

In the case of the dynamic variant, a character-like data object name is specified for
the addition TYPE. When the statement is executed, this object must contain the
name of a BAdI. The static type of the reference variable badi must be a superclass
1/6
for all CL_BADI_BASE BAdI classes.

To specify values for the filters of the BAdI, the addition FILTERS can be specified in the
static variant, or the addition FILTER-TABLE in the dynamic variant.

In the case of a context-free BAdI, the addition CONTEXT cannot be specified. In the case
of a context-specific BAdI, however, it must be specified.

After instancing, the program searches for BAdI implementation classes for the BAdI as
follows:

1. Only BAdI implementation classes are selected that are assigned to a BAdI
implementation that is in the state active.

2. Only BAdI implementation classes are selected that are assigned to a BAdI
implementation (an enhancement) that have a switch in the state on. If no switch is
assigned to a BAdI implementation, it is handled in the same way as an
implementation with a switch in the state on.

3. All BAdI implementations are selected that satisfy the above requirements and for
which the filter condition of the BAdI implementation matches the values specified
after FILTERS or in ftab. If no BAdI implementations are found with the filter
specifications, the system searches for BAdI implementations that are marked as
standard implementations. If there are also none of these, the fallback BAdI
implementation class of the BAdI is used (if one exists).

4. If multiple BAdI implementation classes with matching filter conditions were found
for a BAdI defined for single use, conflict resolution is performed. A successful
conflict resolution produces exactly one priority conflict-resolving enhancement
implementation and only its BAdI implementation class is selected. If multiple
conflict-resolving enhancement implementations have the same priority or if there
are no conflict-resolving enhancement implementations at all, a correct conflict
resolution is not possible and multiple BAdI implementation classes remain in the
hit list.

If the resulting hit list is suitable for the definition of the BAdI which means:

For a BAdI defined for a single use, the hit list must contain exactly one BAdI
implementation class,

For a BAdI defined for multiple use, the hit list may contain multiple or no BAdI
implementation classes,
2/6
references to object plug-ins of the found BAdI implementations are saved in the BAdI
object. Object plug-ins that do not yet exist are created for this purpose. Whether an
existing object plug-in is reused or whether a new object plug-in is created depends on
whether the BAdI is context-free or context-dependent, and also depends on the
addition CONTEXT. The precise semantics are described in the addition.

If the hit list contains multiple BAdI implementations or no implementation, even though
the BAdI is defined for single use, an exception is raised. If the BAdI reference variable
badi is given a valid BAdI reference before the statement in an exception case, this is
retained, otherwise it is initialized.

Notes
It is not possible to access BAdI objects directly using BAdI references. The
references are only used to call the BAdI methods in the referenced object plug-ins
with the statement CALL BADI. Otherwise, BAdI reference variables can be used in
the same operand positions as normal object reference variables. In particular, this
means that assignments and comparisons are possible.

The method NUMBER_OF_IMPLEMENTATIONS of the class CL_BADI_QUERY returns


the number of BAdI implementations that are saved in a BAdI object.

The statement GET BADI prepares an enhancement spot invocation, and can
therefore be seen as part of an explicit enhancement point in the terminology of
the enhancement concept.

To prevent the exception for BAdIs that are defined for single use in systems in
which no corresponding enhancement is carried out, it is advisable to specify a
fallback BAdI implementation class for these BAdIs. The fallback BAdI
implementation class belongs to the BAdI and is independent of enhancements.

To access object plug-ins directly requires the corresponding references. These can
be supplied, for example, by BAdI methods.

The BAdI reference cannot be used to handle any instance events of a BAdI.
Instead, when the event handler is registered, either the addition FOR ALL

3/6
INSTANCES must be specified using SET HANDLER, or an reference to an object
plug-in must be entered directly.

Addition 1
... FILTERS f1 = x1 f2 = x2 ...

Effect
After the addition FILTERS, the elementary data objects x1, x2, ... must be specified for all
f1, f2, ... filters of the BAdI. If a filter in the BAdI has the property Constant Filter Value at
Call, only literals and constants can be specified. The data objects must be compatible
with the data type of the filters. FILTERS cannot be specified for a BAdI without filters.

Addition 2
... FILTER-TABLE ftab

Effect
Using the special internal table ftab, this addition assigns values to the filters of a
dynamically specified BAdI. The internal table must have table type
BADI_FILTER_BINDINGS from ABAP Dictionary. When the statement GET BADI is
executed, the table must contain exactly one row for each of the filters of the BAdI. The
table columns are:

NAME of type c and length 30


for the name of the filter in uppercase letters. Specifying a nonexistent filter raises
a non-handleable exception.

VALUE of type REF TO data


A reference to a matching data object. The value of the data object that the
reference variable in VALUE refers to is assigned to the filter specified in NAME.

The column NAME is the unique key of the sorted table ftab.

Addition 3
... CONTEXT con

4/6
Effect
Using the addition CONTEXT, for context-dependent BAdIs, an object reference variable
con must be specified, the static type of which is, or includes, the tag interface
IF_BADI_CONTEXT, and which contains a reference to a BAdI context object. If con is
initial, an exception is raised. The addition CONTEXT cannot be entered for context-free
BAdIs.

The addition CONTEXT controls how the object plug-ins are created as follows:

Without the addition CONTEXT, hence for context-free BAdIs, the way the object
plug-ins are created is based on the setting of the BAdI. Either new plug-ins are
created every time the statement GET BADI is executed, or an object plug-in that
has already been created in the current internal session is reused, if it is required
again. An object plug-in of this type is a singleton in terms of its BAdI
implementation class.

Using the addition CONTEXT, and hence for context-dependent BAdIs, the same
object plug-ins are always used for the same content of con. These object plug-ins
are singletons in terms of their BAdI implementation class and a BAdI context
object.

If a BAdI implementation class implements multiple BAdI interfaces and GET BADI is
executed within one internal session for more than one of these BAdIs, multiple BAdI
objects can point to the same object plug-in. This enables the sharing of data between
different BAdIs. For context-free BAdIs, this is only the case for reuse. For context-
dependent BAdIs, multiple BAdI objects from the same context can point to the same
object plug-ins.

Notes
The fact that object plug-ins can either be created or reused can also be expressed
in terms of an object plug-in being stateful or stateless with reference to a BAdI or a
context.

The tag interface IF_BADI_CONTEXT can be implemented by any class. Possible


applications range from the implementation in a local class without other
components that have the sole purpose of enabling internal program context
administration for BAdIs, to the implementation in a global application class in
which the objects are specifically enhanced.

5/6
Exceptions
Handleable Exceptions

CX_BADI_CONTEXT_ERROR

Cause: A context error has occurred in the dynamic variant of the statement.

CX_BADI_FILTER_ERROR

Cause: Incorrect information was specified about the filters of the BAdI in the
dynamic variant of the statement.

CX_BADI_INITIAL_CONTEXT

Cause: The reference variable specified after CONTEXT is initial.

CX_BADI_MULTIPLY_IMPLEMENTED

Cause: Multiple BAdI implementation classes were found, although the BAdI is
defined for single use. Subclass of CX_BADI_NOT_SINGLE_USE.

CX_BADI_NOT_IMPLEMENTED

Cause: No BAdI implementation class was found, although the BAdI is defined for
single use. Subclass of CX_BADI_NOT_SINGLE_USE.

CX_BADI_UNKNOWN_ERROR

Cause: The BAdI specified in the dynamic variant does not exist.

6/6

S-ar putea să vă placă și