Bündeln von PDF Formularen

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.