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.