ABAPGET_BADI - GET BADI

General Data in Customer Master   Vendor Master (General Section)  
This documentation is copyright by SAP AG.

GET BADI

Short 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 generates a new BAdI object and sets theBAdI reference to the object in aBAdI reference variable badi. This statement has a static and a dynamic variant.

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

  • In the case of the dynamic variant, a character-type data object name is declared for additionTYPE. 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 higher-level class for all CL_BADI_BASE BAdI classes.

To declare values for the BAdI's filters, you can declare the addition FILTERS in the static variant, or addition FILTER-TABLE in the dynamic variant.

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

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 aBAdI implementation that has the status active.

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

  3. All BAdI implementations are selected that satisfy the above requirements and for which the filter conditionof the BAdI implementation matches the values declared after FILTERS or in ftab. If noBAdI implementations are found with the filter specifications, the system searches for BAdI implementationsthat 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 for a BAdI defined for single use several BAdI implementation classes with matching filter conditions have been found, then aconflict solution is carried out. A successful conflict solution results in exactly one priorityconflict-solvingenhancement implementation and only its BAdI implementation class is selected. If several conflict-solvingenhancement implementations have the same priority or if there are no conflict-solving enhancement implementationsat all, then a correct conflict solution is not possible and several BAdI implementation classes will 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 several or no BAdI implementation classes,

then references to object plug-ins of the found BAdI implementations are saved in the BAdI object.Objectplug-ins that do not yet exist are generated for this purpose. Whether an existing object plug-inis generated or reused, or whether a new object plug-in is generated, depends on whether the BAdI iscontext-free or context-dependent, and depends on the CONTEXT addition. The exact semantics is described in the addition.

If the hit list contains no or several BAdI implementations although the BAdI is defined for singleuse, an exception occurs. If the BAdI reference variable badi receives 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 theBAdImethods in the referenced object plug-ins with the statement CALLBADI. Otherwise, BAdI reference variables can be used in the same operand positions as normalobjectreference 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 explicitenhancement option in the terminology of theenhancement concept.

  • To prevent the exception for BAdIs that are defined for single use in systems in which no correspondingenhancement is carried out, it is recommended 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 theeventhandler is registered, either the addition FOR ALL INSTANCES must be specified using SETHANDLER, or an reference to an object plug-in must be entered directly.


Addition 1

... FILTERS f1 = x1 f2 = x2 ...

Effect

After addition FILTERS, the elementary data objects x1, x2, ... must be declared for all f1, f2, ... filters of the BAdI. If a filter in the BAdI has the property Constant Filter Value at Call, onlyliterals andconstantscan be declared. The data objects must be compatible with the data type of the filters. FILTERS cannot be declared for a BAdI without filters.

Addition 2

... FILTER-TABLE ftab

Effect

With the help of special internal table ftab, this addition assigns values to the filters of a dynamically declared BAdI. The internal table must have table typeBADI_FILTER_BINDINGS from the ABAP Dictionary.When statement GET BADI is executed, the table must contain exactly one row for each of the BAdI's filters. The columns in the table are:

  • NAME of type c with 30 characters
    for the name of the filter in upper case. Declaring a non-existing filter triggers an exception that cannot be resolved.

  • 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 declared in NAME.

Column NAME is the unique key of sorted table ftab.

Addition 3

... CONTEXT con

Effect

: With the addition CONTEXT, for context-dependent BAdIs, anobject reference variable con must be specified, the static type of which is, or includes, thetag interface IF_BADI_CONTEXT, and which contains a reference to aBAdIcontext object. If con is initial, an exception occurs. The addition CONTEXT can not be entered for context-free BAdIs.

The addition CONTEXT controls the generation of the object plug-ins as follows:

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

  • With the addition CONTEXT, and hence for context-dependent BAdIs, the same object plug-ins arealways 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 multipleBAdIinterfaces and GET BADI is executed within one internal session for several of these BAdIs,then multiple BAdI objects can point to the same object plug-in. This enables the sharing of data betweendifferent BAdIs. For context-free BAdIs, this is only the case for reuse. For context-dependent BAdIs, several BAdI objects from the same context can point to the same object plug-ins.

Notes

  • : The fact that object plug-ins can either be newly generated 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 fromthe implementation in a local class without other components that have the sole purpose of enablinginternal program context administration for BAdIs, to the implementation in a global application class in which the objects are specifically enhanced.


Exceptions

Catchable Exceptions

CX_BADI_CONTEXT_ERROR

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

CX_BADI_FILTER_ERROR

  • Cause: Erroneous declarations have been made regarding the BAdI's filters in the dynamic variant of the statement.

CX_BADI_INITIAL_CONTEXT

  • Cause: The reference variable declared after CONTEXT is initial.

CX_BADI_MULTIPLY_IMPLEMENTED

  • Cause: Several BAdI implementation classes were found, although the BAdI is defined for single use. Subclass ofCX_BADI_NOT_SINGLE_USE.

CX_BADI_NOT_IMPLEMENTED

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

CX_BADI_UNKNOWN_ERROR

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





PERFORM Short Reference   BAL_S_LOG - Application Log: Log header data  
This documentation is copyright by SAP AG.


Length: 15825 Date: 20120522 Time: 061832     triton ( 399 ms )