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".

RFC1.JPG

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.

RFC2.JPG

Im Coding gibt es lediglich eine Zeile, die den Batch-Input im Zielsystem (X11) ausführt.

RFC3.JPG

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.

Web-Links