Zdalne wywołanie funkcji (RFC) w SAP Samouczek ABAP
⚡ Inteligentne podsumowanie
Zdalne wywołanie funkcji (RFC) to SAP mechanizm komunikacji umożliwiający programowi ABAP wywołanie modułu funkcji uruchomionego w innym programie SAP lub system zewnętrzny. To abstracWykonuje połączenia sieciowe, konwertuje formaty danych i w czysty sposób informuje osobę wywołującą o awariach.
Czym jest RFC? SAP?
RFC oznacza Zdalne wywołanie funkcjiTo mechanizm, który umożliwia aplikacjom biznesowym komunikację i wymianę informacji – w predefiniowanych formatach – z innymi systemami. RFC to najpopularniejszy sposób SAP system komunikuje się z innym systemem i jest także mostem łączącym SAP systemów do nie-SAP aplikacji.
RFC oferuje dwa interfejsy:
- Interfejs wywołujący dla Programy ABAP.
- Interfejs wywoławczy dla osób niebędącychSAP programy.
Każdy program ABAP może wywołać funkcję zdalną za pomocą FUNKCJA WYWOŁANIA…CEL oświadczenie. ten DESTINATION parametr mówi SAP system, w którym wywoływana funkcja działa w innym systemie niż system ją wywołujący.
Składnia
CALL FUNCTION 'remotefunction'
DESTINATION dest
EXPORTING f1 = ...
IMPORTING f2 = ...
TABLES t1 = ...
EXCEPTIONS ...
Logiczne miejsca docelowe są definiowane za pomocą transakcji SM59 i zapisane w tabeli RFCDES.
Funkcje interfejsu RFC
Środowisko wykonawcze RFC odpowiada za trzy rzeczy przy każdym wywołaniu:
- Konwersja wszystkich danych parametrów do postaci oczekiwanej przez system zdalny.
- Wywoływanie procedur komunikacyjnych niezbędnych do komunikacji ze zdalnym systemem.
- Obsługa błędów komunikacyjnych i informowanie o nich dzwoniącego za pomocą
EXCEPTIONSparametrCALL FUNCTION.
RFC to jest SAP Protokół, który obsługuje komunikację między systemami i upraszcza związane z nią programowanie. Jest to proces wywoływania modułu funkcyjnego znajdującego się na innej maszynie niż program wywołujący. Dokumenty RFC mogą być technicznie wykorzystywane do wywoływania modułu funkcyjnego na taki sam maszyny, ale najczęściej są używane, gdy wywołujący i wywoływany program działają na oddzielnych maszynach. System interfejsu RFC służy do nawiązywania połączeń RFC między różnymi maszynami. SAP systemyJak również między SAP i zewnętrzne (nie-SAP) systemy.
Niezbędne szczegóły dotyczące RFC
- SAP używa CPIC Protokół (Common Programming Interface for Communication) do przesyłania danych między systemami. CPIC to SAP-specyficzny. RFC to interfejs komunikacyjny zbudowany na bazie CPI-C, ale z większą liczbą funkcji i bardziej przyjazną dla programistów aplikacji powierzchnią.
- Funkcje biblioteki RFC obsługują język programowania C i Visual Basic na Windows platformy.
- Połączenia RFC działają w całym systemie. Połączenie RFC zdefiniowane w kliencie 000 może być również używane z poziomu klienta 100 bez żadnych zmian.
- RFC to protokół służący do wywoływania wyspecjalizowanych podprogramów (modułów funkcyjnych) przez sieć. Moduły funkcyjne można porównać do funkcji języka C lub procedur Pascala: udostępniają zdefiniowany interfejs, za pośrednictwem którego następuje wymiana danych, tabel i kodów powrotu. Moduły funkcyjne są zarządzane wewnątrz SAP system w dedykowanej bibliotece, Kreator funkcji.
- Konstruktor funkcji (transakcja SE37) zapewnia programistom aplikacji środowisko do pisania, dokumentowania i testowanie Moduły funkcyjne, które można wywoływać lokalnie i zdalnie. System automatycznie generuje dodatkowy kod (tzw. Zaczątek RFC) potrzebne do połączeń zdalnych.
- Połączenia RFC są utrzymywane za pomocą transakcji SM59. SAP również wysyła RFC-SDK (Zestaw narzędzi do tworzenia oprogramowania) wykorzystujący rozbudowane biblioteki języka C, dzięki czemu programy zewnętrzne mogą łączyć się z SAP pomimo napiętego harmonogramu
- Jedyną różnicą pomiędzy zdalnym połączeniem z innym serwerem a połączeniem lokalnym jest
DESTINATIONparametr określający serwer docelowy, na którym program ma zostać uruchomiony.
Zalety RFC
RFC zmniejsza nakład pracy programistycznej, eliminując konieczność ponownej implementacji modułów i metod po stronie zdalnej. Warstwa RFC dba o:
- Konwersja danych do formatu zrozumiałego dla zdalnego (docelowego) systemu.
- Wywoływanie procedur potrzebnych do nawiązania komunikacji ze zdalnym systemem.
- Radzenie sobie z błędami pojawiającymi się w trakcie komunikacji.
- Zapewnia niezawodną semantykę transakcyjną w przypadku stosowania wariantów transakcyjnych lub kolejkowych.
Rodzaje RFC
SAP Obsługuje cztery warianty RFC. Każdy z nich oferuje inny kompromis między opóźnieniem, niezawodnością i gwarancjami kolejności.
1. Syncchronous RFC (sRFC)
SyncHronous RFC wymaga, aby zarówno klient, jak i serwer byli dostępni w momencie wywołania. Jest to najpopularniejszy typ i jest używany, gdy wywołujący potrzebuje wyniku natychmiast po wykonaniu.
sRFC to sposób komunikacji między systemami, w którym oczekuje się potwierdzeń. Zasoby systemu źródłowego oczekują na system docelowy i zapewniają dotarcie wiadomości z potwierdzeniem ACK. Wymieniane dane są spójne i niezawodne.
Wadą jest to, że jeśli system docelowy jest niedostępny, zasoby systemu źródłowego czekają na jego powrót, co może spowodować przejście procesów systemu źródłowego w tryb uśpienia/RFC/CPIC w systemie docelowym i zablokowanie zasobów.
Używany do:
- Komunikacja w czasie rzeczywistym pomiędzy systemami.
- Komunikacja między SAP Serwer aplikacji internetowych i SAP GUI.
2. Asynchroniczne RFC (aRFC)
Asynchroniczna komunikacja RFC to komunikacja między systemami, w której nie jest wymagane potwierdzenie — porównywalna z odrzucaniemping pocztówka na poczcie. Oba systemy nie muszą być dostępne w momencie wykonania, a wynik nie jest natychmiast zwracany do systemu wywołującego.
Zasób systemu źródłowego nie czeka na system docelowy; dostarcza dane i kontynuuje działanie. To sprawia, że aRFC jest szybki, ale sam w sobie nie jest niezawodny — dane mogą zostać utracone, jeśli system docelowy jest niedostępny.
Używany do:
- Komunikacja między systemami typu „wystrzel i zapomnij”.
- Przetwarzanie równoległe w różnych systemach.
3. Transakcyjny RFC (tRFC)
Transakcyjny RFC to szczególna forma asynchronicznego RFC. Zapewnia transakcyjną obsługę kroków przetwarzania, które w innym przypadku byłyby autonomiczne.
tRFC wykonuje wywoływany moduł funkcji na serwerze RFC dokładnie raz, nawet jeśli dane są wysyłane wielokrotnie z powodu problemów z siecią. System zdalny nie musi być dostępny w momencie uruchomienia wywołania przez klienta RFC. Komponent tRFC przechowuje wywoływaną funkcję i jej dane w… SAP baza danych w ramach unikalnego Identyfikator transakcji (TID). Jeżeli system docelowy jest niedostępny, dane są zapisywane w tabelach RFC (widocznych w transakcjach) SM58) i później odebrane przez raport harmonogramu RSARFCSE, który kursuje co 60 sekund.
Używany do:
- Rozszerzanie asynchronicznego RFC z możliwością dostarczenia maksymalnie jednorazowo.
- Niezawodna komunikacja między systemami, w której liczy się jednokrotne wykonanie polecenia.
4. Kolejkowane RFC (qRFC)
Queued RFC rozszerza tRFC, gwarantując, że poszczególne kroki są przetwarzane w kolejności określonej przez aplikację wywołującą. Aby zapewnić przetwarzanie wielu LUW (logicznych jednostek pracy/transakcji) w zamierzonej kolejności, tRFC można serializować za pomocą kolejek przychodzących i wychodzących – stąd wzięła się nazwa „queued RFC”.
Używany do:
- Rozszerzenie RFC transakcyjnego o ścisłą kolejność.
- Scenariusze, w których wymagana jest określona sekwencja przetwarzania.
- Przypadki, w których kilka transakcji musi zostać przetworzonych w ustalonej kolejności.
Porównanie typów RFC
| Typ | Dzwoniący czeka? | Niezawodny? | Zamówione? | Najlepsze dla: |
|---|---|---|---|---|
| sRFC | Tak | Tak | N/A (pojedyncze połączenie) | Wyszukiwania w czasie rzeczywistym |
| aRFC | Nie | Nie | Nie | Praca równoległa typu „wystrzel i zapomnij” |
| tRFC | Nie | Tak (dokładnie raz) | Nie | Niezawodne aktualizacje asynchroniczne |
| qRFC | Nie | Tak (dokładnie raz) | Tak | Ściśle uporządkowane aktualizacje |
Rodzaje połączeń RFC
SM59 obsługuje kilka typów połączeń. Poniżej podsumowano trzy najczęściej spotykane.
Typ 3 — ABAP-do-ABAP
Wpisy typu 3 określają połączenie między systemy ABAPNazwa hosta lub adres IP są obowiązkowe; dane logowania można podać opcjonalnie. Typ 3 ma zastosowanie zarówno do RFC między systemami ABAP, jak i do wywołań zewnętrznych do systemów ABAP.
Typ I — rówieśnik tej samej bazy danych
Wpisy typu I określają systemy ABAP, które korzystają z tej samej bazy danych co system bieżący. Wpisy te są predefiniowane i nie można ich modyfikować. Typowa nazwa wpisu wygląda następująco: ws0015_K18_24:
- ws0015 — nazwa hosta
- K18 — nazwa systemu (bazy danych)
- 24 — nazwa usługi TCP
Typ T — Program zewnętrzny
Miejsca docelowe typu T łączą się z programami zewnętrznymi, które korzystają z interfejsu API RFC do odbierania dokumentów RFC. Typ aktywacji może być następujący: Rozpocznij or Rejestracja. Jeśli jest to Start, należy podać nazwę hosta i ścieżkę programu, który ma zostać uruchomiony.
jak Code RFC
Kompleksowa kompilacja RFC składa się z pięciu kroków. Pierwsze trzy to kliknięcia mechaniczne w SE37 i SM59; dwa ostatnie dotyczą uzyskaniatracw prawo.
Krok 1: W zakładce atrybutów modułu funkcji transakcji SE37, ustaw typ przetwarzania na Moduł z obsługą zdalną aby oznaczyć moduł funkcyjny jako zgodny ze standardem RFC.
Krok 2: Napisz kod modułu funkcji w edytorze kodu źródłowego.
Krok 3: Zdefiniuj miejsce docelowe serwera RFC w systemie klienta RFC, który wywołuje funkcję zdalną — wykonuje się to w transakcji SM59.
Krok 4 — Deklarowanie parametrów: Wszystkie pola parametrów dla zdalnego modułu funkcji muszą być zdefiniowane jako pola referencyjne — czyli wpisane w odniesieniu do pól słownika ABAP. Parametry wartości nie są dozwolone w przypadku modułów funkcji z włączonym zdalnym dostępem.
Krok 5 — Wyjątki: System podnosi AWARIA_KOMUNIKACJI oraz AWARIA_SYSTEMOWA wewnętrznie w przypadku błędów na poziomie transportu. Wyjątki na poziomie aplikacji mogą być zgłaszane wewnątrz funkcji zdalnej dokładnie tak samo, jak w funkcji lokalnej.
Debugowanie zdalnych wywołań funkcji
- Jest nie można debugować zdalne wywołanie funkcji do systemu nieobsługującego ABAP w klasyczny sposób — obce środowisko wykonawcze jest nieprzejrzyste.
- Jednak w przypadku wywołań RFC ABAP-ABAP debugger ABAP może być używany do monitorowania wykonywania funkcji RFC wewnątrz zdalnego systemu.
- W przypadku wywołań zdalnych debuger ABAP (wraz z interfejsem użytkownika) działa w systemie lokalnym. Wartości danych i inne informacje dotyczące środowiska wykonawczego dla funkcji zdalnej są przesyłane strumieniowo z systemu zdalnego.
Klawisz SAP Transakcje RFC
Codzienny zestaw narzędzi RFC sprowadza się do kilku kodów T, które każdy programista ABAP i administrator Basis powinien znać odruchowo.
| Kod T | Cel |
|---|---|
| SM59 | Utrzymuj miejsca docelowe RFC — host, logowanie, typ, zabezpieczenia. |
| SE37 | Function Builder — twórz lub edytuj moduły funkcji obsługiwane zdalnie. |
| SM58 | Monitoruj nieudane zapytania RFC dotyczące transakcji i przetwarzaj je ponownie. |
| SMQ1 / SMQ2 | Monitoruj kolejki qRFC wychodzące (SMQ1) i przychodzące (SMQ2). |
| STRUST | Utrzymuj certyfikaty SSL używane przez adresy RFC chronione protokołem HTTPS. |
| ST22 | Przeprowadź inspekcję krótkich zrzutów spowodowanych nieudanymi wywołaniami zdalnymi. |
Najlepsze praktyki dla SAP RFC
Dobrze zaprojektowana warstwa RFC zapewnia szybkość, obserwowalność i łatwość rozwoju integracji. Poniższe nawyki warto wdrożyć w każdym projekcie.
- Wybierz odpowiednią odmianę oszustwatract. Użyj protokołu sRFC do wyszukiwania synchronicznego, protokołu tRFC do aktualizacji asynchronicznych wykonywanych maksymalnie jednorazowo, a protokołu qRFC, gdy zależy Ci na kolejności.
- Ponowne wykorzystanie jednego miejsca docelowego na system docelowy zamiast rozprzestrzeniania nazw hostów w wielu miejscach docelowych — umożliwia rotację poświadczeń tractabela.
- Nigdy nie koduj danych uwierzytelniających na stałe w ABAP. W miarę możliwości korzystaj z zaufanych połączeń systemowych lub bezpiecznych biletów logowania.
- Rutynowo monitoruj SM58 i SMQ2. Utknięte wpisy tRFC opóźniają procesy biznesowe do momentu ich ponownego przetworzenia.
- Przekazuj wyłącznie parametry typu referencyjnego. Parametry wartości powodują awarie modułów funkcji włączonych zdalnie.
- Użyj STRUST do zarządzania certyfikatami TLS w przypadku połączeń HTTPS — wygasłe certyfikaty są główną przyczyną tajemniczych komunikatów COMMUNICATION_FAILURE.








