Finding BADI using different methods every ABAP'er should know. It is another way of implementing enhancements to the standard programs with out modifying the original code. BADI’s are implemented using OO ABAP programming technique. Technically a BADI is nothing but an interface.
How to Find BADI-Different Methods Every ABAPer Should Know
Each BAdi consists of the method with out implementation called as BAdi definition. We need to create classes to write the abap code by implementing the methods called as BAdi implementation.
TCODES for BADI Definition and Implementation
Se18 is the tcode for BAdi definition.
Se19 is the tcode for BAdi implementation.
The interface name for a BAdi will be as below.
Ex:- IF_EX_<BAdi NAME>
The class name for a BAdi will be as below.
Ex:- ZCL_EX_<IMPLEMENTATION NAME>
Advantages of using BADI's
The main advantage of using BADI’s is , we can create multiple implementations for a single BADI definition.
Where as with the exits, we can create a single implementation. i.e A single project for a enhancement.
We cannot create another project (implementation) for enhancement which is already used. That is why we go for BAdi’s.
Finding BADI's Using Different Methods
As an ABAP developer writing code may not be problem however where to write the code is always the key point to think of.
These different methods should help the ABAP developer to find best suited BADI for their requirement.
The BAdI’s can be found in the following ways
1. Through SPRO
2. Through ST05 -> SQL Trace and Buffer Trace (Performance Analysis)
3. Through SE24 -> CL_EXITHANDLER.
4. Through function module SXV_GET_CLIF_BY_NAME.
Apart from the above mentioned methods we can also find the BADI using the two methods below, Though not very effective but it‘s a GOOD-TO-KNOW information.
5. Through SE30 Runtime analysis
6. Through TADIR table entry.
Every method has been explained with screen shots and examples, hope this post helps you to know different methods for finding BADI.
1) Finding BADI through SPRO Transaction Code
The most basic method is searching through SPRO.
For example here we are searching for all the BAdI for Purchasing (This includes both PR and PO in the Material management module)
Step1.
Execute Transaction SPRO
-> SAP Reference IMG
-> Material management (As our requirement specific to MM module)
-> Purchasing.
Navigate through this node you would find the Node Business Add-In’s for Purchasing NODE.
Read through the Documentation available and check if the BAdI satisfies your requirement and then create an implementation.
It is not mandate that the BAdI node will appear in the same manner for other module.
We need to navigate through the all the nodes and find the BAdI node. For example In Purchasing we directly get the NODE business add-in however if we navigate through Sales and Distribution we get under the system modification.
Though this gives us all the BAdI that we have for the given module however it‘s not very specific to the transaction we may be looking for.
The Next method is the one through ST05. This answers to our problem, we can find all BAdI that trigger for a given transaction code.
2) Finding BADI through ST05 Transaction Code -> Performance analysis
This method is based on the fact that all BAdI are registered in SAP database tables and during a transaction execution if any BAdI is called then these tables will surely be accessed.
The BAdI database tables are SXS_INTER, SXC_EXIT, SXC_CLASS and SXC_ATTR.
These tables are always accessed by the views V_EXT_IMP and V_EXT_ACT.
When we create a trace for the given transaction we can filter the trace by these view names to get all BAdI.
Step1.
Step1.
Switch on the TRACE through Transaction ST05 (Performance analysis) and set the flag for ‘BUFFER TRACE’ ‘SQL TRACE’ and activate the trace.
Step2.
Execute the transaction for which we need to find the BAdI, in our case it ME52N. Navigate through the transaction like change a data, check the document and save etc doing so the trace would capture all BAdI that would trigger on these events.
Step3.
Step3.
Execute Transaction ST05 and deactivate the Trace -> display trace.
This would popup the screen ‘Set Restriction for displaying trace’.
Under the field Objects fill values and hit OK.
Step4.
Export the trace list to an excel document by hitting on the Trace list option in the MENU OPTIONS and SAVE as LOCAL file.
And save in the desired location.
After the download, excel would look like below.
The BAdI names are in the Statement field under col K.
Delete all the unwanted cols and then read through the definition documentation to understand if the BAdI will serve our purpose.
After the download, excel would look like below.
The BAdI names are in the Statement field under col K.
Delete all the unwanted cols and then read through the definition documentation to understand if the BAdI will serve our purpose.
3) Finding BADI through SE24 Transaction Code -> CL_EXITHANDLER.
This is a very simple but efficient method to find the BAdI for a give transaction.
Step1.
Execute Transaction SE24 and enter the class name as CL_EXITHANDLER. There would be numerous methods with this class but we are interested only in GET_INSTANCE method.
Step2.
Step2.
Double click on the method name and place a break-point on the ‘CALL METHOD cl_exithandler=>get_class_name_by_interface’.
Step3.
Now execute the transaction for which the BAdI is required.
The code processing would stop at the break-point we have applied, click on the EXIT_NAME in the Changing parameter.
The code processing would stop at the break-point we have applied, click on the EXIT_NAME in the Changing parameter.
The parameter EXIT_NAME holds the name of the BAdI. Take a note of the BAdI and hit F8.
If for instance we are looking for a BAdI while saving the document then when the SAVE button is hit processing would stop at the break point and would give the name of the BAdI that would trigger at the SAVE event.
The next method is same the above only that instead of putting a break point at CL_EXITHANDLER we can place a break point in the function module SXV_GET_CLIF_BY_NAMEat CALL FUNCTION 'SXV_ADD_PREFIX and execute the transaction.
The exporting parameter ‘NAME’ holds the value at the BAdI name.
4) Finding BADI through Function Module SXV_GET_CLIF_BY_NAME.
Using the Function Module SXV_GET_CLIF_BY_NAME.
How to use this Function Module to Identify a BADI for a Transaction.
Step 1.
How to use this Function Module to Identify a BADI for a Transaction.
Step 1.
Go to SE37 and display the Function Module SXV_GET_CLIF_BY_NAME.
Step 2.
Step 2.
Put a break point at the ENDFUNCTION of the Above mentioned Function Module.
Step 3.
Step 3.
Run the Transaction for which you want to search a BADI.
Note: For every operation the Code Breaks and Function Module return some values in its Parameters.
In the Parameter CLIF and NAME. you will get the BADI or Exit name.
Now the question is how to identify whether it is a BADI or Exit. Answer is, Parameter PREFIX of the Function Module.
If this is CL_EX then it is a BADI else it is a Exit. Example is shown in the below Screen shot.
Note: For every operation the Code Breaks and Function Module return some values in its Parameters.
In the Parameter CLIF and NAME. you will get the BADI or Exit name.
Now the question is how to identify whether it is a BADI or Exit. Answer is, Parameter PREFIX of the Function Module.
If this is CL_EX then it is a BADI else it is a Exit. Example is shown in the below Screen shot.
A BADI for Transaction FPP2 when you click on SAVE.
Hope this document helps people who dont know this method of finding a BADI.
5) Finding BADI through SE30 Runtime Analysis.
The Runtime analysis measures the CPU time required by ABAP statements. The most important are the database access, context statements, Modularization units like Perform Call function Call screen Call transaction etc, Internal Table operations like append collect Insert etc, Data transfer like read dataset etc and for our specific requirement the ABAP object statements Though there are many other statements that Runtime Analysis measure, we may not move into details of that.Once we have the hit list from the SE30, we can search through the HIT LIST for METHOD cl_exithandler.
Execute Transaction SE30 and under the Current session tab enter the transaction ME52N (as used through out this document) and execute.
Flow through the transaction and save and exit. So we now have the Runtime analysis available for the transaction we just executed, Search through the HIT LIST for “CL_EXITHANDLER”. Select the line and then in the
Menu bar -> Goto -> Display Source code.
This would take us to the code where either the BAdI name is directly passed in the instance or through a variable. if its through a variable double click on the variable for the variable definition.
This would take us to the code where either the BAdI name is directly passed in the instance or through a variable. if its through a variable double click on the variable for the variable definition.
The variable would obviously be TYPE REF to an interface name .
IF_EX_<BAdI name>.
Any thing after the IF_EX is the BAdI name.
In the above case
lc_cacl_character_input type ref to if_ex_cacl_character_input.
Then cacl_character_input is the BAdI name.
IF_EX_<BAdI name>.
Any thing after the IF_EX is the BAdI name.
In the above case
lc_cacl_character_input type ref to if_ex_cacl_character_input.
Then cacl_character_input is the BAdI name.
6) Finding BADI through TADIR table entry
Lastly we can find some of the BAdI names from the TADIR table entry.
Just as we can find the user exit from TADIR, BADI name can also be retrieved there.
Though this is a good method for finding User exits however for BAdI this is just good-to-know information, the reason being that the BAdI name is fetched based on the Development class or the package.
It may so happen that the package may contain all the BAdI provided by SAP for that transaction or the BAdI may exist in another Package which is accessed when the transaction is executed.
Consider the Example below.
Execute Transaction Se11 and display table TADIR.
Consider the Example below.
Execute Transaction Se11 and display table TADIR.
Execute TADIR for table entries.
Enter the following values.
Program ID (PGMID) : R3TR.
OBJECT : SXSD (For user exit use ‘SMOD’)
Development Class (DEVCLASS) : MEREQ (for transaction ME52N)
And execute.
Enter the following values.
Program ID (PGMID) : R3TR.
OBJECT : SXSD (For user exit use ‘SMOD’)
Development Class (DEVCLASS) : MEREQ (for transaction ME52N)
And execute.
Though ME52N has many other BAdI which are called however they exist in the package ME.
Decide which method suits better to your needs and requirements before using these different methods to find BADI's.
"You found the information helpful and want to say thanks? Your donation is enough to inspire us to do more. Thanks a bunch!"
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.