Bündeln von mehreren SAP Adobe Formularen in einer PDF-Datei
In einem Druckprogramm werden mehrere PDF-basierte Druckformulare für einen Kunden erzeugt. Die Formulare sollen alle in einer einzigen PDF-Datei zusammengefasst werden und per Email verschickt werden.
Setzen von Parametern in der Struktur SFOUTPUTPARAMS
Beim Aufruf des Funktionsbausteins JOB_OPEN können Druckparameter in der Struktur SFOUTPUTPARAMS mitgegeben werden.
Zur gebündelten Ausgabe mehrerer Formulare in einer PDF-Datei werden folgende Parameter gesetzt:
SFOUTPUTPARAMS-GETPDF = M Formular als PDF-Datei an das rufende Programm übergeben
SFOUTPUTPARAMS-BUMODE = M Formulare in einer Datei bündeln
SFOUTPUTPARAMS-ASSEMBLE = S Formulare sammeln
Erzeugen der Formulare in einer Schleife
Die Formulare werden in einer Schleife erzeugt.
Der Aufruf von JOB_OPEN erfolgt vor der Schleife, der von JOB_CLOSE nach der Schleife.
Auslesen der PDF-Datei nach JOB_CLOSE
Hinter dem Funktionsbaustein JOB_CLOSE können die erzeugten Formulare in einer PDF-Datei abgegriffen werden.
Hierfür wird der Funktionsbaustein ‚FPCOMP_GET_PDF_TABLE‘ aufgerufen.
Die PDF-Datei kann nun mit den üblichen Methoden und Funktionsbausteinen per Email verschickt werden.
Codebeispiel
* Formular öffnen —————————————————- *
PERFORM job_open USING lv_bundle.
* Texte für Formular ermitteln ————————————— *
LOOP AT it_fonam INTO ls_fonam.
PERFORM get_data CHANGING gs_data.
* FuBa zum Formular holen ——————————————– *
PERFORM get_fm_name USING ls_fonam-fonam
CHANGING gv_fm_name
gv_if_type.
* Fomular prozessieren ———————————————– *
PERFORM process_form USING gv_fm_name
gs_data
CHANGING ls_output.
ENDLOOP.
* Formular schließen ————————————————- *
PERFORM job_close using lv_bundle
CHANGING ls_output.
Im Feld ls_output-pdf sind alle Formulare in einer PDF-Datei enthalten.
Sie kann nun durch die üblichen Routinen per Email versendet oder als Datei gespeichert werden.
*&———————————————————————*
*& Form JOB_OPEN
*&———————————————————————*
FORM job_open USING lv_bundle TYPE xfeld.
DATA: ls_outparam TYPE sfpoutputparams.
„Alle Formulare in einem PDF sammeln
IF lv_bundle NE space.
ls_outparam-bumode = ‚M‘.
ls_outparam-assemble = ‚S‘.
ls_outparam-getpdf = ‚M‘.
ELSE.
ls_outparam-getpdf = ‚X‘.
ENDIF.
…..
CALL FUNCTION ‚FP_JOB_OPEN‘
CHANGING
ie_outputparams = ls_outparam
EXCEPTIONS
cancel = 1
usage_error = 2
system_error = 3
internal_error = 4
OTHERS = 5.
ENDFORM.
*&———————————————————————*
*& Form GET_FM_NAME
*&———————————————————————*
FORM get_fm_name USING pv_fpname TYPE fpname
CHANGING gv_fm_name TYPE rs38l_fnam
gv_if_type TYPE fpinterfacetype.
CALL FUNCTION ‚FP_FUNCTION_MODULE_NAME‘
EXPORTING
i_name = pv_fpname
IMPORTING
e_funcname = gv_fm_name
e_interface_type = gv_if_type.
ENDFORM.
*&———————————————————————*
*& Form PROCESS_FORM
*&———————————————————————*
FORM process_form USING gv_fm_name TYPE rs38l_fnam
gs_data TYPE zcor_data_s
CHANGING ls_output TYPE fpformoutput.
DATA: ls_docparms TYPE sfpdocparams.
ls_docparms-langu = ‚D‘.
ls_docparms-country = ‚DE‘.
CALL FUNCTION gv_fm_name
EXPORTING
/1bcdwb/docparams = ls_docparms
gs_data = gs_data
IMPORTING
/1bcdwb/formoutput = ls_output
EXCEPTIONS
usage_error = 1
system_error = 2
internal_error = 3
OTHERS = 4.
* gfs. hier noch ein Commit work
ENDFORM.
*&———————————————————————*
*& Form JOB_CLOSE
*&———————————————————————*
FORM job_close USING pv_bundle TYPE xfeld
CHANGING ls_output TYPE fpformoutput.
DATA: lt_pdf TYPE tfpcontent,
ls_pdf TYPE fpcontent.
CALL FUNCTION ‚FP_JOB_CLOSE‘
EXCEPTIONS
usage_error = 1
system_error = 2
internal_error = 3
OTHERS = 4.
IF pv_bundle NE space.
CALL FUNCTION ‚FPCOMP_GET_PDF_TABLE‘
IMPORTING
e_pdf_table = lt_pdf.
READ TABLE lt_pdf INTO ls_pdf INDEX 1.
ls_output-pdf = ls_pdf.
ENDIF.
ENDFORM.