Im Customizing der SAP IS-H Organisationsmittelverwaltung wird die Möglichkeit geboten, kundenspezifische Funktionsbausteine zu nutzen, mit der die Formularausgabe gesteuert wird.
Beispiel:
* Customer-FuB aufrufen
CALL FUNCTION print_rnfor-fbprint
EXPORTING
dialog = dialog
i_rnexl = i_rnexl
i_rnanz1 = i_rnanz1
nfal = nfal
npat = ls_npat_pseudo "EhP5 Pseudon
i_rnf01 = rnf01
i_rnf02 = rnf02
i_rnf04 = rnf04
i_rnf05 = rnf05
i_rnf15 = rnf15
i_rnf19 = rnf19
i_tn01 = i_tn01
i_print_rnfor = print_rnfor
IMPORTING
abbruch = abbruch
print_error = print_error
TABLES
nbewtab = nbewtab
ndiatab = ndiatab.
Da ich ein Fan der Übergabe einer schmalen, verschachtelten Druckstruktur (Felder, Strukturen, Tabellen in einer einzigen Struktur) ans Formular bin, stelle sich mir die Aufgabe, diese Daten so einfach wie möglich in meine Druckstruktur zu übergeben.
Beispiel Formularschnittstelle:
Dazu bediente ich mich an der folgenden SAP Methode:
cl_fb_function_utility=>meth_get_interface
Mit dieser Methode lese ich die Schnittstellenparameter aus meinem kundenspezifischen Funktionsbaustein und der Formularschnittstelle.
* Lesen der Schnittstellenparameter
CALL METHOD cl_fb_function_utility=>meth_get_interface
EXPORTING
im_name = lv_im_name
IMPORTING
ex_interface = E_INTERFACE
EXCEPTIONS
error_occured = 1
object_not_existing = 2
OTHERS = 3.
Dann folgt noch die dynamische Übergabe:
*************************************************
* PDF Druck - Ermitteln der Importparameter
*************************************************
CALL METHOD zcl_form_druck=>get_import_params
EXPORTING
i_fm_name = lv_fm_name
i_name_parameter = 'I_PD'
i_import_flg = abap_true
IMPORTING
e_import_params = ls_import_param.
IF ls_import_param IS NOT INITIAL.
*************************************************
* Dynamische Referenz der Druckstruktur erstellen
*************************************************
CREATE DATA ls_ref TYPE (ls_import_param-structure).
ASSIGN ls_ref->* TO <fs_pd>.
IF <fs_pd> IS ASSIGNED.
*************************************************
* Komponenten der Druckstruktur lesen
*************************************************
CLEAR: lcl_struc, lt_comp[].
lcl_struc ?= cl_abap_structdescr=>describe_by_data( <fs_pd> ).
lt_comp = lcl_struc->get_components( ).
*************************************************
* Formularschnittstelle dynamisch füllen
*************************************************
LOOP AT lt_comp ASSIGNING <fs_comp>.
CLEAR lv_structure.
lv_structure = <fs_comp>-type->get_relative_name( ).
*************************************************
* Importparameter dynamisch übergeben
*************************************************
LOOP AT ls_interface-import ASSIGNING <fs_parameter>
WHERE structure = lv_structure.
ASSIGN (<fs_parameter>-parameter) TO <fs_quelle>.
ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE <fs_pd> TO <fs_ziel>.
* Zuweisung durchführen
IF <fs_quelle> IS ASSIGNED AND <fs_ziel> IS ASSIGNED.
TRY.
<fs_ziel> = <fs_quelle>.
ENDTRY.
UNASSIGN <fs_quelle>.
UNASSIGN <fs_ziel>.
ENDIF.
ENDLOOP.
**************************************************
** Tabellenparameter dynamisch übergeben
**************************************************
LOOP AT ls_interface-tables ASSIGNING <fs_parameter>
WHERE structure = lv_structure.
lv_tablename = <fs_parameter>-parameter && '[]'.
ASSIGN (lv_tablename) TO <fs_quelle>.
ASSIGN COMPONENT <fs_comp>-name OF STRUCTURE <fs_pd> TO <fs_ziel>.
* Zuweisung durchführen
IF <fs_quelle> IS ASSIGNED AND <fs_ziel> IS ASSIGNED.
TRY.
<fs_ziel> = <fs_quelle>.
ENDTRY.
UNASSIGN <fs_quelle>.
UNASSIGN <fs_ziel>.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
ENDIF.
Folgende Datendeklarationen habe ich vorgenommen:
* Datendeklaration
DATA: lv_fm_name TYPE funcname,
ls_fp_outputparams TYPE sfpoutputparams,
ls_fm_docparams TYPE sfpdocparams,
ls_fpformoutput TYPE fpformoutput,
ls_import_param TYPE rsfbpara,
ls_structure TYPE objectname,
ls_ref TYPE REF TO data,
lv_error TYPE xfeld,
lv_subrc TYPE sy-subrc,
ls_interface TYPE rsfbintfv,
lv_tablename(30) TYPE c,
ls_tn01 TYPE tn01,
ls_rnf19 TYPE rnf19,
lv_structure TYPE string,
lcl_struc TYPE REF TO cl_abap_structdescr,
lt_comp TYPE cl_abap_structdescr=>component_table.
* Datendeklaration Lokalte Tabellen
DATA: lt_nbewtab TYPE TABLE OF vnbew.
FIELD-SYMBOLS: <fs_pd> TYPE any,
<fs_quelle> TYPE any,
<fs_ziel> TYPE any,
<fs_parameter> TYPE rsfbpara,
<fs_comp> LIKE LINE OF lt_comp.