Variante 1 (cl_rspo_spoolid_to_pdf)
* Nr. des Spoolauftrags
PARAMETERS: p_spool TYPE rspoid OBLIGATORY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_spool.
SELECT rqident, rqtitle, rqdest, rqpaper, rqdoctype
INTO TABLE @DATA(it_spool)
FROM tsp01
ORDER BY rqident.
DATA: it_return TYPE TABLE OF ddshretval.
* eigene Suuchhilfe für Auswahl der Spooljobs anzeigen
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'RQIDENT' " Spalte der internen Tabelle bei value_tab
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_SPOOL' " Name des Dynpro-Feldes für die automatische Werterückgabe
value_org = 'S' " Werteübergabe: C: zellenweise, S: strukturiert
window_title = 'Auswahl'
TABLES
value_tab = it_spool " Übergabe-Tabelle mit Werten für die Anzeige und Auswahl
return_tab = it_return " Rückgabe-Tabelle mit den ausgewählten (geklickten) Elementen
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
IF lines( it_return ) > 0.
MESSAGE it_return[ 1 ]-fieldval TYPE 'S'.
ENDIF.
ENDIF.
START-OF-SELECTION.
TRY.
DATA: lv_xstring_pdf TYPE xstring.
DATA: lv_size TYPE int4.
DATA: lv_jobname TYPE btcjob.
DATA: lv_jobcount TYPE btcjobcnt.
* SPOOL-ID -> PDF
cl_rspo_spoolid_to_pdf=>get_spool_pdf( EXPORTING
iv_rqident = p_spool
iv_no_background = abap_true
IMPORTING
ev_pdf = lv_xstring_pdf
ev_size = lv_size
ev_jobname = lv_jobname
ev_jobcount = lv_jobcount
).
WRITE: / 'Size:', lv_size.
WRITE: / 'Jobname:', lv_jobname.
WRITE: / 'Jobcount', lv_jobcount.
DATA: lv_action TYPE i.
DATA: lv_filename TYPE string.
DATA: lv_fullpath TYPE string.
DATA: lv_path TYPE string.
* SaveDialog
cl_gui_frontend_services=>file_save_dialog( EXPORTING
default_file_name = 'test.pdf'
default_extension = 'pdf'
file_filter = '(*.pdf)|*.pdf|'
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_action ).
IF lv_action EQ cl_gui_frontend_services=>action_ok.
* xstring -> solix
DATA(it_raw_data) = cl_bcs_convert=>xstring_to_solix( lv_xstring_pdf ).
* PDF lokal speichern
cl_gui_frontend_services=>gui_download( EXPORTING
filename = lv_fullpath
filetype = 'BIN'
bin_filesize = lv_size
CHANGING
data_tab = it_raw_data ).
* Browserfenster erzeugen
DATA(o_html) = NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).
* PDF im ABAP-Fenster anzeigen
o_html->show_url( url = CONV skwf_url( lv_fullpath )
in_place = abap_true ).
* leere SAP-Toolbar ausblenden
cl_abap_list_layout=>suppress_toolbar( ).
* cl_gui_container=>default_screen erzwingen
WRITE: / |Datei erfolgreich unter { lv_fullpath } gespeichert.|.
ENDIF.
CATCH cx_root INTO DATA(e_txt).
ENDTRY.
Variante 2 (CONVERT_OTFSPOOLJOB_2_PDF, CONVERT_ABAPSPOOLJOB_2_PDF)
* Nr. des Spoolauftrags
PARAMETERS: p_spool TYPE rspoid OBLIGATORY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_spool.
DATA: it_return TYPE TABLE OF ddshretval.
SELECT rqident, rqtitle, rqdest, rqpaper, rqdoctype
INTO TABLE @DATA(it_spool)
FROM tsp01
ORDER BY rqident.
* eigene Suuchhilfe für Auswahl der Spooljobs anzeigen
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'RQIDENT' " Spalte der internen Tabelle bei value_tab
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_SPOOL' " Name des Dynpro-Feldes für die automatische Werterückgabe
value_org = 'S' " Werteübergabe: C: zellenweise, S: strukturiert
window_title = 'Auswahl'
TABLES
value_tab = it_spool " Übergabe-Tabelle mit Werten für die Anzeige und Auswahl
return_tab = it_return " Rückgabe-Tabelle mit den ausgewählten (geklickten) Elementen
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
IF lines( it_return ) > 0.
MESSAGE it_return[ 1 ]-fieldval TYPE 'S'.
ENDIF.
ENDIF.
START-OF-SELECTION.
SELECT SINGLE rqclient, rqo1name
INTO @DATA(lv_tsp01_sel)
FROM tsp01
WHERE rqident = @p_spool.
IF sy-subrc = 0.
* Dummys für Aufruf von RSPO_RETURN_SPOOLJOB
DATA: it_otf TYPE STANDARD TABLE OF soli.
DATA: it_pdf TYPE STANDARD TABLE OF tline.
* Beispiel: Spooljob als iTabs holen
CALL FUNCTION 'RSPO_RETURN_SPOOLJOB'
EXPORTING
rqident = p_spool
desired_type = 'RAW' " RAW, ALI, OTF, PDF
TABLES
buffer = it_otf
buffer_pdf = it_pdf
EXCEPTIONS
no_such_job = 1
job_contains_no_data = 2
selection_empty = 3
no_permission = 4
can_not_access = 5
read_error = 6
type_no_match = 7
OTHERS = 8.
IF sy-subrc <> 0.
WRITE: 'Spoolauftrag nicht vorhanden: ', sy-subrc.
ELSE.
SELECT SINGLE rqdoctype FROM tsp01 INTO @DATA(lv_objtype) WHERE rqident = @p_spool.
IF sy-subrc <> 0.
WRITE: 'Fehler beim Lesen des Doctypes.', sy-subrc.
ELSE.
DATA: lv_numbytes TYPE i.
DATA: lv_pdfspoolid LIKE tsp01-rqident.
DATA: lv_jobname TYPE tbtcjob-jobname.
DATA: lv_jobcount TYPE tbtcjob-jobcount.
DATA: lv_xstring_pdf TYPE xstring.
* Konvertierung anhand des Typs vornehmen
* OTF, SMART
CASE lv_objtype.
WHEN 'OTF' OR 'OTFHPL2' OR 'SMART'.
CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = p_spool
no_dialog = abap_true
pdf_destination = 'X' " xstring
no_background = abap_false
IMPORTING
pdf_bytecount = lv_numbytes
pdf_spoolid = lv_pdfspoolid
btc_jobname = lv_jobname
btc_jobcount = lv_jobcount
bin_file = lv_xstring_pdf
EXCEPTIONS
err_no_otf_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_dstdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11.
IF sy-subrc <> 0.
WRITE: / 'Fehler bei der OTF->PDF Konvertierung:', sy-subrc.
ELSE.
ENDIF.
* ALI
WHEN 'LIST' OR 'TEXT'.
CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
EXPORTING
src_spoolid = p_spool
no_dialog = abap_true
pdf_destination = 'X' " xstring
no_background = abap_false
IMPORTING
pdf_bytecount = lv_numbytes
pdf_spoolid = lv_pdfspoolid
btc_jobname = lv_jobname
btc_jobcount = lv_jobcount
bin_file = lv_xstring_pdf
EXCEPTIONS
err_no_abap_spooljob = 1
err_no_spooljob = 2
err_no_permission = 3
err_conv_not_possible = 4
err_bad_destdevice = 5
user_cancelled = 6
err_spoolerror = 7
err_temseerror = 8
err_btcjob_open_failed = 9
err_btcjob_submit_failed = 10
err_btcjob_close_failed = 11.
IF sy-subrc <> 0.
WRITE: / 'Fehler bei der TEXT->PDF Konvertierung: ', sy-subrc.
ELSE.
ENDIF.
WHEN 'ADSP'.
WRITE: / 'Adobe Forms derzeit nicht implementiert.'.
WHEN OTHERS.
WRITE: / 'Verarbeitungsschritt derzeit nicht implementiert:', lv_objtype.
ENDCASE.
* wenn erfolgreich -> PDF speichern
IF lv_numbytes > 0 AND xstrlen( lv_xstring_pdf ) > 0.
DATA: lv_action TYPE i.
DATA: lv_filename TYPE string.
DATA: lv_fullpath TYPE string.
DATA: lv_path TYPE string.
TRY.
* SaveDialog
cl_gui_frontend_services=>file_save_dialog( EXPORTING
default_file_name = |{ p_spool }|
default_extension = 'pdf'
file_filter = '(*.pdf)|*.pdf|'
CHANGING
filename = lv_filename
path = lv_path
fullpath = lv_fullpath
user_action = lv_action ).
IF lv_action EQ cl_gui_frontend_services=>action_ok.
* xstring -> solix
DATA(it_raw_data) = cl_bcs_convert=>xstring_to_solix( lv_xstring_pdf ).
* PDF lokal speichern
cl_gui_frontend_services=>gui_download( EXPORTING
filename = lv_fullpath
filetype = 'BIN'
bin_filesize = lv_numbytes
CHANGING
data_tab = it_raw_data ).
* Browserfenster erzeugen
DATA(o_html) = NEW cl_gui_html_viewer( parent = cl_gui_container=>default_screen ).
* PDF im ABAP-Fenster anzeigen
o_html->show_url( url = CONV skwf_url( lv_fullpath )
in_place = abap_true ).
* leere SAP-Toolbar ausblenden
cl_abap_list_layout=>suppress_toolbar( ).
* cl_gui_container=>default_screen erzwingen
WRITE: / |Datei erfolgreich unter { lv_fullpath } gespeichert.|.
ENDIF.
CATCH cx_root INTO DATA(e_text). " Oberklasse für Exceptions abfangen und Kurztext übergeben
WRITE: / e_text->get_text( ).
ENDTRY.
ENDIF.
ENDIF.
ENDIF.
ELSE.
WRITE: / |Spoolauftrag { p_spool } nicht vorhanden.|.
ENDIF.