SAP BAPI-vejledning – Sådan opretter du BAPI i ABAP
⚡ Smart opsummering
BAPI i SAP ABAP er en standardiseret, RFC-aktiveret metode til et forretningsobjekt, der giver eksterne applikationer adgang til R/3-processer og -data. Denne side forklarer standardiserede BAPI'er, hvordan man opretter en i SWO1, test, frigivelse og hvordan man kalder en BAPI fra ABAP.

Hvad er BAPI?
Business Application Programming Interface (BAPI) er standardiserede programmeringsgrænseflader (metoder), der gør det muligt for eksterne applikationer at få adgang til forretningsprocesser og data i R/3-systemet.
De give stabile og standardiserede metoder at opnå problemfri integration mellem R/3-systemet og eksterne applikationer, ældre systemer og tilføjelser.
BAPI'er er defineret i BOR(Business Object Repository) som metoder til SAP forretningsobjekttyper, der udfører specifikke forretningsfunktioner. De implementeres som RFC-aktiveret funktion moduler og oprettes i funktionsbyggeren i ABAP Workbench.
Nogle BAPI'er og metoder giver grundlæggende funktioner og kan bruges til de fleste SAP Business Objects. Disse kaldes STANDARDISEREDE BAPI'er.
Liste over standardiserede BAPI'er:
- BAPI'er til læsning af data – GetList() , GetDetail() , GetStatus() , ExistenceCheck()
- BAPI'er til oprettelse eller ændring af data- Create() ,Change(),Delete() og Undelete() ,
- BAPI'er til massebehandling -ChangeMultiple(), CreateMultiple(), DeleteMultiple().
Fordele ved BAPI
En BAPI foretrækkes frem for skærmbaserede teknikker, fordi det er en dokumenteret, frigivet grænseflade, der SAP forbliver stabil på tværs af udgivelser. Dette medfører adskillige praktiske fordele.
- Stabil grænseflade: Signaturen af en frigivet BAPI ændres ikke ved en opgradering, så det kaldende program fortsætter med at virke.
- Genbrug af forretningslogik: En BAPI kører de samme valideringer som transaktionen, så de data, der tilføjes via den, forbliver ensartede.
- Fjernbetjening aktiveret: Da en BAPI er et RFC-aktiveret funktionsmodul, kan det kaldes fra et andet SAP system, en Java eller .NET-program eller en webtjeneste.
- Ingen skærmafhængighed: I modsætning til en batch-inputoptagelse bryder en BAPI ikke, når et skærmlayout ændres.
Med konceptet og dets fordele klare, opbygger næste afsnit en BAPI trin for trin.
Sådan opretter du en BAPI
Trin 1) Gå til transaktion swo1 (Værktøjer->Business Framework -> BAPI Development ->Business Object builder). Vælg forretningsobjektet i henhold til det funktionelle krav, som BAPI'en oprettes for.
Trin 2) Åbn forretningsobjektet i ændringstilstand. Vælg derefter Hjælpeprogrammer -> API-metoder -> Tilføj metode. Indtast derefter navnet på funktionsmodulet og vælg Fortsæt.
Trin 3) I den næste dialogboks skal følgende oplysninger angives:
- Metode: Foreslå et passende navn til metoden,
- Tekster : Indtast beskrivelse for BAPI,
- Radioknapper: Dialog, Syncærlig, instans-uafhængig. BAPI'er implementeres normalt synkront.
Trin 4) For at oprette metoden skal du vælge Ja i den næste dialogboks.
Trin 5) Efter at programmet er blevet genereret og udført, skal du kontrollere programmet i den metode, der lige er oprettet. Således oprettes en BAPI.
Test af BAPI
Du kan teste BAPI ved Test den individuelle metode for Business Object i Business Object Builder. (eller man kan bruge transaktionen 'SWUD' til at teste metoden).
Frigivelse og frysning af BAPI
- For at frigive BAPI'en skal du først frigive funktionsmodulet (ved hjælp af transaktion se37).
- Indstil status for metoden til 'frigivet' i Business Object Builder (ved hjælp af transaktion SWo1 – Rediger-> skift status-> frigivet. )
Du kan også bruge BAPI Explorer (Transaktionskode BAPI) til 360′-visning på BAPI
Sådan kalder du en BAPI i ABAP
En BAPI kaldes ligesom ethvert RFC-aktiveret funktionsmodul. Den vigtige regel er, at en BAPI aldrig udsteder sit eget COMMIT WORK, så kalderen skal bekræfte ændringen med BAPI_TRANSACTION_COMMIT eller kassere den med BAPI_TRANSACTION_ROLLBACK. Eksemplet nedenfor opretter en salgsordre med en standard BAPI.
DATA: ls_header TYPE bapisdhd1, lt_items TYPE STANDARD TABLE OF bapisditm, lt_return TYPE STANDARD TABLE OF bapiret2, lv_order TYPE vbeln. * Fill the header and item structures, then call the BAPI CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' EXPORTING order_header_in = ls_header IMPORTING salesdocument = lv_order TABLES order_items_in = lt_items return = lt_return. * A BAPI does not commit on its own - decide based on the return table READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF.
⚠️ Advarsel: Kontrollér altid RETURN-tabellen for en besked af typen E eller A, før du foretager en commit. Kald af BAPI_TRANSACTION_COMMIT efter en fejl gemmer et ufuldstændigt dokument, hvilket er en af de mest almindelige BAPI-fejl.
BAPI vs. BDC vs. RFC
En BAPI, en BDC, og en almindelig RFC flytter alle data ind i SAP, men de adskiller sig i stabilitet og i hvad de genbruger. Tabellen nedenfor sammenligner dem.
| Kriterier | BAPI | BDC | RFC (brugerdefineret) |
|---|---|---|---|
| grænseflade | Frigivet metode for et forretningsobjekt | Skærmsekvens for en transaktion | Ethvert brugerdefineret funktionsmodul |
| Stabilitet ved opgradering | Garanteret for frigivne BAPI'er | Afbrydes, hvis en skærm ændres | Afhænger af udvikleren |
| Fjernbetjening aktiveret | Ja | Ingen | Ja |
| Forretningsvalidering | Fuld, samme som transaktionen | Fuld, kører de faktiske skærme | Kun hvad udvikleren koder |
| Bedste for | Stabil integration og grænseflader | Indlæsninger hvor der ikke findes en BAPI | Tilpassede punkt-til-punkt-tjenester |
Tommelfingerreglen er at bruge en frigivet BAPI, når en sådan findes, falde tilbage på en BDC, når den ikke findes, og reservere brugerdefinerede RFC'er til skræddersyede tjenester.





