Database View - Help View - Projection View - Maintenance View
Database View - Help View - Projection View - Maintenance View
Database View - Help View - Projection View - Maintenance View
Database View
Help View
Projection View
Maintenance View
Below are the list and sequence of events available under classical reports, each event has it`s own
importance.
Load-of-praogram
This event is used to load program into memory for execution and this is the first event in execution
sequence.
Initialization
This event is used to initialize variables, screen default values and other default actions.
At Selection-Screen output
By using this event we can manipulate dynamic selection-screen changes.
At Selection-Screen on field
This event is used to validate a single selection-screen input parameter.
Syntax: AT SELECTION-SCREEN ON <parameter name>. "Validate a input parameter
At Selection-Screen on value request
This event is used to provide value help ( field help ) for a input field.
Syntax: AT SELECTION-SCREEN ON VALUE REQUEST FOR <parameter name>. "Input search help for
a input parameters
At Selection-Screen on help request
By using this event we can provide F1 help for a input field.
Syntax: AT SELECTION-SCREEN ON HELP REQUEST FOR <parameter name>. "Input (F1) help for a
input parameters
At Selection-Screen
This event is used to validate multiple input fields
Syntax: AT SELECTION-SCREEN . "used to validate multiple input fields
Start-of-Selection
This is default event which is used to write actual business logic .
How many types of reports are there in ABAP and what is the difference between them?
There are 2 type of reports. They are:
- Interactive report
- Classic reports
In classic reports, we can see the output in single list where as in interactive reports we can see the
output in multiple list.
In ABAP, there are a total of 7 types of reports. They are:
- Classical
- Interactive
- Logical Database
- ABAP query
- ALV Reports (ALV stands for ABAP List Viewer)
- Report Writer/Report Painter
- Views (There are different types of views also)
Classical Reports
These are the most simple reports. Programmers learn this one first. It is just an output of data using the
Write statement inside a loop.
Classical reports are normal reports. These reports are not having any sub reports. IT IS HAVING ONLY
ONE SCREEN/LIST FOR OUTPUT.
User Exit
Customer Exit
Function exit
Screen Exit
Menu Exit
Field Exit
User Exit will be activated automatically when ever you activate the
application(program).
Through SPRO
2.
Through ST05 -> SQL Trace and Buffer Trace (Performance Analysis)
3.
4.
Apart from the above mentioned methods we can also find the BAdI using the two methods below,
Though not very effective but its a GOOD-TO-KNOW information.
5.
6.
Every method has been illustrated with screen shots and examples, hope this helps anyone for their
development.
1 Through SPRO
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-Ins 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 its 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.
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. Switch on the TRACE through Transaction ST05 (Performance analysis) and set the flag for
BUFFER TRACE SQL TRACE and activate the trace.
4.JPG
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. 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.
5.JPG
6.JPG
7.JPG
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.
8.JPG
9.JPG
Delete unwanted cols and then read through the definition documentation to understand if the BAdI will
serve our purpose.
The short coming for this method is that though it lists out the BAdI called in specific transaction however
it does not specify when the BAdI was called i.e. what triggered the BAdI? Is it the SAVE event or the
ENTER or the CHECK or which navigating to any other screen. This becomes even more cumbersome if
the documentation for definition is not available in the language you are looking for. The next 2 methods
cover these short comings.
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. Double click on the method name and place a break-point on the CALL METHOD
cl_exithandler=>get_class_name_by_interface.
10.JPG
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 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 breakpoint and would give the name of the BAdI that would
trigger at the SAVE event.
11.JPG
The next method is same the above only that instead of putting a breakpoint at CL_EXITHANDLER we
can place a breakpoint in the function module SXV_GET_CLIF_BY_NAME at CALL FUNCTION
'SXV_ADD_PREFIX and execute the transaction.
12.JPG
The exporting parameter NAME holds the value at the BAdI name.
13.JPG
Take a note of the BAdI that would trigger based on the requirement.
As discussed earlier, there are few methods which may not be as effective as the above mentioned
methods however it always good to know that there are other alternatives available.
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. The variable
would obviously be TYPE REF to an interface name .
IF_EX_<BAdI name>.
14.JPG
15.JPG
16.JPG
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.
Execute Transaction Se11 and display table TADIR. Execute TADIR for table entries.
17.JPG
And execute.
18.JPG
Though ME52N has many other BAdI which are called however they exist in the package ME.
Every technique used here has its own advantages; however which technique is best suited depends on
the developer and the requirement.