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.

  • 📡 Kernmechanisme: CALL FUNCTION…DESTINATION roept een functiemodule aan op een logische bestemming die is gedefinieerd in SM59.
  • 🔁 Vier varianten: SyncChronologische, asynchrone, transactionele en wachtrij-RFC's garanderen elk een andere leveringsmethode.tract.
  • 🌐 Verbindingstypen: SM59 ondersteunt Type 3 (ABAP-naar-ABAP), Type I (peers binnen dezelfde database) en Type T (externe programma's).
  • ️ Bouwpad: Stel de functiemodule in op 'Remote-enabled' in SE37, programmeer deze en definieer de bestemming in SM59 op de aanroeper.
  • 🤖 AI-hoek: AI-assistenten genereren ABAP RFC-stubs op basis van specificaties in natuurlijke taal en analyseren SM58-fouten tot bruikbare oplossingen.

Functies van de RFC-interface

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:

  1. Een aanroepinterface voor ABAP-programma's.
  2. 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

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 EXCEPTIONS parameter van CALL FUNCTION.

RFC-communicatie tussen SAP oplossingen

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 DESTINATION parameter, 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

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

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.

SE37 Module met afstandsbediening

Stap 2: Schrijf de code voor de functiemodule in de broncode-editor.

Broncode van de functiemodule

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.

SM59 bestemmingsinstelling

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.

Veelgestelde vragen

RFC is het low-level protocol waarmee elke functiemodule met remote-functionaliteit kan worden aangeroepen. Een BAPI is een specifieke functiemodule. SAP-gecertificeerde functiemodule die een stabiele business object-methode beschikbaar stelt — elke BAPI wordt beschikbaar gesteld via RFC, maar niet elke RFC-aanroep bereikt een BAPI.

Een Trusted RFC is een SM59-bestemming waarbij het doelsysteem de authenticatie van de beller vertrouwt, waardoor er bij elk gesprek geen wachtwoord wordt uitgewisseld. De gebruikerscontext van de beller wordt doorgegeven. Dit elimineert hardgecodeerde inloggegevens, ten koste van een strengere configuratie.

SM58 toont mislukte of in behandeling zijnde transactionele RFC-vermeldingen die opnieuw verwerkt moeten worden. Elke regel bevat de transactie-ID, de aangeroepen functiemodule, de doelbestemming, de foutmelding en het tijdstip van de laatste herhaalpoging.

Nee. Standaard is RFC-verkeer niet versleuteld. SNC (Secure Network Communications) of TLS/HTTPS-bestemmingen moeten geconfigureerd zijn om het verkeer te versleutelen. SNC is het standaardmechanisme voor productieomgevingen.

tRFC garandeert dat een aanroep precies één keer wordt uitgevoerd, maar behoudt de volgorde niet tussen aanroepen. qRFC bouwt voort op tRFC en serialiseert bovendien aanroepen via inkomende of uitgaande wachtrijen, zodat aanroepen in de exacte volgorde worden uitgevoerd die de applicatie heeft gedefinieerd.

Ja. Externe programma's kunnen zich registreren bij een SAP gateway die gebruikmaakt van de RFC SDK (JCo voor Java, NCo voor .NET, of de C SDK). SAP Vervolgens roept het deze aan via een bestemming van type T, net zoals elke ABAP-functiemodule.

AI-assistenten genereren ABAP RFC-stubs op basis van specificaties in natuurlijke taal, stellen het juiste bestemmingstype voor een scenario voor en vertalen SM58-fouttekst naar een concrete lijst met oplossingen. Dit versnelt de dagelijkse integratiewerkzaamheden voor Basis- en ABAP-teams.

Ja. Voer de ST22-dump of SM58-fout in bij een AI-assistent, en deze koppelt de patronen COMMUNICATION_FAILURE / SYSTEM_FAILURE aan de meest waarschijnlijke oorzaken — verlopen certificaat, gateway niet beschikbaar, ontbrekende autorisatie — en stelt de relevante T-code voor om te onderzoeken.

Vat dit bericht samen met: