Z-Programm Konvertiere OTF/Spooljob nach PDF und Speicher auf Applikationsserver und/oder Frontend
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Dieses Programm konvertiert ein OTF-Spoolauftrag in ein PDF und speichert die Datei auf dem Applikationserver mittels des Funktionsbausteins 'GUI_DOWNLOAD'.
Dieses Programm verbessert das Standardprogramm RSTXPDFT4, was nicht im Hintergrund/als Job ausgeführt werden kann.
Es werden die Schritte durchlaufen
- Es werden die Spool-Attribute für einen Selektionsparameter Spoolauftrag ausgelesen (Funktionsbaustein 'RSPO_GET_ATTRIBUTES_SPOOLJOB').
- Der OTF-Inhalt vom Spoolauftrag wird gelesen und mit dem Funktionsbaustein 'CONVERT_OTFSPOOLJOB_2_PDF' (Spooltyp OTF oder SMART) bzw. 'CONVERT_ABAPSPOOLJOB_2_PDF' (Spooltyp LIST) in eine Variable vom Typ XSTRING gefüllt, was den PDF repräsentiert.
- Speichern der Datei vom Typ XSTRING auf dem Applikationserver mit den Befehlen OPEN DATASET, TRANSFER und CLOSE DATASET.
- Speichern der Datei auf dem Frontend (nur im Vordergrund möglich) mit Funktionsbaustein 'GUI_DOWNLOAD' (Type SOLIX_TAB).
Programmcoding
REPORT zsspool2file LINE-SIZE 132. PARAMETERS: path TYPE rlgrap-filename DEFAULT '/interfaces/outbound/sonderlauf/PDF1.PDF' OBLIGATORY, rqident TYPE tsp01-rqident OBLIGATORY, app TYPE c AS CHECKBOX. DATA pdf_size TYPE so_obj_len. DATA pdf_xstring TYPE xstring. DATA gv_xstring TYPE xstring. DATA : v_text TYPE localfile. START-OF-SELECTION. PERFORM create_pdf. PERFORM upload_app_server. PERFORM download_app_server. PERFORM download.
*&---------------------------------------------------------------------* *& Form create_pdf *&---------------------------------------------------------------------* * Create PDF Content * 1) get attributes of spool request * 2) convert spool request to PDF dependent on document type *----------------------------------------------------------------------* FORM create_pdf. DATA rq TYPE tsp01. DATA bin_size TYPE i. DATA dummy TYPE TABLE OF rspoattr. * ------------ get attributes of spool request --------------------- CALL FUNCTION 'RSPO_GET_ATTRIBUTES_SPOOLJOB' EXPORTING rqident = rqident IMPORTING rq = rq TABLES attributes = dummy EXCEPTIONS no_such_job = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE e126(po) WITH rqident. ENDIF. * --- convert spool request into PDF, dependent on document type --- IF rq-rqdoctype = 'OTF' OR rq-rqdoctype = 'SMART'. CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF' EXPORTING src_spoolid = rqident no_dialog = 'X' pdf_destination = 'X' no_background = 'X' IMPORTING pdf_bytecount = bin_size bin_file = pdf_xstring 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 OTHERS = 12. IF sy-subrc <> 0. MESSAGE e712(po) WITH sy-subrc 'CONVERT_OTFSPOOLJOB_2_PDF'. ENDIF. ELSEIF rq-rqdoctype = 'LIST'. CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF' EXPORTING src_spoolid = rqident no_dialog = 'X' pdf_destination = 'X' no_background = 'X' IMPORTING pdf_bytecount = bin_size bin_file = pdf_xstring 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 OTHERS = 12. IF sy-subrc <> 0. MESSAGE e712(po) WITH sy-subrc 'CONVERT_ABAPSPOOLJOB_2_PDF'. ENDIF. ELSE. MESSAGE e789(po) WITH rq-rqdoctype. ENDIF. pdf_size = bin_size. ENDFORM. "create_pdf
*&---------------------------------------------------------------------* *& Form UPLOAD_APP_SERVER *&---------------------------------------------------------------------* * Save PDF (Type XFILE) on application server *----------------------------------------------------------------------* FORM upload_app_server. * CONCATENATE sy-uname+0(8) sy-datum sy-uzeit INTO * v_text. v_text = path. OPEN DATASET v_text FOR OUTPUT IN BINARY MODE. IF sy-subrc <> 0. EXIT. ENDIF. TRANSFER pdf_xstring TO v_text. CLOSE DATASET v_text. ENDFORM. " UPLOAD_APP_SERVER
*&---------------------------------------------------------------------* *& Form DOWNLOAD_APP_SERVER *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM download_app_server. OPEN DATASET v_text FOR INPUT IN BINARY MODE. IF sy-subrc <> 0. EXIT. ENDIF. READ DATASET v_text INTO gv_xstring. CLOSE DATASET v_text. ENDFORM. " DOWNLOAD_APP_SERVER
*&---------------------------------------------------------------------* *& Form download *&---------------------------------------------------------------------* FORM download. DATA : lv_filename TYPE string, lt_pdf_content TYPE solix_tab. lv_filename = path. * get the PDF binary table lt_pdf_content = cl_document_bcs=>xstring_to_solix( gv_xstring ). CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING * BIN_FILESIZE = filename = lv_filename filetype = 'BIN' * IMPORTING * FILELENGTH = TABLES data_tab = lt_pdf_content EXCEPTIONS file_write_error = 1 no_batch = 2 gui_refuse_filetransfer = 3 invalid_type = 4 no_authority = 5 unknown_error = 6 header_not_allowed = 7 separator_not_allowed = 8 filesize_not_allowed = 9 header_too_long = 10 dp_error_create = 11 dp_error_send = 12 dp_error_write = 13 unknown_dp_error = 14 access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22. IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDFORM. "download