You are on page 1of 18

SAP-BODS Integration using BAPI

By Praveen Addanki, HCL-AXON


1. Introduction:
We can call SAP ERP or R/3 Remote Function Call (RFC) enabled functions, including Business
Application Programming Interface (BAPI) functions, from queries inside data flows. A Remote Function
Call is really what the word suggests: You call a function but it is remote rather than part of your code.
This is the standard way how 3rd partys tools access SAP, both for read and write. All RFCs meant to be
used

for

business

reasons,

their

function

name

starts

with

the

text

BAPI_XXXX

like

BAPI_ABSENCE_CREATE or BAPI_ABSENCE_GETDETAIL, both meant to create or display


employees absence records in HR.
If you design data flows with BAPI calls against one version of SAP ERP or R/3, then change data stores
to a later version of SAP ERP or R/3. Data Services allows this without the need to re-import the BAPI.
Any new parameters added to the function call, including additional columns in table parameters, are
added automatically to the call and filled with NULL values. Thus Data Services allows you to design jobs
that are portable between SAP ERP or R/3 systems. After you import the metadata for an SAP ERP or
R/3 function, the function is listed in the Functions category of the ERP or R/3 data store. You will also
see the function in the function wizard, listed under the data store name.
Data Services supports tables as input and output parameters for SAP ERP or R/3 RFC and BAPI
functions. The function import process automatically includes the metadata for tables included as function
parameters.
2. BAPI Call:
After you import the metadata for an SAP ERP or R/3 function, the function is listed in the Functions
category of the ERP or R/3 datastore. You will also see the function in the function wizard, listed under the
datastore name. To call a BAPI depends on the requirement; here in this document we have considered
an example of creating a CONTRACT using BAPI_CONTRACT_CREATEFROMDATA. For this BAPI, we
need to send mandatory input and Tables parameters to create a CONTRACT.
To specify a table as an input parameter to a function, the table must be an input to a query, either as a
top-level input or nested under the top-level. The table must also be available in the FROM clause of the
context where you call the function. Data Services maps columns in the input schema by name to the
columns in the table used as the function input parameter. You need only supply the columns that are
required by the function. At validation, if Data Services encounters type mismatches between supplied
columns and the function signature, it attempts to convert the given type to the expected type. For type
mismatches that it cannot resolve, Data Services produces validation errors.

3. Importing the BAPI:


Note: This entire documentation refers to IDES SAP system, refer the below screen shot for detail.

The following Process indicates how to import the BAPI.

4. Processing the BAPI:


In this BAPI the mandatory importing and Tables parameters required to create a Contract are:
1. Sales Document Type (Importing Parameter)
2. Sales Organization (Importing Parameter)
3. Distribution Channel (Importing Parameter)
4. Division (Importing Parameter)
5. CONTRACT_PARTNERS (Tables Parameter)
We can call this BAPI in a query transform and give the inputs as shown below. Before calling the BAPI
create a output schema for passing the Tables parameter as shown below.

Mapping Inside the Query from the above screen shot.

Calling the BAPI inside the Query_1 as shown below.

Select the required BAPI and pass the mandatory parameters as shown below.

To pass the tables parameter, click the arrow as shown below and map the correct schema which is
defied for partners.

Double click on the query to map with the schema.

Pass the required return parameters to check the output.

As the structure belongs to NRDM, need to unnest the structure as shown below.

Finally
created.

execute

the

JOB

to

check

the

contract

As shown above the Contract 40000227 has been created successfully. Check the same in the SAP
system using the transaction VA43.

5. Considerations in BAPI:
Consider the following issues:
All character values must be uppercase
Padding values
Assumed decimal values (QTY)
Codes are language-specific
Automatic type conversion
SAP ERP or R/3 version-specific behavior
To determine the data requirements of various SAP ERP or R/3 functions, you can read the function
requirements in the SAP GUI transaction screens:
BAPI list by functional area: bapi
BAPI and RFC source and input and output parameters: SE37

You can also determine appropriate values, such as the language-specific code values, by looking at the
table where the data is ultimately stored.
6. Calling RFCs enabled Function Module:
One solution would be to RFC-enable the function. That is a SAP provided function, I guess the better
idea is to write a new function which does nothing else than calling this function and enable RFC. For
example to call the Function module READ_TEXT which was a normal function one, copy the same
function module and make it RCF enabled. The following steps are required to enable the RFC.
Create a new function module in the transaction SE37 ZREAD_TEXT and assign to function group
ZTEST_GRP as shown.

In the attributes tab make it as RFC enabled as shown below

Call the normal function module READ_TEXT in the source code. Save it and activate it.

Now the RFC enable function module ZREAD_TEXT is ready.

Now let us see how to call this from BODS designer.


After dragging the source and connected to query then this RFC function call is done.

In the Query edition a New Function Call option is available as shown below and give the required
importing parameters.

As we have table parameter available in this Function module, we need to normalize the schema by
calling one more query as shown below.

Once the Job is executed we can see the result that has been extracted from the Function module.

You might also like