Spool zu PDF konvertieren - Problem mit Hintergrundjob

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
3 Beiträge • Seite 1 von 1
3 Beiträge Seite 1 von 1

Spool zu PDF konvertieren - Problem mit Hintergrundjob

Beitrag von DaBoo (ForumUser / 6 / 0 / 0 ) »
Hallo zusammen!

In einem Programm von uns wird ein Smartform in den Spool geschrieben. Von dort aus wird ein PDF erzeugt und auf die Client heruntergeladen. Das Problem bei der Sache ist, das der verwendete Funktionsbaustein CONVERT_OTFSPOOLJOB_2_PDF ab 99 Seiten den Benutzer fragt ob das PDF im Hintergrund erstellt werden soll. Leider bekomme ich dann keine Binärdaten zurück die ich in das PDF-File schreiben kann. Die PDF-Datei ist leer (bzw. schrott) und die Binärdaten liegen im Spool.

Hat jemand von euch eine Ahnung wie ich das dem Funktionsbaustein abgewöhnen kann, oder kennt jemand eine andere Vorgehensweise (vielleicht was mi ABAP OO?). Ich habe auch meinen gegenwärtigen Code beigefügt.

Vielen Dank für eure Hilfe,
Florian

Code: Alles auswählen.

* Prüfen ob es die übergebene Spoolnummer überhaupt gibt
  SELECT SINGLE * FROM tsp01 INTO ls_tsp01 WHERE rqident = id_spoolid.
  IF ( sy-subrc <> 0 ).
    cf_error = 'X'.
    EXIT.
  ENDIF.


* TemSe-Objekte speichern sequentielle Daten. Ein TemSe-Objekt kann aus
* mehreren Teilen bestehen. Dieser FB ermittelt die wichtigsten Attribute
* eines TemSe-Objekts. Falls das Objekt aus mehreren Teilen besteht, werden
* die Attribute entsprechend zusammengefaßt.
  CALL FUNCTION 'RSTS_GET_ATTRIBUTES'
    EXPORTING
      client        = ls_tsp01-rqclient
      name          = ls_tsp01-rqo1name
      part          = 1
    IMPORTING
      objtype       = ld_objtype
    EXCEPTIONS
      fb_error      = 1
      fb_rsts_other = 2
      no_object     = 3
      no_permission = 4
      OTHERS        = 5.

  IF ( sy-subrc <> 0 ).
    cf_error = 'X'.
    EXIT.
  ENDIF.

  IF ld_objtype(3) = 'OTF'.
    lf_is_otf = 'X'.
  ELSE.
    lf_is_otf = ' '.
  ENDIF.

  IF ( lf_is_otf = 'X' ).
*   Konvertiere OTF-Spoolauftrag nach PDF
    CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
      EXPORTING
        src_spoolid              = id_spoolid
        no_dialog                = 'X'
*        pdf_destination          = 'T'
      IMPORTING
        pdf_bytecount            = ld_numbytes
        pdf_spoolid              = ld_pdfspoolid
        btc_jobname              = ld_jobname
        btc_jobcount             = ld_jobcount
      TABLES
        pdf                      = lt_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 ).
      cf_error = 'X'.
      EXIT.
    ENDIF.
  ELSE.
*   Konvertiere ABAP-Liste-Spoolauftrag nach PDF
    CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'
      EXPORTING
        src_spoolid              = id_spoolid
        no_dialog                = ' '
      IMPORTING
        pdf_bytecount            = ld_numbytes
        pdf_spoolid              = ld_pdfspoolid
        btc_jobname              = ld_jobname
        btc_jobcount             = ld_jobcount
      TABLES
        pdf                      = lt_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 ).
      cf_error = 'X'.
      EXIT.
    ENDIF.
  ENDIF.

  WHILE ( lf_file_ok = '' ).

*   Die in der Tabelle lt_pdf enthaltenen Binärdaten werden nun in eine
*   Datei geschrieben. Da alle übergebenen Tickets in die gleiche Datei
*   geschrieben werden, kann der im Speicher gehaltente Protokolleintrag
*   gelesen werden
    CALL METHOD cl_gui_frontend_services=>gui_download
      EXPORTING
        bin_filesize              = ld_numbytes
        filename                  = cd_filename
        filetype                  = 'BIN'
*    append                    = SPACE
*    write_field_separator     = SPACE
*    header                    = '00'
*    trunc_trailing_blanks     = SPACE
*    write_lf                  = 'X'
*    col_select                = SPACE
*    col_select_mask           = SPACE
*    dat_mode                  = SPACE
      confirm_overwrite         = 'X'
*    no_auth_check             = SPACE
*    codepage                  = SPACE
*    ignore_cerr               = ABAP_TRUE
*    replacement               = '#'
*    write_bom                 = SPACE
*    trunc_trailing_blanks_eol = 'X'
*    wk1_n_format              = SPACE
*    wk1_n_size                = SPACE
*    wk1_t_format              = SPACE
*    wk1_t_size                = SPACE
*  IMPORTING
*    filelength                =
      CHANGING
        data_tab                  = lt_pdf
      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
        not_supported_by_gui      = 22
        error_no_gui              = 23
        OTHERS                    = 24.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Du kannst dein PDF doch auch gleich erstellen, wenn du das Formular nicht gedruckt benötigst.

Im Formularaufruf.
importing
job_output_info = g_out

und anschließend

loop at g_out-otfdata assigning <otf>.
concatenate <otf>-tdprintcom <otf>-tdprintpar into l_txt.
append l_txt to gt_text.
endloop.

anschließend versende ich das Dokument per Mail, aber versuch doch an der Stelle mal ein Download mit der Endung PDF.

vielleicht hilft dir das ja weiter.

Thomas

Beitrag von DaBoo (ForumUser / 6 / 0 / 0 ) »
Hi!

Du meinst direkt nach dem Aufruf des Smarforms? Hab ich gerade mal versucht, leider kommen keine Daten zurück. Der springt garnicht erst in den LOOP.


Code: Alles auswählen.

      FIELD-SYMBOLS <ls_otf> TYPE itcoo.
      DATA ld_text TYPE string.
      DATA lt_text TYPE TABLE OF string.

      LOOP AT ls_job_output_info-otfdata ASSIGNING <ls_otf>.
        CONCATENATE <ls_otf>-tdprintcom <ls_otf>-tdprintpar INTO ld_text.
        APPEND ld_text TO lt_text.

        CALL METHOD cl_gui_frontend_services=>gui_download
          EXPORTING
            filename                = 'C:\TEST.PDF'
            filetype                = 'BIN'
            confirm_overwrite       = 'X'
          CHANGING
            data_tab                = lt_text
          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
            not_supported_by_gui    = 22
            error_no_gui            = 23
            OTHERS                  = 24.

        IF ( sy-subrc = 0 ).

        ENDIF.
Ich hab jetzt erstmal einen kleinen, schmutzigen Workarround gebaut. Der Funktionsbaustein CONVERT_OTFSPOOLJOB_2_PDF führt keine Konvertierung im Hintergrund durch wenn die Verarbeitung bereit im Hintergrund läuft. Auch wenn sie das nicht tut bin ich jetzt so frei und schiess unmittelbar vor dem Aufruf den SY-BATCH auf 'X' um. Nach dem Aufruf setze ich ihn wieder auf den alten Wert. Nicht die feine Art, aber es geht erst einmal.

Viele Grüße,
Florian

Seite 1 von 1

Vergleichbare Themen

4
Antw.
6223
Views
Spool-ID zum Hintergrundjob ermitteln
von shapoc » 21.06.2013 10:07 • Verfasst in ABAP® Core
1
Antw.
2829
Views
WRITE im Hintergrundjob kommt nicht im Spool an
von Thanatos82 » 15.11.2016 08:59 • Verfasst in ABAP® Core
1
Antw.
2917
Views
Spool in PDF konvertieren und als Mail Attachement versenden
von Dolores » 16.11.2005 13:20 • Verfasst in ABAP® Core
12
Antw.
6150
Views
Submit xxx to SAP-Spool Problem
von Guenther » 21.01.2016 16:18 • Verfasst in ABAP® Core
6
Antw.
2473
Views
Hintergrundjob mit Passwort?
von danielA. » 18.04.2006 13:31 • Verfasst in ABAP® Core

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1753
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2302

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Hilfe zum FB MATERIAL_MAINTAIN_DARK
Gestern von black_adept gelöst 8 / 1753
HR-Entgeltnachweis
vor 2 Tagen von ChrisB 4 / 2302

Unbeantwortete Forenbeiträge

Export von Spools in XLSX
vor 4 Tagen von abapamateur 1 / 308
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 903
MS-Word als Editor
letzen Monat von tekko 1 / 4405