RFC-Funktionsbausteine
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Siehe Funktionsbausteine.
Funktionsbausteine können auch in einem SAP-Fremdsystem aufgerufen werden mit dem Zusatz DESTINATION, sofern der Funktionsbaustein RFC-fähig ist. Import- und Exportparameter können ganz normal wie bei jedem anderen Funktionsbaustein angesprochen werden.
Unterschied normaler Funktionsbaustein und RFC-Funktionsbaustein
Radiobutton "Remote fähiger (Funktions-)Baustein"
- Setzen des Radiobuttons "Remote fähiger Baustein" statt "Normaler Funktionsbaustein".
Definition Parameter
- Als Importparameter werden hier nur ein Transaktionsname und eine Batch-Input-Tabelle definiert.
- Die Parameter müssen bei RFC-Funktionsbausteinen mit der Checkbox "Werteübergabe" definiert werden, da keine Referenz möglich ist bei unterschiedlichen SAP-/IT-Systemen.
Im Coding gibt es lediglich eine Zeile, die den Batch-Input im Zielsystem (X11) ausführt.
Aufruf RFC-Funktionsbaustein mit DESTINATION
Mit dem Funktionsbausteinzusatz DESTINATION wird das Zielsystem angegeben, in dem sich der auszuführende Funktionsbaustein befindet.
Definition Zielsystem in RFC-Einstellungen
- Das Zielsystem (im Beispiel "X11") wird von der Basis definiert. Hier ist die Basis zu kontaktieren. Es wird in der Transaktion SM59 konfiguriert.
Beispielcoding
- Hier soll im Fremdsystem X11 ein Batch-Input ausgeführt. Dazu wird dem RFC-Funktionsbaustein ZBBATCH_INPUT ein Transaktionscode LV_TCODE und eine Batch-Input-Tabelle LT_BDCDATA mitgegeben in der Schnittstelle.
- Der Funktionsbaustein 'ZBBATCH_INPUT' existiert nur im X11.
Data: lv_TCODE type TCODE. lv_tcode = 'SE01'. ... "Coding zum Füllen der Batch-Input-Tabelle CALL FUNCTION 'ZBBATCH_INPUT' DESTINATION 'X11' EXPORTING IV_TCODE = lv_TCODE it_bdcdata = lt_bdcdata.
RFC-Funktionsbaustein mit Zusatz "starting new Task"
- Ein RFC-Funktionsbaustein kann auch im gleichen SAP-System genutzt werden, um eine Funktionalität unabhängig vom laufenden Task in einem neuen Workprozess auszuführen.
- Dies kann sinnvoll sein, wenn man in einem Report oder eine Dialoganwendung ist und eine auszuführende Funktionalität eine lange Laufzeit hat und das Ausführen im Vordergrund den User an der Ausführung seines Tagesgeschäftes hindert, bzw. einen Laufzeitfehler durch ein Timeout provozieren könnte. Hier muss beim Aufruf des Funktionsbausteins der Zusatz "starting new Task '1'" mitgegeben werden. Das Coding innerhalb des Funktionsbausteins wird dann in einem neuen Workprozess ausgeführt und das Rahmenprogramm wird sofort wieder aktiv.
- Es ist zu beachten, dass hier ein zusätzlicher Modus von dem ausführenden User benötigt wird, wenn im neuen Task ein Dynpro geöffnet wird. Der Benutzer dürfte dann also maximal 5 Modi zum Aufruf des Funktionsbausteins offen haben. Daher sollte bei dieser Variante das Öffnen eines Dynpros, wie z. B durch eine Meldung vermieden werden.
- Debuggt man das Rahmenprogramm und kommt zur Aufrufstelle des Funktionsbausteins und führt dann einen Einzelschritt (F5) aus, so springt die aktuelle Session des Debuggers über den Funktionsbausteinsbausteinaufruf - aber es öffnet sich ein zweiter Modus des Debuggers und man kann den RFC-Funktionsbaustein debuggen.
call function 'Z_FB_RFC_SCHN' starting new task '1' exporting ...
oder hier wo die Task von einem Parameter übernommen wird
CALL FUNCTION 'Z_LOG_FORMS_USED' STARTING NEW TASK i_name EXPORTING is_forms_used = ls_forms_used.
FUNCTION z_log_forms_used. *"---------------------------------------------------------------------- *"*"Lokale Schnittstelle: *" IMPORTING *" VALUE(IS_FORMS_USED) TYPE ZSYS_FORMS_USED *"---------------------------------------------------------------------- * Aufzeichnung der aufgerufenen kundeneigenen Formulare check is_forms_used-fonam is not initial. check is_forms_used-fonam(1) = 'Z' or is_forms_used-fonam(1) = 'Y'. DO 100 TIMES. CALL FUNCTION 'ENQUEUE_EZSYS_FORMS_USED' EXPORTING mode_zsys_forms_used = 'X' mandt = sy-mandt fonam = is_forms_used-fonam spras = is_forms_used-spras "Z003590, René Eberstein, 27.10.2023 formtype = is_forms_used-formtype _wait = 'X' EXCEPTIONS foreign_lock = 1 system_failure = 2 OTHERS = 3. IF sy-subrc = 0. EXIT. ENDIF. ENDDO. SELECT SINGLE * FROM zsys_forms_used INTO @DATA(ls_forms_used) WHERE fonam = @is_forms_used-fonam and spras = @is_forms_used-spras AND formtype = @is_forms_used-formtype. IF sy-subrc <> 0. ls_forms_used = VALUE #( fonam = is_forms_used-fonam spras = is_forms_used-spras formtype = is_forms_used-formtype number_calls = 1 last_call = sy-datum ). INSERT zsys_forms_used FROM ls_forms_used. ELSE. ADD 1 TO ls_forms_used-number_calls. ls_forms_used-last_call = sy-datum. UPDATE zsys_forms_used FROM ls_forms_used. ENDIF. ENDFUNCTION.
RFC-Funktionsbaustein mit Zusatz "in Background Task"
- Ein RFC-Funktionsbaustein kann auch im gleichen SAP-System genutzt werden, um eine Funktionalität unabhängig vom laufenden Task in einem neuen Workprozess auszuführen - und dies dann im Hintergrund.
- Hier muss beim Aufruf des Funktionsbausteins der Zusatz "in Background Task" mitgegeben werden. Das Coding innerhalb des Funktionsbausteins wird dann in einem neuen Workprozess ausgeführt und das Rahmenprogramm wird sofort wieder aktiv.
- Funktionsbausteine in Background-Task können keine Exporting oder Changing-Parameter haben.
- Hier kann der User auch 6 Modi offen haben.
call function 'Z_FB_RFC_SCHN' in background task exporting ...
RFC-Funktionsbaustein mit Zusatz "in Background unit"
SAP empfiehlt statt dem Zusatz "in background task" den Zusatz "in background unit".
Siehe hierzu die SAP-Hilfe.