Skip to main content

Call SAP BAPI Functions

This guide shows you how to call SAP BAPI functions using ERPL. BAPIs are standardized programming interfaces that provide stable access to SAP business objects.

What are BAPIs?

BAPIs (Business Application Programming Interfaces) are standardized interfaces that enable external applications to access SAP business objects. They provide:

  • Stable Interface: BAPIs maintain backward compatibility
  • Business Logic: Encapsulate complex business processes
  • Data Validation: Built-in validation and error handling
  • Transaction Support: Support for SAP transactions

Prerequisites

Before calling BAPI functions, ensure you have:

  • ERPL extension installed and loaded
  • Active connection to SAP ERP system
  • SAP user with BAPI execution authorizations
  • Knowledge of the specific BAPI you want to call

Basic BAPI Call Syntax

The basic syntax for calling BAPI functions is:

SELECT * FROM sap_rfc_invoke(
'BAPI_FUNCTION_NAME',
{'PARAMETER1': 'value1', 'PARAMETER2': 'value2'}
);

Example: Customer Master Data BAPI

Let's call the BAPI_CUSTOMER_GETDETAIL2 BAPI to retrieve customer details:

-- Call BAPI to get customer details
SELECT * FROM sap_rfc_invoke(
'BAPI_CUSTOMER_GETDETAIL2',
{'CUSTOMERNO': '0000001000'}
);

Understanding BAPI Parameters

BAPI functions typically have different parameter types:

  1. Import Parameters: Input values
  2. Export Parameters: Output values
  3. Table Parameters: Input/output tables
  4. Changing Parameters: Input/output values

Advanced BAPI Examples

Example 1: Material Master Data

Retrieve material information using BAPI_MATERIAL_GET_DETAIL:

SELECT * FROM sap_rfc_invoke(
'BAPI_MATERIAL_GET_DETAIL',
{'MATERIAL': 'MAT-001', 'PLANT': '1000'}
);

Example 2: Sales Order Creation

Create a sales order using BAPI_SALESORDER_CREATEFROMDAT2:

-- Prepare order header data
SELECT * FROM sap_rfc_invoke(
'BAPI_SALESORDER_CREATEFROMDAT2',
{
'ORDER_HEADER_IN': {
'DOC_TYPE': 'OR',
'SALES_ORG': '1000',
'DISTR_CHAN': '10',
'DIVISION': '00'
},
'ORDER_ITEMS_IN': [
{
'ITM_NUMBER': '000010',
'MATERIAL': 'MAT-001',
'REQ_QTY': '10'
}
]
}
);

Example 3: Financial Document Posting

Post a financial document using BAPI_ACC_DOCUMENT_POST:

SELECT * FROM sap_rfc_invoke(
'BAPI_ACC_DOCUMENT_POST',
{
'DOCUMENTHEADER': {
'COMP_CODE': '1000',
'DOC_DATE': '2024-01-15',
'PSTNG_DATE': '2024-01-15',
'DOC_TYPE': 'DR'
},
'ACCOUNTGL': [
{
'ITEMNO_ACC': '0000000001',
'GL_ACCOUNT': '0000400000',
'DEBIT_CREDIT': 'S',
'AMT_DOCCUR': '1000.00'
}
]
}
);

Working with BAPI Return Values

BAPI functions return structured data including:

  • Return Messages: Success/error messages
  • Export Parameters: Output values
  • Table Parameters: Result tables

Handling Return Messages

-- Call BAPI and check return messages
WITH bapi_result AS (
SELECT * FROM sap_rfc_invoke(
'BAPI_CUSTOMER_GETDETAIL2',
{'CUSTOMERNO': '0000001000'}
)
)
SELECT
message_type,
message_id,
message_number,
message_text
FROM bapi_result
WHERE parameter_name = 'RETURN';

Processing Export Parameters

-- Extract specific export parameters
WITH bapi_result AS (
SELECT * FROM sap_rfc_invoke(
'BAPI_CUSTOMER_GETDETAIL2',
{'CUSTOMERNO': '0000001000'}
)
)
SELECT
parameter_value
FROM bapi_result
WHERE parameter_name = 'CUSTOMERADDRESS';

Error Handling

Common BAPI Errors

  1. Authorization Errors: Insufficient permissions
  2. Parameter Errors: Invalid or missing parameters
  3. Business Logic Errors: Validation failures
  4. System Errors: Technical issues

Error Handling Example

-- Call BAPI with error handling
WITH bapi_result AS (
SELECT * FROM sap_rfc_invoke(
'BAPI_CUSTOMER_GETDETAIL2',
{'CUSTOMERNO': 'INVALID_CUSTOMER'}
)
),
error_check AS (
SELECT
CASE
WHEN message_type = 'E' THEN 'ERROR'
WHEN message_type = 'W' THEN 'WARNING'
ELSE 'SUCCESS'
END as status,
message_text
FROM bapi_result
WHERE parameter_name = 'RETURN'
)
SELECT * FROM error_check;

Best Practices

1. Parameter Validation

Always validate parameters before calling BAPIs:

-- Validate customer number exists
SELECT COUNT(*) as customer_exists
FROM sap_read_table('KNA1')
WHERE KUNNR = '0000001000';

2. Transaction Handling

For BAPIs that modify data, consider transaction handling:

-- Start transaction
SELECT sap_start_transaction();

-- Call BAPI
SELECT * FROM sap_call_function(...);

-- Commit or rollback
SELECT sap_commit(); -- or sap_rollback();

3. Performance Optimization

  • Use specific BAPIs for your use case
  • Limit data retrieval with filters
  • Cache frequently used data
  • Use batch processing for multiple calls

4. Security Considerations

  • Use secure connections (SAP Router)
  • Implement proper authorization checks
  • Log BAPI calls for audit purposes
  • Validate all input parameters

BAPI Discovery

Finding Available BAPIs

  1. SAP Help: Check SAP documentation
  2. SE37 Transaction: Use SAP GUI to explore function modules
  3. BAPI Explorer: Use SAP's BAPI Explorer tool
  4. SAP Community: Search for BAPI examples

Testing BAPIs

Before using BAPIs in production:

  1. Test in Development: Always test in development system first
  2. Validate Parameters: Ensure all required parameters are provided
  3. Check Authorizations: Verify user has necessary permissions
  4. Monitor Performance: Test with realistic data volumes

Troubleshooting

Common Issues

  1. BAPI Not Found: Verify BAPI name and availability
  2. Parameter Errors: Check parameter names and types
  3. Authorization Issues: Contact SAP administrator
  4. Performance Problems: Optimize queries and use filters

Debugging Tips

-- Enable detailed logging
SET log_level = 'debug';

-- Test with minimal parameters
SELECT * FROM sap_rfc_invoke('BAPI_NAME', {});

-- Check return messages
SELECT * FROM sap_rfc_invoke(...)
WHERE parameter_name = 'RETURN';

Next Steps

Now that you understand BAPI calls, explore:

Additional Resources