BAPI stands for Business API(Application Program Interface).A
BAPI is remotely enabled function moduleie it can be invoked from
remote programs like standalone JAVA programs, web interface
etc..You can make your function module remotely enabled in
attributes of Function module butA BAPI are standard SAP function
modules provided by SAP for remote access.Also they are part of
Businees Object Repository(BOR).BAPI are RFC enabled function
modules. the difference between RFC and BAPI are business
objects.You create business objects and those are then registered
in your BOR (Business Object Repository)which can be accessed
outside the SAP system by using some other applications (Non-SAP)
such as VB or JAVA.In this case u only specify the business object
and its method from external systemin BAPI there is no direct
system call. while RFC are direct system call.Some BAPIs provide
basic functions and can be used for most SAP business object
types.These BAPIs should be implemented the same for all business
object types.Standardized BAPIs are easier to use and prevent users
having to deal with a number of different BAPIs.Whenever possible,
a standardized BAPI must be used in preference to an individual
BAPI.Remote Function Call:RFC is an SAP interface protocol. Based
on CPI-C, it considerably simplifies the programming of
communication processes between systems.RFCs enable you to call and
execute predefined functions in a remote system - or even in the
same system.RFCs manage the communication process, parameter
transfer and error handling.
ABAP DevelopmentDetailed explanation about BADI and the ways to
find the BADI with an example (ME23n transaction)Go to start of
metadataDetailed explanation about BADI with an example (ME23n
transaction)Def: BADI (Business Add-In) is a new SAP Object
Oriented enhancement technique which is used to add our own
business functionality to the existing SAP standard
functionality.BADI's are available in SAP R/3 from the system
release 4.6cWhy BADI?In contrast to the earlier enhancement
techniques, BADI follows Object Oriented approach to make them
reusable. A BADI can be used any number of times where as standard
enhancement techniques can be used only once.For example if we
assign an enhancement to one custom project, then that enhancement
cannot be assigned to any other custom projects. To overcome this
drawback SAP has provided a new enhancement technique called
BADI.Transaction code for BADI Definition:SE18 When you create a
BAdI definition, a class interface will be automatically created
and you can define your methods in the interface. The
implementation of the methods can be done in SE19 transaction.When
a BAdi is created following are automatically generated: An
interface with 'IF_EX_' inserted between the first and second
characters of the BAdi name An adapter class with 'CL_EX_' inserted
between the first and second characters of the BAdi
name.Transaction code to Implement BADI:SE19Types of BADI's:While
creating a BADI using the T-code SE18, it provides the pop-up
screen to select the type of BADI to be used is as shown below.
There are two types of BADI's. 1)Multi use BADI:With this
option, any number of active implementations can be assigned to the
same definition BADI. By default this option is checked.If we want
the BADI for multiple useIf you have multiple-use BADI definitions,
the sequence must not play any role.The drawback inMultiple use
BADIis, it is not possible to know which BADI is active especially
in country specific version.2)Filter dependent BADI:Using this
option we can define the BADI's according to the filter values to
control the add-in implementation on specific criteria.Ex: Specific
country value.How to Find BADI's in SAP system:Method 1:Steps to
find BADI:1. Go to SE 24 transaction, type CL_EXITHANDLER and then
click on display.
2. Double click on GET_INSTANCE method.
3. Put a break-point on class method
CL_EXITHANDLER=>GET_CLASS_NAME_BY_INTERFACE.
4. Run any transaction on which we want find the BADI's say
VA01.5. Give the transaction name VA01 and press enter.6. It will
automatically take you to the break-point which we have set the in
the SE24 transaction. Each time if you press F8 a list BADI names
will be displayed.
7. You can find the BADI name in fieldEXIT_NAMEand if you double
click on it, we can get the corresponding BADI name before hit the
corresponding screen. Based on the requirement find the BADI name
and accordingly implement your functionality using the transaction
se19.Method 2:Go to transaction SE84 and click on Enhancements.
Then double click on Business Add-Ins.For example, if you want to
find the BADI's for the standard transaction ME22n, the procedure
is as follows. This example shows, finding the way of BADI names by
providing the Package of ME22n.1) Go to transaction ME22n. Select
the System option from the menu and then click on Status. It
displays the following information.
2) Double click on the program name i.e. SAPLMEGUI. It will take
you into the program and click onGo totab from the Menu. There we
can find the package name of the standard transaction ME22n.Copy
and paste it in the package filed.
3) Now Press F8, a list of BADI names will be displayed as shown
below. Select the appropriate BADI name and implement it based on
the business requirement using the transaction SE19.
Method 3:Finding the BADI names using SE18 transaction1) Go to
transaction SE 18. Select F4 help for the definition name and click
on Information System button as shown below.
2) A pop-up screen will be displayed and give the package name
for any standard transaction say VA02. Finding the package is
explained above. Please refer above method to find the package
name. The package name for VA02 transaction is 'VA.'
3) A list of BADI names will be displayed for the transaction
VA02. Select the appropriate BADI name and implement it using
T-code SE19.
Example:This Example explains how to implement BADI's. Here I am
trying to show how to add custom screen to theME23NTransactions
using BADI's.The procedure is as explained below.- Find the BADI
using the method 1 as shown above.
The BADI name to add the custom screen to ME23n is
'ME_GUI_PO_CUST'.- Go to T-code SE19 and create an
implementationZME_GUI_PO_CUSTand then click on create button- Give
the Definition name "ME_GUI_PO_CUST"and continue, give short text,
save- Click on Interface Tab, you can find the implementation class
name asZCL_IM_ME_GUI_PO_CUST2.- Click onZCL_IM_ME_GUI_PO_CUST2,
which will take you to SE24.- Add "MMMFD" in the Type Group Section
of properties tab.- Go to Attributes section and declare the
following attribute- SUBSCREEN1 Constant Public Type MEPO_NAME Name
of a View'ITEMSCREEN1 '.- Go to Methods section, you can find the
BADI interface methods.- Double click on the
method"IF_EX_ME_GUI_PO_CUST~SUBSCRIBE", this method is having 3
parameters
Go to the code section of the method and add the following code
there.Code forIF_EX_ME_GUI_PO_CUST~SUBSCRIBE: DATA: ls_subscriber
LIKE LINE OF re_subscribers.*--FIRST SCREEN POPULATION*--we want to
add a customer subscreen on the item detail tab CHECK
im_application = 'PO'. CHECK im_element = 'ITEM'.*--each line in
re_subscribers generates a subscreen. We add one subscreen*--in
this example CLEAR re_subscribers[].*--the name is a unique
identifier for the subscreen and defined in this*--class definition
ls_subscriber-name = subscreen1.*--the dynpro number to use
ls_subscriber-dynpro = '0002'.*--the program where the dynpro can
be found ls_subscriber-program = 'ZME_GUI_PO_CUST_SCREEN'.*--each
subscreen needs itsown DDIC-Structure ls_subscriber-struct_name =
'ZMARA'.*--a label can be defined ls_subscriber-label = 'Cust
BADI'.*--the position within the tabstrib can be defined
ls_subscriber-position = 7.*--the height of the screen can be
defined here. Currently we support two*--screen sizes:*--value 7 a
16 line subscreen ls_subscriber-height = 7. APPEND ls_subscriber TO
re_subscribers.Save and checkand backDouble click on method
IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS".Add the following code in
the method.*given the field catalog of structure ZMARA we have
to*establish a mapping to metafields which are used for field
selection*purposes and error handling Standard definitions can be
found in type*pool MMMFD. It is important for customer fields to
use integer*constants above 90000000 for the metafield.
FIELD-SYMBOLS: LIKE LINE OF ch_mapping. LOOP AT ch_mapping
ASSIGNING . CASE -fieldname. WHEN 'MATNR'. -metafield =
mmmfd_cust_08. WHEN 'MTART'. -metafield = mmmfd_cust_09. WHEN
'MATKL'. -metafield = mmmfd_cust_10. ENDCASE. ENDLOOP. The
metafield mapping important for field selectionand error handling
purpose. Save, check and back Activate the Implementation class.
Activate the BADI Implementation.Now create a structure in SE11
with the nameZMARA.Add the following fields in the structure.
Now Create a Program with the Name 'ZME_GUI_PO_CUST_SCREEN' and
create a screen with sub screen type with the number 0002.
Add the fields on to screen from ZMARA
program'ZME_GUI_PO_CUST_SCREEN'.**
De comment the PBO module in screen flow logicand create the
module in above program.Add the following code in
programZME_GUI_PO_CUST_SCREEN.TABLES: ZMARA.DATA: call_subscreen
TYPE sy-dynnr, call_prog TYPE sy-repid, call_view TYPE REF TO
cl_screen_view_mm, call_view_stack TYPE REF TO cl_screen_view_mm
OCCURS
0.*---------------------------------------------------------------------**
FORM SET_SUBSCREEN_AND_PROG
**---------------------------------------------------------------------**
........
**---------------------------------------------------------------------**
--> DYNNR ** --> PROG ** --> VIEW ** --> TO ** -->
CL_SCREEN_VIEW_MM
**---------------------------------------------------------------------*FORM
set_subscreen_and_prog USING dynnr TYPE sy-dynnr prog TYPE sy-repid
view TYPE REF TO cl_screen_view_mm. call_subscreen = dynnr.
call_prog = prog. call_view =
view.ENDFORM.*&---------------------------------------------------------------------**&
Module STATUS_0002
OUTPUT*&---------------------------------------------------------------------**
text*----------------------------------------------------------------------*MODULE
STATUS_0002 OUTPUT.SELECT SINGLE * FROM MARA INTO CORRESPONDING
FIELDS OF ZMARA WHERE MATNR = '100-100'.ENDMODULE. " STATUS_0002
OUTPUT The sub-routine "set_subscreen_and_prog" is must with the
same signature. This routine is called from BADI to call the sub
screen. Activate the screen & program. Now Go to T-Code ME23N
to test the application. You can find a new tab is added in the
item level with the name CUST BADI.Final Output: