Funktionsbaustein dynamisch aufrufen

Es gibt zwei Arten, um einen Funktionsbaustein dynamisch aufzurufen. In Variante 1 sind alle Parameter bekannt, nur der Name des Funktionsbausteines wird erst zur Laufzeit ermittelt. Hier wird der Funktionsbaustein als eine Art Interface benutzt.

Variante 2 geht noch einen Schritt weiter. Hier wird nicht nur der Name des Fuba`s zur Laufzeit ermittelt, sondern auch die gesamte Parameterliste dynamisch erstellt.

In diesem kleinen Beispiel möchte ich zeigen, wie man einen solchen, voll dynamischen Funktionsbausteinaufruf, programmieren kann.

Ziel ist es, den Funktionsbaustein GUID_CREATE zum Erzeugen einer GUID dynamisch aufzurufen. Der Name des Funktionsbausteines wird in der Variablen lv_function_name angegeben.

In der Form do_work wird als erstes die Parameter Tabelle aufgebaut. Der Funktionsbaustein besitzt drei Importing Parameter, wobei nur der Parameter mit der 32stelligen GUID ausgelesen werden soll. Daher wird auch nur dieser Parameter in der Parameters Tabelle angegeben. Es ist darauf zu achten, dass der jeweils benötigte Feldtyp als Referenz an die Parameterliste übergeben wird. Ansonsten sind Typkonflikte vorprogrammiert.

Und das war es auch schon. Jetzt nur noch den Funktionsbaustein aufrufen und die Werte weiterverarbeiten.

*---------------------------------------------------------------------*
* Report  Z_FUBA_DYN
*
*---------------------------------------------------------------------*
*
*
*---------------------------------------------------------------------*

REPORT  z_fuba_dyn.

TYPE-POOLS: abap.

DATA: lt_parameters TYPE abap_func_parmbind_tab,
      wa_parameters TYPE abap_func_parmbind.
DATA: lv_function_name TYPE string VALUE 'GUID_CREATE'.
DATA: lv_guid_32 TYPE guid_32.

START-OF-SELECTION.
 PERFORM do_work.

END-OF-SELECTION.

*---------------------------------------------------------------------*
*      Form  do_work
*---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM do_work.
* Build dynamic parameters
 MOVE 'EV_GUID_32' TO wa_parameters-name.
 MOVE abap_func_importing TO wa_parameters-kind.
 GET REFERENCE OF lv_guid_32 INTO wa_parameters-value.
 APPEND wa_parameters TO lt_parameters.
 CLEAR: wa_parameters.

* Call function module
 CALL FUNCTION lv_function_name
  PARAMETER-TABLE
   lt_parameters.

 FREE: lt_parameters.
ENDFORM.                    "do_work

Posted on 20. März 2015 in ABAP, Blog

Back to Top