Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Programmierbeispiel für aRFC   Dokument im Navigationsbaum lokalisieren

Das folgende Beispiel zeigt eine parallele asynchrone Verarbeitung des Funktionsbausteins RFC_SYSTEM_INFO über asynchrone Remote Function Calls.

Es erfolgen zehn Aufrufe, die durch unterschiedliche Aufgabenkennungen name in jeweils eigenen Workprozessen ablaufen. In der Callback-Routine rfc_info werden die beendeten Funktionsbausteine gezählt und Informationen über das Zielsystem empfangen.

Durch den Zusatz GROUP DEFAULT wird die Ausführung auf alle Applikationsserver des aktuellen Systems verteilt. Ist nach mindestens einem erfolgreichen Aufruf kein freier Workprozess mehr vorhanden, wird die Ausführung des Programms unterbrochen, bis alle bis dahin gestarteten Funktionsbausteine beendet wurden. Diese Unterbrechung ist auf maximal 5 Sekunden begrenzt.

Nach dem Start aller Funktionsbausteine wird gewartet, bis alle Callback-Routinen ausgeführt wurden. Danach wird die dort gefüllte interne Tabelle task_list ausgegeben. Die Ausgabe zeigt, in welcher Reihenfolge die einzelnen Aufgaben beendet und auf welchem Applikationsserver sie jeweils ausgeführt wurden.

 

TYPES: BEGIN OF task_type,
         name  TYPE string,
         dest  TYPE string,
       END OF task_type.

DATA: snd_jobs  TYPE i,
      rcv_jobs  TYPE i,
      exc_flag  TYPE i,
      info      TYPE rfcsi,
      mess      TYPE c LENGTH 80,
      indx      TYPE c LENGTH 4,
      name      TYPE c LENGTH 8,
      task_list TYPE STANDARD TABLE OF task_type,
      task_wa   TYPE task_type.

DO 10 TIMES.
  indx = sy-index.
  CONCATENATE 'Task' indx INTO name.
  CALL FUNCTION 'RFC_SYSTEM_INFO'
    STARTING NEW TASK name
    DESTINATION IN GROUP DEFAULT
    PERFORMING rfc_info ON END OF TASK
    EXCEPTIONS
      system_failure        = 1  MESSAGE mess
      communication_failure = 2  MESSAGE mess
      resource_failure      = 3.
  CASE sy-subrc.
    WHEN 0.
      snd_jobs = snd_jobs + 1.
    WHEN 1 OR 2.
      MESSAGE mess TYPE 'I'.
    WHEN 3.
      IF snd_jobs >= 1 AND
         exc_flag = 0.
        exc_flag = 1.
        WAIT UNTIL rcv_jobs > = snd_jobs
             UP TO 5 SECONDS.
      ENDIF.
      IF sy-subrc = 0.
        exc_flag = 0.
      ELSE.
        MESSAGE 'Resource failure' TYPE 'I'.
      ENDIF.
    WHEN OTHERS.
      MESSAGE 'Other error' TYPE 'I'.
  ENDCASE.
ENDDO.

WAIT UNTIL rcv_jobs >= snd_jobs.
LOOP AT task_list INTO task_wa.
  WRITE: / task_wa-name, task_wa-dest.
ENDLOOP.

FORM rfc_info USING name.
  task_wa-name = name.
  rcv_jobs = rcv_jobs + 1.
  RECEIVE RESULTS FROM FUNCTION 'RFC_SYSTEM_INFO'
    IMPORTING
      rfcsi_export = info
    EXCEPTIONS
      system_failure        = 1 MESSAGE mess
      communication_failure = 2 MESSAGE mess.
  IF sy-subrc = 0.
    task_wa-dest = info-rfcdest.
  ELSE.
    task_wa-dest = mess.
  ENDIF.
  APPEND task_wa TO task_list.
ENDFORM.



 

 

 

Ende des Inhaltsbereichs