Chiamata di funzione remota (RFC) in SAP Tutorial ABAP
โก Riepilogo intelligente
La chiamata di funzione remota (RFC) รจ la SAP meccanismo di comunicazione che consente a un programma ABAP di richiamare un modulo funzione in esecuzione su un altro SAP o sistema esterno. ร assolutotracgestisce l'infrastruttura di rete, converte i formati dei dati e segnala gli errori al chiamante in modo chiaro.
Che cos'รจ RFC in SAP?
RFC sta per Chiamata tramite funzione remotaร il meccanismo che consente alle applicazioni aziendali di comunicare e scambiare informazioni, in formati predefiniti, con altri sistemi. RFC รจ il modo piรน comune per SAP il sistema parla con un altro, ed รจ anche il ponte che collega SAP sistemi a non-SAP applicazioni.
RFC offre due interfacce:
- Un'interfaccia di chiamata per Programmi ABAP.
- Un'interfaccia di chiamata per non-SAP programmi.
Qualsiasi programma ABAP puรฒ richiamare una funzione remota utilizzando il FUNZIONE CHIAMATAโฆDESTINAZIONE dichiarazione. Il DESTINATION il parametro dice a SAP sistema in cui la funzione chiamata viene eseguita su un sistema diverso da quello del chiamante.
Sintassi
CALL FUNCTION 'remotefunction'
DESTINATION dest
EXPORTING f1 = ...
IMPORTING f2 = ...
TABLES t1 = ...
EXCEPTIONS ...
Le destinazioni logiche sono definite tramite transazione SM59 e memorizzato nella tabella RFCDES.
Funzioni dell'interfaccia RFC
Il runtime RFC รจ responsabile di tre cose ad ogni chiamata:
- Conversione di tutti i dati dei parametri nel formato previsto dal sistema remoto.
- Chiamando le routine di comunicazione necessarie per parlare con il sistema remoto.
- Gestire gli errori di comunicazione e mostrarli al chiamante attraverso il
EXCEPTIONSparametro diCALL FUNCTION.
RFC รจ il SAP protocollo che gestisce la comunicazione tra sistemi e semplifica la programmazione correlata. ร il processo di chiamata di un modulo funzione che risiede su una macchina diversa dal programma chiamante. Gli RFC possono essere tecnicamente utilizzati per chiamare un modulo funzione su stesso macchina, ma vengono utilizzati piรน spesso quando i programmi chiamante e chiamato vengono eseguiti su macchine separate. Il sistema di interfaccia RFC viene utilizzato per stabilire connessioni RFC tra diverse SAP di riferimento, Nonchรฉ tra SAP e esterno (non-SAP) sistemi.
Informazioni essenziali su RFC
- SAP utilizza l' CPIC protocollo (Common Programming Interface for Communication) per trasferire dati tra sistemi. CPIC รจ SAP-specifico. RFC รจ un'interfaccia di comunicazione basata su CPI-C, ma con piรน funzioni e un'interfaccia piรน intuitiva per i programmatori di applicazioni.
- Le funzioni della libreria RFC supportano il file Linguaggio di programmazione C. e Visual Basic su Windows piattaforme.
- Le connessioni RFC funzionano su tutto il sistema. Una connessione RFC definita nel client 000 puรฒ essere utilizzata anche dal client 100 senza alcuna differenza.
- RFC รจ il protocollo per la chiamata di subroutine specializzate (moduli funzione) sulla rete. I moduli funzione sono paragonabili alle funzioni C o alle procedure Pascal: espongono un'interfaccia definita attraverso la quale vengono scambiati dati, tabelle e codici di ritorno. I moduli funzione sono gestiti all'interno del SAP sistema in una biblioteca dedicata, il Generatore di funzioni.
- Il generatore di funzioni (transazione) SE37) fornisce ai programmatori di applicazioni un ambiente per scrivere, documentare e analisi moduli funzione che possono essere chiamati sia localmente che in remoto. Il sistema genera automaticamente il codice aggiuntivo (il RFC stub) necessario per le chiamate remote.
- Le connessioni RFC vengono mantenute tramite transazione SM59. SAP spedisce anche un RFC-SDK (Software Development Kit) che utilizza ampie librerie C in modo che i programmi esterni possano connettersi al SAP .
- L'unica differenza tra una chiamata remota a un altro server e una chiamata locale รจ la
DESTINATIONparametro che specifica il server di destinazione su cui il programma deve essere eseguito.
Vantaggi di RFC
RFC riduce lo sforzo di programmazione eliminando la necessitร di reimplementare moduli e metodi sul lato remoto. Il livello RFC si occupa di:
- Conversione dei dati in un formato comprensibile al sistema remoto (di destinazione).
- Richiamo delle routine necessarie per stabilire la comunicazione con il sistema remoto.
- Gestione degli errori che si verificano durante la comunicazione.
- Garantire una semantica transazionale affidabile quando vengono utilizzate varianti transazionali o in coda.
Tipi di RFC
SAP Supporta quattro varianti RFC. Ognuna offre un diverso compromesso tra latenza, affidabilitร e garanzie di ordinamento.
1. SyncRFC cronologico (sRFC)
SyncLa RFC cronologica richiede che sia il client che il server siano disponibili al momento della chiamata. ร il tipo piรน comune e viene utilizzato ogni volta che il chiamante necessita del risultato immediatamente dopo l'esecuzione.
sRFC รจ un mezzo di comunicazione tra sistemi in cui รจ previsto uno scambio di conferme di ricezione. Le risorse del sistema sorgente attendono sul sistema di destinazione che il messaggio arrivi con una conferma di ricezione (ACK). I dati scambiati sono coerenti e affidabili.
Lo svantaggio รจ che, se il sistema di destinazione non รจ disponibile, le risorse del sistema sorgente attendono il suo ritorno, il che puรฒ portare i processi del sistema sorgente in modalitร Sleep/RFC/CPIC sul sistema di destinazione e bloccare le risorse.
Usato per:
- Comunicazione in tempo reale tra i sistemi.
- Comunicazione tra il SAP Server di applicazioni Web e il SAP GUI.
2. RFC asincrona (aRFC)
RFC asincrono รจ una comunicazione tra sistemi in cui non รจ richiesto alcun riconoscimento, paragonabile a dropping una cartolina imbucata. Entrambi i sistemi non devono essere disponibili al momento dell'esecuzione e il risultato non viene restituito immediatamente al sistema chiamante.
La risorsa del sistema sorgente non attende il sistema di destinazione; invia i dati e prosegue. Questo rende aRFC veloce, ma non affidabile di per sรฉ: i dati potrebbero andare persi se il sistema di destinazione non รจ disponibile.
Usato per:
- Comunicazione "fire-and-forget" tra sistemi.
- Elaborazione parallela tra sistemi.
3. RFC transazionale (tRFC)
RFC transazionale รจ una forma speciale di RFC asincrona. Garantisce una gestione simile a una transazione delle fasi di elaborazione che altrimenti sarebbero autonome.
tRFC esegue il modulo funzione chiamato sul server RFC esattamente una volta, anche se i dati vengono inviati piรน volte a causa di problemi di rete. Il sistema remoto non deve essere disponibile nel momento in cui il client RFC esegue la chiamata. Il componente tRFC memorizza la funzione chiamata e i relativi dati nel SAP database sotto un unico ID della transazione (TID). Se il sistema di destinazione non รจ disponibile, i dati vengono scritti nelle tabelle RFC (visibili nella transazione SM58) e successivamente ripreso dal report dello scheduler RSARFCSE, che viene eseguito ogni 60 secondi.
Usato per:
- Estensione delle RFC asincrone con consegna al massimo una volta.
- Comunicazione affidabile tra sistemi in cui l'esecuzione "exactly-one" รจ fondamentale.
4. RFC in coda (qRFC)
Il Queued RFC estende il tRFC garantendo che i singoli passaggi vengano elaborati nella sequenza specificata dall'applicazione chiamante. Per assicurare che piรน LUW (unitร logiche di lavoro/transazioni) vengano elaborate nell'ordine previsto, il tRFC puรฒ essere serializzato utilizzando code in entrata e in uscita, da cui deriva il nome "Queued RFC".
Usato per:
- Estensione delle RFC transazionali con ordinamento rigoroso.
- Scenari in cui รจ obbligatoria una sequenza di elaborazione definita.
- Casi in cui diverse transazioni devono essere elaborate in un ordine predefinito.
Confronto dei tipi RFC
| Tipo | Chiamante in attesa? | Affidabile? | Ordinato? | migliori Per |
|---|---|---|---|---|
| sRFC | Si | Si | N/D (chiamata singola) | Ricerche in tempo reale |
| aRFC | Non | Non | Non | Fuoco e dimentica, lavoro parallelo |
| tRFC | Non | Sรฌ (esattamente una volta) | Non | Aggiornamenti asincroni affidabili |
| qRFC | Non | Sรฌ (esattamente una volta) | Si | Aggiornamenti rigorosamente ordinati |
Tipi di connessioni RFC
SM59 supporta diversi tipi di connessione. I tre che incontrerete piรน frequentemente sono riassunti di seguito.
Tipo 3 โ Da ABAP ad ABAP
Le voci di tipo 3 specificano la connessione tra Sistemi ABAPIl nome host o l'indirizzo IP sono obbligatori; le informazioni di accesso possono essere fornite facoltativamente. Il tipo 3 รจ applicabile sia per le RFC tra sistemi ABAP sia per le chiamate esterne verso sistemi ABAP.
Tipo I โ Peer dello stesso database
Le voci di tipo I specificano i sistemi ABAP che condividono lo stesso database del sistema corrente. Queste voci sono predefinite e non possono essere modificate. Un nome di voce tipico รจ simile a ws0015_K18_24:
- ws0015 โ nome host
- K18 โ nome del sistema (database)
- 24 โ Nome del servizio TCP
Tipo T โ Programma esterno
Le destinazioni di tipo T si connettono a programmi esterni che utilizzano l'API RFC per ricevere RFC. Il tipo di attivazione puรฒ essere Inizio or RegistrazioneSe si seleziona Avvia, รจ necessario specificare il nome host e il percorso del programma da avviare.
Come Code un RFC
La costruzione end-to-end di un RFC ha cinque fasi. Le prime tre sono clic meccanici in SE37 e SM59; le ultime due riguardano l'ottenimento del contract giusto.
Passo 1: Nella scheda degli attributi del modulo funzione della transazione SE37, impostare il tipo di elaborazione su Modulo abilitato per il controllo remoto per contrassegnare il modulo funzione come compatibile con RFC.
Passo 2: Scrivi il codice per il modulo funzione nell'editor del codice sorgente.
Passo 3: Definire la destinazione del server RFC nel sistema client RFC che chiama la funzione remota โ fatto nella transazione SM59.
Passaggio 4 โ Dichiarazione dei parametri: Tutti i campi parametro per un modulo funzione remoto devono essere definiti come campi di riferimento, ovvero tipizzati rispetto ai campi del Dizionario ABAP. I parametri di valore non sono consentiti per i moduli funzione abilitati per l'accesso remoto.
Fase 5 โ Eccezioni: Il sistema solleva GUASTO DI COMUNICAZIONE and GUASTO DEL SISTEMA internamente in caso di errori a livello di trasporto. Le eccezioni a livello di applicazione possono essere sollevate all'interno di una funzione remota esattamente come in una locale.
Debug delle chiamate di funzioni remote
- ร non รจ possibile eseguire il debug una chiamata di funzione remota a un sistema non ABAP nel modo classico: il runtime esterno รจ opaco.
- Tuttavia, per le chiamate RFC da ABAP ad ABAP, รจ possibile utilizzare il debugger ABAP per monitorare l'esecuzione della funzione RFC all'interno del sistema remoto.
- Con le chiamate remote, il debugger ABAP (inclusa la sua interfaccia utente) viene eseguito sul sistema locale. I valori dei dati e altre informazioni di runtime per la funzione remota vengono trasmessi in streaming dal sistema remoto.
Le SAP Transazioni RFC
Il kit di strumenti RFC di uso quotidiano si riduce a una manciata di codici transazione (T-code) che ogni sviluppatore ABAP e amministratore Basis dovrebbe conoscere a memoria.
| Codice T | Missione |
|---|---|
| SM59 | Gestire le destinazioni RFC: host, logout, tipo, sicurezza. |
| SE37 | Function Builder: crea o modifica moduli funzione abilitati per il controllo remoto. |
| SM58 | Monitorare le richieste RFC transazionali non riuscite e rielaborarle. |
| SMQ1 / SMQ2 | Monitorare le code qRFC in uscita (SMQ1) e in entrata (SMQ2). |
| FIDUCIA | Gestire i certificati SSL utilizzati dalle destinazioni RFC protette da HTTPS. |
| ST22 | Esaminare i dump di memoria causati da chiamate remote non riuscite. |
migliori pratiche per SAP RFC
Un livello RFC ben progettato mantiene le integrazioni veloci, osservabili e facili da evolvere. Vale la pena integrare le seguenti abitudini in ogni progetto.
- Scegli la variante giusta per il contract. Utilizza sRFC per le ricerche sincrone, tRFC per gli aggiornamenti asincroni "al massimo una volta" e qRFC quando l'ordine รจ importante.
- Riutilizzare una destinazione per ogni sistema di destinazione anzichรฉ distribuire i nomi host su molte destinazioni, effettua la rotazione delle credenziali tractabella.
- Non inserire mai le credenziali direttamente nel codice. In ABAP, ove possibile, utilizzare connessioni di sistema affidabili o ticket di accesso sicuri.
- Monitorare regolarmente SM58 e SMQ2. Le voci tRFC bloccate ritardano silenziosamente i processi aziendali fino a quando non vengono rielaborate.
- Passare solo parametri di tipo riferimento. I parametri di valore interrompono i moduli funzione abilitati per l'accesso remoto.
- Utilizza STRUST per gestire i certificati TLS. Per le destinazioni HTTPS, i certificati scaduti sono una delle principali cause di misteriosi dump COMMUNICATION_FAILURE.








