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.

  • ๐Ÿ“ก Meccanismo principale: CALL FUNCTIONโ€ฆDESTINATION richiama un modulo funzione su una destinazione logica definita in SM59.
  • ๐Ÿ” Quattro varianti: SyncRFC cronologico, asincrono, transazionale e in coda garantiscono ciascuno una diversa modalitร  di consegnatract.
  • ๐ŸŒ Tipi di connessione: SM59 supporta il Tipo 3 (ABAP-to-ABAP), il Tipo I (peer sullo stesso database) e il Tipo T (programmi esterni).
  • ๏ธ Percorso di costruzione: Imposta il modulo funzione su "Abilitato per l'accesso remoto" in SE37, codificalo e definisci la destinazione in SM59 sul chiamante.
  • ๐Ÿค– Angolo dell'IA: Gli assistenti basati sull'intelligenza artificiale generano stub ABAP RFC a partire da specifiche in linguaggio naturale e analizzano gli errori SM58 trasformandoli in soluzioni attuabili.

Funzioni dell'interfaccia RFC

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:

  1. Un'interfaccia di chiamata per Programmi ABAP.
  2. 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

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 EXCEPTIONS parametro di CALL FUNCTION.

Comunicazione RFC tra SAP di riferimento

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 DESTINATION parametro 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

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

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.

Modulo SE37 con funzionalitร  di controllo remoto

Passo 2: Scrivi il codice per il modulo funzione nell'editor del codice sorgente.

Codice sorgente del modulo funzionale

Passo 3: Definire la destinazione del server RFC nel sistema client RFC che chiama la funzione remota โ€” fatto nella transazione SM59.

Configurazione della destinazione 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.

DOMANDE FREQUENTI

RFC รจ il protocollo di basso livello che chiama qualsiasi modulo funzione abilitato per il controllo remoto. Una BAPI รจ specifica, SAP- modulo funzione certificato che espone un metodo stabile dell'oggetto business: ogni BAPI รจ esposta tramite RFC, ma non ogni chiamata RFC raggiunge una BAPI.

Una RFC attendibile รจ una destinazione SM59 in cui il sistema di destinazione si fida dell'autenticazione del chiamante, quindi non viene scambiata alcuna password a ogni chiamata. Il contesto utente del chiamante viene propagato. Elimina le credenziali hardcoded a costo di una configurazione piรน rigorosa.

SM58 visualizza le voci RFC transazionali non riuscite o in sospeso in attesa di essere rielaborate. Ogni riga contiene l'ID della transazione, il modulo funzione chiamato, la destinazione, il testo dell'errore e l'ora dell'ultimo tentativo.

No. Per impostazione predefinita, il traffico RFC non รจ crittografato. Per crittografare il traffico รจ necessario configurare SNC (Secure Network Communications) o le destinazioni TLS/HTTPS. SNC รจ il meccanismo standard per gli ambienti di produzione.

tRFC garantisce che una chiamata venga eseguita esattamente una volta, ma non preserva l'ordine tra le chiamate. qRFC si basa su tRFC e, in aggiunta, serializza le chiamate tramite code in entrata o in uscita, in modo che vengano eseguite nell'esatta sequenza definita dall'applicazione.

Sรฌ. I programmi esterni possono registrarsi a un SAP gateway utilizzando l'SDK RFC (JCo per Java, NCo per .NET o l'SDK C). SAP quindi li richiama tramite una destinazione di tipo T proprio come qualsiasi modulo funzione ABAP.

Gli assistenti basati sull'IA generano stub ABAP RFC a partire da specifiche in linguaggio naturale, propongono il tipo di destinazione corretto per uno scenario e traducono il testo degli errori SM58 in un elenco concreto di soluzioni, velocizzando cosรฌ il lavoro di integrazione quotidiano per i team Basis e ABAP.

Sรฌ. Fornisci a un assistente AI il dump ST22 o l'errore SM58 e questo correlerร  i modelli COMMUNICATION_FAILURE / SYSTEM_FAILURE con le cause principali piรน probabili (certificato scaduto, gateway non disponibile, autorizzazione mancante) e suggerirร  il codice transazione (T-code) pertinente da esaminare.

Riassumi questo post con: