Functieoproep op afstand (RFC) in SAP ABAP-zelfstudie
⚡ Slimme samenvatting
Remote Function Call (RFC) is de SAP communicatiemechanisme waarmee een ABAP-programma een functiemodule kan aanroepen die op een andere server draait. SAP of extern systeem. Het abstracHet verzorgt de netwerkinfrastructuur, converteert gegevensformaten en geeft eventuele fouten op een overzichtelijke manier door aan de beller.

Wat is RFC in SAP?
RFC staat voor Externe functieaanroepHet is het mechanisme waarmee bedrijfsapplicaties kunnen communiceren en informatie kunnen uitwisselen – in vooraf gedefinieerde formaten – met andere systemen. RFC is de meest gebruikelijke manier waarop men SAP Het systeem communiceert met een ander systeem en vormt tevens de brug die de verbinding legt. SAP systemen naar niet-SAP toepassingen.
RFC biedt twee interfaces:
- Een aanroepinterface voor ABAP-programma's.
- Een aanroepinterface voor niet-SAP 's.
Elk ABAP-programma kan een externe functie aanroepen met behulp van de OPROEPFUNCTIE…BESTEMMING uitspraak. De DESTINATION parameter vertelt de SAP systeem dat aangeeft dat de aangeroepen functie op een ander systeem draait dan de aanroeper.
Syntaxis
CALL FUNCTION 'remotefunction'
DESTINATION dest
EXPORTING f1 = ...
IMPORTING f2 = ...
TABLES t1 = ...
EXCEPTIONS ...
Logische bestemmingen worden gedefinieerd via een transactie. SM59 en opgeslagen in tabel RFCDES.
Functies van de RFC-interface
De RFC-runtime is bij elke aanroep verantwoordelijk voor drie dingen:
- Alle parametergegevens omzetten naar de weergave die het externe systeem verwacht.
- Het oproepen van de communicatieroutines die nodig zijn om met het externe systeem te praten.
- Het afhandelen van communicatiefouten en deze aan de beller kenbaar maken via de
EXCEPTIONSparameter vanCALL FUNCTION.
RFC is de SAP Een protocol dat de communicatie tussen systemen regelt en de bijbehorende programmering vereenvoudigt. Het is het proces waarbij een functiemodule wordt aangeroepen die zich op een andere machine bevindt dan het aanroepende programma. RFC's kunnen technisch gezien worden gebruikt om een functiemodule aan te roepen op de computer waarop het programma zich bevindt. dezelfde RFC-interfaces worden gebruikt om verbindingen tot stand te brengen tussen verschillende machines, maar ze worden meestal gebruikt wanneer de aanroepende en aangeroepen programma's op aparte machines draaien. SAP oplossingen, Alsmede tussen SAP en extern (niet-SAP) systemen.
Belangrijke informatie over RFC
- SAP gebruikt CPIC CPIC is een protocol (Common Programming Interface for Communication) voor het overdragen van gegevens tussen systemen. SAP-specifiek. RFC is een communicatie-interface gebouwd bovenop CPI-C, maar met meer functies en een gebruiksvriendelijkere interface voor applicatieprogrammeurs.
- De RFC-bibliotheekfuncties ondersteunen de C programmeertaal en Visual Basic op Windows platforms.
- RFC-verbindingen werken in het hele systeem. Een RFC-verbinding die is gedefinieerd in client 000 kan ook zonder problemen vanuit client 100 worden gebruikt.
- RFC is het protocol voor het aanroepen van gespecialiseerde subroutines (functiemodules) via het netwerk. Functiemodules zijn vergelijkbaar met C-functies of Pascal-procedures: ze bieden een gedefinieerde interface waarmee gegevens, tabellen en retourcodes worden uitgewisseld. Functiemodules worden beheerd binnen de RFC. SAP systeem in een speciale bibliotheek, de Functiebouwer.
- De functiebouwer (transactie) SE37) biedt applicatieprogrammeurs een omgeving voor het schrijven, documenteren en het testen van Functiemodules die zowel lokaal als op afstand kunnen worden aangeroepen. Het systeem genereert automatisch de aanvullende code (de RFC-stub) nodig voor gesprekken op afstand.
- RFC-verbindingen worden onderhouden met behulp van transacties. SM59. SAP verzendt ook een RFC-SDK (Software Development Kit) die gebruikmaakt van uitgebreide C-bibliotheken, zodat externe programma's verbinding kunnen maken met de SAP systeem.
- Het enige verschil tussen een externe aanroep naar een andere server en een lokale aanroep is de
DESTINATIONparameter, die de doelserver specificeert waarop het programma moet worden uitgevoerd.
Voordelen van RFC
RFC vermindert de programmeerinspanning doordat het niet langer nodig is om modules en methoden op afstand opnieuw te implementeren. De RFC-laag zorgt voor:
- De gegevens omzetten naar een formaat dat het externe (doel)systeem kan begrijpen.
- De routines aanroepen die nodig zijn om de communicatie met het externe systeem tot stand te brengen.
- Het afhandelen van fouten die zich voordoen tijdens de communicatie.
- Het leveren van betrouwbare transactionele semantiek bij gebruik van transactionele of wachtrijvarianten.
Soorten RFC
SAP Ondersteunt vier RFC-varianten. Elke variant biedt een andere afweging tussen latentie, betrouwbaarheid en volgordegaranties.
1. Syncchronologische RFC (sRFC)
SyncEen chronologische RFC vereist dat zowel de client als de server beschikbaar zijn op het moment van de aanroep. Het is het meest voorkomende type en wordt gebruikt wanneer de aanroeper het resultaat direct na de uitvoering nodig heeft.
sRFC is een communicatiemethode tussen systemen waarbij bevestigingen worden verwacht. De resources van het bronsysteem wachten op het doelsysteem en zorgen ervoor dat het bericht aankomt met een ACK. De uitgewisselde gegevens zijn consistent en betrouwbaar.
Het nadeel is dat als het doelsysteem niet beschikbaar is, de resources van het bronsysteem wachten tot het weer beschikbaar is. Dit kan ertoe leiden dat processen van het bronsysteem op het doelsysteem in de slaapstand (Sleep/RFC/CPIC) terechtkomen en resources blokkeren.
Gebruikt voor:
- Realtime communicatie tussen systemen.
- Communicatie tussen de SAP Webapplicatieserver en de SAP GUI.
2. Asynchrone RFC (aRFC)
Asynchrone RFC is communicatie tussen systemen waarbij geen bevestiging vereist is — vergelijkbaar met drop.ping een briefkaart per post. Beide systemen hoeven niet beschikbaar te zijn op het moment van uitvoering, en het resultaat wordt niet onmiddellijk teruggestuurd naar het aanroepende systeem.
De bronbron wacht niet op het doelsysteem; hij levert de gegevens en gaat verder. Dit maakt aRFC snel, maar op zichzelf niet betrouwbaar — gegevens kunnen verloren gaan als het doelsysteem niet beschikbaar is.
Gebruikt voor:
- Communicatie tussen systemen die je na het plaatsen van een bericht kunt vergeten.
- Parallelle verwerking over verschillende systemen.
3. Transactionele RFC (tRFC)
Transactionele RFC is een speciale vorm van asynchrone RFC. Het zorgt voor een transactieachtige afhandeling van verwerkingsstappen die anders autonoom zouden verlopen.
tRFC voert de aangeroepen functiemodule precies één keer uit op de RFC-server, zelfs als de gegevens meerdere keren worden verzonden vanwege netwerkproblemen. Het externe systeem hoeft niet beschikbaar te zijn op het moment dat de RFC-client de aanroep uitvoert. De tRFC-component slaat de aangeroepen functie en de bijbehorende gegevens op in de SAP database onder een unieke Transactie-ID (TID)Als het doelsysteem niet beschikbaar is, worden de gegevens naar RFC-tabellen geschreven (zichtbaar in transactie ...). SM58) en later opgepikt door het planningsrapport RSARFCSE, wat elke 60 seconden gebeurt.
Gebruikt voor:
- Het uitbreiden van asynchrone RFC met levering op maximaal één moment.
- Betrouwbare communicatie tussen systemen waar eenmalige uitvoering van belang is.
4. Queued RFC (qRFC)
Queued RFC is een uitbreiding van tRFC die garandeert dat individuele stappen worden verwerkt in de volgorde die is gespecificeerd door de aanroepende applicatie. Om ervoor te zorgen dat meerdere LUW's (Logical Units of Work / transacties) in de beoogde volgorde worden verwerkt, kan tRFC worden geserialiseerd met behulp van inkomende en uitgaande wachtrijen – vandaar de naam "queued RFC".
Gebruikt voor:
- Het uitbreiden van Transactional RFC met strikte volgorde.
- Scenario's waarin een vooraf bepaalde verwerkingsvolgorde verplicht is.
- Situaties waarin meerdere transacties in een vooraf bepaalde volgorde moeten worden verwerkt.
RFC-typevergelijking
| Type | Wacht de beller? | Betrouwbaar? | Besteld? | beste voor |
|---|---|---|---|---|
| sRFC | Ja | Ja | Niet van toepassing (eenmalige oproep) | Realtime zoekopdrachten |
| aRFC | Nee | Nee | Nee | Inschakelen en vergeten, parallel werken |
| tRFC | Nee | Ja (precies één keer) | Nee | Betrouwbare asynchrone updates |
| qRFC | Nee | Ja (precies één keer) | Ja | Strikt geordende updates |
Soorten RFC-verbindingen
SM59 ondersteunt verschillende verbindingstypen. De drie meest voorkomende worden hieronder samengevat.
Type 3 — ABAP-naar-ABAP
Invoer van type 3 specificeert de verbinding tussen ABAP-systemenDe hostnaam of het IP-adres is verplicht; inloggegevens kunnen optioneel worden opgegeven. Type 3 is van toepassing op zowel RFC's tussen ABAP-systemen als op externe aanroepen naar ABAP-systemen.
Type I — Peer met dezelfde database
Type I-vermeldingen specificeren ABAP-systemen die dezelfde database delen als het huidige systeem. Deze vermeldingen zijn vooraf gedefinieerd en kunnen niet worden gewijzigd. Een typische vermeldingnaam ziet er als volgt uit: ws0015_K18_24:
- ws0015 — hostnaam
- K18 — systeemnaam (databasenaam)
- 24 — TCP-servicenaam
Type T — Extern programma
Type T-bestemmingen maken verbinding met externe programma's die de RFC API gebruiken om RFC's te ontvangen. Het activeringstype kan zijn: Start or RegistratieAls het om 'Start' gaat, moeten de hostnaam en het pad van het te starten programma worden opgegeven.
Hoe werkt het? Code een RFC
Het bouwen van een RFC van begin tot eind bestaat uit vijf stappen. De eerste drie zijn mechanische muisklikken in SE37 en SM59; de laatste twee gaan over het verkrijgen van de contract rechts.
Stap 1: In het tabblad 'Functiemodule-attributen' van de transactie SE37, stel het verwerkingstype in op Module met afstandsbediening om de functiemodule als RFC-compatibel te markeren.
Stap 2: Schrijf de code voor de functiemodule in de broncode-editor.
Stap 3: Definieer de bestemming van de RFC-server in het RFC-clientsysteem dat de externe functie aanroept — dit wordt gedaan in de transactie SM59.
Stap 4 — Parameters declareren: Alle parametervelden voor een functieblok op afstand moeten worden gedefinieerd als referentievelden, oftewel getypeerd op basis van velden uit het ABAP-woordenboek. Waardeparameters zijn niet toegestaan voor functieblokken die op afstand kunnen worden aangeroepen.
Stap 5 — Uitzonderingen: Het systeem verhoogt COMMUNICATIEFOUT en SYSTEEMFOUT Intern worden fouten op transportniveau afgehandeld. Uitzonderingen op applicatieniveau kunnen binnen een externe functie op dezelfde manier worden gegenereerd als binnen een lokale functie.
Foutopsporing bij externe functieaanroepen
- Het is niet mogelijk om te debuggen Een functieaanroep op afstand naar een niet-ABAP-systeem op de klassieke manier — de externe runtime is ondoorzichtig.
- Voor ABAP-naar-ABAP RFC-aanroepen kan de ABAP-debugger echter worden gebruikt om de uitvoering van de RFC-functie in het externe systeem te bewaken.
- Bij externe aanroepen draait de ABAP-debugger (inclusief de gebruikersinterface) op het lokale systeem. Gegevenswaarden en andere runtime-informatie voor de externe functie worden vanaf het externe systeem teruggestuurd.
sleutel SAP RFC-transacties
De dagelijkse RFC-toolbox komt neer op een handvol T-codes die elke ABAP-ontwikkelaar en Basis-beheerder automatisch zou moeten kennen.
| T-code | Doel |
|---|---|
| SM59 | Beheer de RFC-bestemmingen: host, aanmelding, type en beveiliging. |
| SE37 | Function Builder — maak of bewerk functiemodules die op afstand toegankelijk zijn. |
| SM58 | Bewaak mislukte transactionele RFC's en verwerk ze opnieuw. |
| SMQ1 / SMQ2 | Bewaak de uitgaande (SMQ1) en inkomende (SMQ2) qRFC-wachtrijen. |
| VERTROUWEN | Onderhoud de SSL-certificaten die worden gebruikt door HTTPS-beveiligde RFC-bestemmingen. |
| ST22 | Onderzoek korte dumps die zijn veroorzaakt door mislukte externe aanroepen. |
Beste praktijken voor SAP RFC
Een goed ontworpen RFC-laag zorgt ervoor dat integraties snel, inzichtelijk en gemakkelijk te ontwikkelen zijn. De volgende gewoontes zijn het waard om in elk project te integreren.
- Kies de juiste variant voor de contract. Gebruik sRFC voor synchrone opzoekingen, tRFC voor asynchrone updates die maximaal één keer plaatsvinden, en qRFC wanneer de volgorde van belang is.
- Hergebruik één bestemming per doelsysteem. In plaats van hostnamen over veel bestemmingen te verspreiden, maakt dit de rotatie van inloggegevens eenvoudiger. tractafel.
- Codeer nooit inloggegevens Gebruik in ABAP vertrouwde systeemverbindingen of beveiligde aanmeldtickets waar mogelijk.
- Controleer SM58 en SMQ2 regelmatig. Vastgelopen tRFC-items vertragen stilletjes bedrijfsprocessen totdat ze opnieuw worden verwerkt.
- Geef alleen parameters van het type referentie door. Waardeparameters verstoren functiemodules die op afstand kunnen worden aangestuurd.
- Gebruik STRUST om TLS-certificaten te beheren. Voor HTTPS-bestemmingen zijn verlopen certificaten een belangrijke oorzaak van mysterieuze COMMUNICATION_FAILURE-dumps.







