You are on page 1of 45

BAPI & RFC

What is BAPI ?
BAPI stands for Business Application Programming Interface it is precisely defined interface providing access to processes and data in business application systems such as R/3. BAPIs are the standard interfaces and they play important role in the exchange of business data between SAP components, and between SAP and non-SAP components.

BAPIs are defined as API methods of SAP Objects. These objects and their BAPIs are described and stored in the Business Object Repository (BOR).

Naming Convention of BAPI


BAPIs are identified by the name of the business object type followed by the name of the BAPI. (BAPI names describe what the BAPI does to the business object). A period separates the two parts of the name.

For example, the full name of the BAPI CheckAvailability() of the business object Material is: Material.CheckAvailability().

Uses of BAPI
BAPIs can be called within the R/3 System from external application systems and other programs. A BAPI call can either be made as an object oriented method call or as a remote function call (RFC). The Business Framework - the open, component-based architecture, which allows software components from SAP and third parties to interact and integrate with each other, is becoming more and more important. SAP business objects are accessed through BAPIs (Business Application Programming Interfaces), which are stable, standardized methods. SAP business objects and their BAPIs provide an object-oriented view of R/3 business functions.

RFC (Remote Function Call)


A remote function call is a call to a function module running in a system different from the caller's. The remote function can also be called from within the same system (as a remote call), but usually caller and callee will be in different systems. In the SAP System, the ability to call remote functions is provided by the Remote Function Call interface system (RFC). RFC allows for remote calls between two SAP Systems (R/3 or R/2), or between an SAP System and a non-SAP System.

BAPI & RFC (Comparison)


Difference between RFC and BAPI are business objects. We create business objects and those are then registered in our 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 we only specify the business object and its method from external system in 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.

BAPI & RFC (Comparison) Cont..


Remote Function Calls (RFCs):
RFC is the protocol used by SAP for remote communication, that is, for communications between remote (independent) systems. RFC is used for communications between two independent SAP systems, or for communications between an SAP system and a non-SAP system, such as an external application. It can also be used for communications between modules on the same system. Using the RFC interfaces you can extend the functionality of R/3 applications from an external program. Compared to using the GUI interfaces, using RFC interfaces requires more knowledge of the business logic of the R/3 applications with which you are integrating the external application. External programs using RFCs can either make or receive remote function calls to or from an SAP system. Therefore, using RFCs an external program can act as either the client or the server to an SAP system. Conversely, the SAP system can take the role of either the client or the server to the external application. Using RFCs requires knowledge of ABAP programming, because calling a remote function in R/3 is calling an ABAP function.

BAPI & RFC (Comparison) Cont..


BAPI:
R/3 systems contain a set of business objects, which are an object-oriented representation of real-world business objects. Examples of business objects are a purchase requisition, or an employee. The advantage of using BAPIs over using RFCs is that using BAPIs requires no ABAP programming knowledge. You use BAPIs from standard programming languages such as C++ and Java. Using BAPIs also offers the most stability to your application, because BAPIs stay consistent over different R/3 releases.

Synchronous/Asynchronous
BAPI:
Updation: Synchronous Process: Asynchronous

RFC:
Synchronous: This type of RFC executes the function call based
on synchronous communication, meaning that the systems involved must both be available at the time the call is made. Synchronous communication can be implemented in function calls that require the immediate return of data to the sender system.

Asynchronous: the receiving system does not necessarily have to


be available at the time a function call is dispatched from the sender system. The receiving system can receive and process the call at a later time.

Creating a BAPI
Steps for creating a BAPI: T code to create a BAPI is: BAPI. Step 1: Define Structure For The BAPI Step 2: Write Function Module Step 3: Create the API Method Step 4: Final Steps

Creating a BAPI Cont


Step1: Define a structure for BAPI
In this step structures for the parameters and tables of the function module used for the BAPI are defined. Go to T code SE11 Datatype -> Structure

Enter the Structure name

Click on create button

Creating a BAPI Cont

Select Structure

Click continue

Creating a BAPI Cont

Save it and Activate it

Creating a BAPI Cont


Step2: Write Function Module
Each BAPI must have its own function group. Under the attributes tab remember to select Processing Type Remote Enabled module, otherwise the function module cannot be invoked via RFC and used as a BAPI. Import/Export parameters can only be BY VALUE for an RFC enabled function module.

Creating a BAPI Cont


Creating Function Group:
SE37 is the T Code for creating Function Module. SE37 -> Goto -> Function Groups -> Create Group.

Creating a BAPI Cont


Type Function Group name

Save

Creating a BAPI Cont


Type FM name and click on create

Give Function Group name and save it

Creating a BAPI Cont

Make the function Remote Enabled

Creating a BAPI Cont


Import Parameters:

Tables:

Check Pass Value

Press Enter

Creating a BAPI Cont


Source Code:

Save it and Activate it

Creating a BAPI Cont


Step 3: Create the API Method Using The BAPI WIZARD BAPI wizard is used to expose the remote function module as a BAPI and it will generate some additional code, so the function module is a valid method of the BOR. This allows the BAPI to be called as a workflow method in addition to be called by an outside program. Each function module corresponds to a method in the BOR

Creating a BAPI Cont


T Code to create the Business Object Builder: SWO1. We can either create the new Object type as a subtype of an existing business object or create a new business object from scratch.

Creating a new BAPI Object:

T Code SWO1

Supertype not required because we are creating a new Object.

* For cross Applications

Creating a BAPI Cont


When we create the business object a standard interface, an attribute ObjectType and the methods ExistenceCheck and Display are automatically generated. These cannot be changed.

Creating a BAPI Cont


Adding API Method:
Utilities
-> API Methods -> Add Method

Select Here

Creating a BAPI Cont


Give the name of Function Module:

Click Here

Creating a BAPI Cont

Click Here

Creating a BAPI Cont

API Method Added

Now, Select the BAPI Object

Creating a BAPI Cont


Change release status To Implemented
Edit -> Change Release Status -> Object Type -> To Implemented

Creating a BAPI Cont


Change release status To released
Edit -> Change Release Status -> Object Type -> To Released

Creating a BAPI Cont


Implementing API Method:

Select API Method

Creating a BAPI Cont


Change release status To implemented
Edit -> Change Release Status -> Object Type Component -> To Implemented

Creating a BAPI Cont


Change release status To released
Edit -> Change Release Status -> Object Type Component -> To Released

Creating a BAPI Cont


Generating API Method

Click on Generate Button

Creating a BAPI Cont

Now we can write codes for interface in VB, Java, C++ etc.

BAPI for SAP to SAP System


Step 1: Give the Transaction BAPI
After giving the Transaction BAPI, well get following screen:

Now based on our requirement we have to search for BAPI, Here we are going to search for BAPI related to Purchase Order. Purchase order is in MM so we select that from the list. We have to get purchase order detail, So Double click on the GetDetail. The right frame will show the BAPI name. Materials Management -> Purchasing -> Purchase Order -> GetDetail

Now Expand The GetList by pressing > , you will get the screen as below
We need Purchase Order Header detail, double Click Header, we will get Right Frame with the Dictionary Reference. The Dictionary Reference is BAPIEKKO. We can see the fields by Double clicking that BAPIEKKO.

Note down the Fields name from the Components Column those are required in the report.

Frequently used BAPI:


Sales and Distribution:
Customer Material Info: BAPI_CUSTMATINFO_GETDETAILM Sales Order: BAPI_SALESORDER_GETLIST

Sales Order: BAPI_SALESORDER_GETSTATUS

Material Management:
Purchase Req Item: BAPI_REQUIREMENT_GET_LIST Purchasing info: BAPI_INFORECORD_GETLIST

Purchase order: BAPI_PO_GETDETAIL

Production and Planning:


Planned order: BAPI_PLANNEDORDER_GET_DETAIL Planned Indep Reqmt: BAPI_REQUIREMENTS_GETDETAIL

Finance:
AP Account: BAPI_AP_ACC_GETOPENITEMS Debtor Credit: Account BAPI_CR_ACC_GETDETAIL AR Account: BAPI_AR_ACC_GETOPENITEMS

ABAP Report using BAPI (in SE38)


REPORT ZBAPI1. DATA : BEGIN OF I_POITEM OCCURS 0. INCLUDE STRUCTURE BAPIEKPO. DATA : END OF I_POITEM. PARAMETERS P_EBELN LIKE EKKO-EBELN default '4500012164'. CALL FUNCTION 'BAPI_PO_GETDETAIL' EXPORTING PURCHASEORDER = P_EBELN * ITEMS = 'X' * ACCOUNT_ASSIGNMENT = ' ' * SCHEDULES = ' ' * HISTORY = ' ' * ITEM_TEXTS = ' ' * HEADER_TEXTS = ' ' * SERVICES = ' ' * CONFIRMATIONS = ' ' * SERVICE_TEXTS = ' ' * EXTENSIONS = ' ' * IMPORTING * PO_HEADER = * PO_ADDRESS = TABLES * PO_HEADER_TEXTS = PO_ITEMS = I_POITEM. " Assign the Internal Table * PO_ITEM_ACCOUNT_ASSIGNMENT = * PO_ITEM_SCHEDULES = * PO_ITEM_CONFIRMATIONS = * PO_ITEM_TEXTS = . * PO_ITEM_HISTORY = * PO_ITEM_HISTORY_TOTALS = * PO_ITEM_LIMITS = * PO_ITEM_CONTRACT_LIMITS = * PO_ITEM_SERVICES = * PO_ITEM_SRV_ACCASS_VALUES = * RETURN = * PO_SERVICES_TEXTS = * EXTENSIONOUT =

ABAP Report using BAPI (in SE38) Cont


LOOP AT I_POITEM. WRITE :/ 'PO NUMBER = ' , I_POITEM-PO_NUMBER COLOR COL_HEADING, / 'ITEM = ' , I_POITEM-PO_ITEM, / 'MATERIAL NAME = ' , I_POITEM-MATERIAL, / 'MATERIAL = ' , I_POITEM-PUR_MAT, / 'CHANGED ON = ', I_POITEM-CHANGED_ON, / 'SHORT TEXT = ' , I_POITEM-SHORT_TEXT, / 'COMPANY CODE = ' , I_POITEM-CO_CODE, / 'PLANT = ' , I_POITEM-PLANT, / 'MATERIAL GROUP = ' , I_POITEM-MAT_GRP, / 'QUANTITY = ' , I_POITEM-QUANTITY LEFT-JUSTIFIED, / 'UNIT = ' , I_POITEM-UNIT, / 'NET PRICE = ' , I_POITEM-NET_PRICE LEFT-JUSTIFIED. ULINE. ENDLOOP.

Note: We can write any number of fields from the Dictionary BAPIEKPO in the output, just Note the field and give that in the Write statement within LOOP ENDLOOP.

Output of the Report

Testing the Report:


Give transaction ME23 and give the Purchase order number, We can see the details of the report there.

Click Here

Testing the Report Cont

Thank You

You might also like