Google+ Facebook Twitter MySpace SC

Thursday, January 10, 2013

SAP-BODS Integration using BAPI


SAP-BODS Integration using BAPI

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 party’s 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 employee’s 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 table’s 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 execute the JOB to check the contract created.
 
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 RFC’s 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.



No comments:

Post a Comment