‎2007 Nov 01 4:09 PM
Hi
Can anybody give me step by step guide as how to use bapis that are already existing.
Regards
abaper
‎2007 Nov 01 7:54 PM
Hello
In order to understand how BAPIs work you need to know how the corresponding transaction works and which are its mandatory input values. For example, BAPI_USER_CREATE1 corresponds to transaction SU01 (Create SAP user). To create a user in dialog you need to provide at least
- last name
- password
- user type
The same mandatory input needs to be fed to the BAPI's interface. Therefore, I like to describe BAPI's as <i>"dialog without dialog"</i>.
In contrast to normal (RFC-enabled) function modules BAPIs never raise any exceptions. Instead, they collect the messages and return them, usually as TABLES parameter (e.g. RETURN of type BAPIRET2).
Most BAPIs do not execute a commit work. Thus, if the returned messages do not indicate any problem you have to commit work yourself.
Example of a remotely called BAPI:
CALL FUNCTION 'BAPI_USER_CREATE1' destination '<rfc destination>'
EXPORTING
...
IMPORTING
...
TABLES
return = lt_return
EXCEPTIONS
system_failure = 1 MESSAGE ld_rfc_msg
communication_failure = 2 MESSAGE ld_rfc_msg.
" Note: when the BAPI is called via RFC add the default exceptions for RFC-calls
IF ( syst-subrc NE 0 ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
destination '<rfc destination>'.
ELSE.
LOOP AT lt_return TRANSPORTING NO FIELDS
WHERE ( type CA 'AEX' ). " abort, error, dump message
EXIT.
ENDLOOP.
IF ( syst-subrc = 0 ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
destination '<rfc destination>'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
destination '<rfc destination>'
EXPORTING
wait = 'X'. " 'X' = synchronous, ' ' = asynchronous
ENDIF.
ENDIF.
Please note that when you call BAPIs remotely you have to do data conversion (external -> internal) yourself. For example, if you use BAPI_MATERIAL_SAVEDATA then you have to convert an external material number (e.g. '12345678') into the internal format with leading zeros.
Regards
Uwe
‎2007 Nov 01 7:54 PM
Hello
In order to understand how BAPIs work you need to know how the corresponding transaction works and which are its mandatory input values. For example, BAPI_USER_CREATE1 corresponds to transaction SU01 (Create SAP user). To create a user in dialog you need to provide at least
- last name
- password
- user type
The same mandatory input needs to be fed to the BAPI's interface. Therefore, I like to describe BAPI's as <i>"dialog without dialog"</i>.
In contrast to normal (RFC-enabled) function modules BAPIs never raise any exceptions. Instead, they collect the messages and return them, usually as TABLES parameter (e.g. RETURN of type BAPIRET2).
Most BAPIs do not execute a commit work. Thus, if the returned messages do not indicate any problem you have to commit work yourself.
Example of a remotely called BAPI:
CALL FUNCTION 'BAPI_USER_CREATE1' destination '<rfc destination>'
EXPORTING
...
IMPORTING
...
TABLES
return = lt_return
EXCEPTIONS
system_failure = 1 MESSAGE ld_rfc_msg
communication_failure = 2 MESSAGE ld_rfc_msg.
" Note: when the BAPI is called via RFC add the default exceptions for RFC-calls
IF ( syst-subrc NE 0 ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
destination '<rfc destination>'.
ELSE.
LOOP AT lt_return TRANSPORTING NO FIELDS
WHERE ( type CA 'AEX' ). " abort, error, dump message
EXIT.
ENDLOOP.
IF ( syst-subrc = 0 ).
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
destination '<rfc destination>'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
destination '<rfc destination>'
EXPORTING
wait = 'X'. " 'X' = synchronous, ' ' = asynchronous
ENDIF.
ENDIF.
Please note that when you call BAPIs remotely you have to do data conversion (external -> internal) yourself. For example, if you use BAPI_MATERIAL_SAVEDATA then you have to convert an external material number (e.g. '12345678') into the internal format with leading zeros.
Regards
Uwe
‎2007 Nov 02 3:43 AM
Hi Abap,
Go to the below link for BAPI.
<a href="http://help.sap.com/saphelp_nw04/helpdata/en/e0/9eb2370f9cbe68e10000009b38f8cf/frameset.htm">Bapi_help_link</a>
How to use a standard Bapi is :
1. Go to SE37 give the BAPI name and see its documentation.
2. Assert which parameters are mandatory
3. Execute the bapi and give test data
4. It should create a record with your test data
5. Then send the same data in the same order programatically.
I am giving the code below for your reference.
*&---------------------------------------------------------------------*
*& Report ZBAPI_CREATE_PO *
*& *
*&---------------------------------------------------------------------*
*& Program demonstrates the BAPI call to create Purchase Order *
*& Minimum required parameters are used are as per the current *
*& system configuration *
*&---------------------------------------------------------------------*
REPORT ZBAPI_CREATE_PO .
*&---------------------------------------------------------------------*
*DATA DECLARATION
CONSTANTS : C_X VALUE 'X'.
*Structures to hold PO header data
DATA : HEADER LIKE BAPIMEPOHEADER ,
HEADERX LIKE BAPIMEPOHEADERX .
*Internal Tables to hold PO ITEM DATA
DATA : ITEM LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE,
ITEMX LIKE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE,
*Internal table to hold messages from BAPI call
RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
data : w_header(40) value 'PO Header'.
data : ws_langu like sy-langu.
*text-001 = 'PO Header' - define as text element
selection-screen begin of block b1 with frame title text-001.
parameters : company like header-comp_code default '2700' ,
doctyp like HEADER-DOC_TYPE default 'NB' ,
cdate like HEADER-CREAT_DATE default sy-datum ,
vendor like HEADER-VENDOR default '0010000023',
pur_org like HEADER-PURCH_ORG default '2700' ,
pur_grp like HEADER-PUR_GROUP default '001' .
selection-screen end of block b1.
selection-screen begin of block b2 with frame title text-002.
parameters : item_num like ITEM-PO_ITEM default '00001',
material like ITEM-MATERIAL default 'CRANE' ,
plant like ITEM-PLANT default '2700' ,
quantity like ITEM-QUANTITY default 100.
selection-screen end of block b2.
*&---------------------------------------------------------------------*
START-OF-SELECTION.
*&---------------------------------------------------------------------*
*DATA POPULATION
*&---------------------------------------------------------------------*
ws_langu = sy-langu. "Language variable
*POPULATE HEADER DATA FOR PO
HEADER-COMP_CODE = company .
HEADER-DOC_TYPE = doctyp .
HEADER-CREAT_DATE = cdate .
HEADER-VENDOR = vendor .
HEADER-LANGU = ws_langu .
HEADER-PURCH_ORG = pur_org .
HEADER-PUR_GROUP = pur_grp .
*&---------------------------------------------------------------------*
*POPULATE HEADER FLAG.
*&---------------------------------------------------------------------*
HEADERX-comp_code = c_x.
HEADERX-doc_type = c_x.
HEADERX-creat_date = c_x.
HEADERX-vendor = c_x.
HEADERX-langu = c_x.
HEADERX-purch_org = c_x.
HEADERX-pur_group = c_x.
HEADERX-doc_date = c_x.
*&---------------------------------------------------------------------*
*POPULATE ITEM DATA.
*&---------------------------------------------------------------------*
ITEM-PO_ITEM = item_num.
ITEM-MATERIAL = material.
ITEM-PLANT = plant.
ITEM-QUANTITY = quantity.
APPEND ITEM.
*&---------------------------------------------------------------------*
*POPULATE ITEM FLAG TABLE
*&---------------------------------------------------------------------*
ITEMX-PO_ITEM = item_num.
ITEMX-MATERIAL = C_X.
ITEMX-PLANT = C_X .
ITEMX-STGE_LOC = C_X .
ITEMX-QUANTITY = C_X .
ITEMX-TAX_CODE = C_X .
ITEMX-ITEM_CAT = C_X .
ITEMX-ACCTASSCAT = C_X .
APPEND ITEMX.
*&---------------------------------------------------------------------*
*BAPI CALL
*&---------------------------------------------------------------------*
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
POHEADER = HEADER
POHEADERX = HEADERX
* POADDRVENDOR =
* TESTRUN =
* IMPORTING
* EXPPURCHASEORDER =
* EXPHEADER =
* EXPPOEXPIMPHEADER =
TABLES
RETURN = RETURN
POITEM = ITEM
POITEMX = ITEMX.
*&---------------------------------------------------------------------*
*Confirm the document creation by calling database COMMIT
*&---------------------------------------------------------------------*
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
* IMPORTING
* RETURN =
.
end-of-selection.
*&---------------------------------------------------------------------*
*Output the messages returned from BAPI call
*&---------------------------------------------------------------------*
LOOP AT RETURN.
WRITE / RETURN-MESSAGE.
ENDLOOP.
Reward points if useful,
Aleem.