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.
6229
Views
Spool-ID zum Hintergrundjob ermitteln
von shapoc » 21.06.2013 10:07 • Verfasst in ABAP® Core
1
Antw.
2833
Views
WRITE im Hintergrundjob kommt nicht im Spool an
von Thanatos82 » 15.11.2016 08:59 • Verfasst in ABAP® Core
1
Antw.
2918
Views
Spool in PDF konvertieren und als Mail Attachement versenden
von Dolores » 16.11.2005 13:20 • Verfasst in ABAP® Core
12
Antw.
6153
Views
Submit xxx to SAP-Spool Problem
von Guenther » 21.01.2016 16:18 • Verfasst in ABAP® Core
2
Antw.
2750
Views
Report als Hintergrundjob
von Dimonic » 02.07.2009 11:18 • Verfasst in SAP - Allgemeines

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Feldwerte vergleichen
vor 6 Stunden von wreichelt 2 / 29
Workflow-Datenfluss mit Multi-Line-Container
vor 8 Stunden von ewx gelöst 2 / 83
Mahnung erstellen
vor 12 Stunden von Sebastian82 4 / 114
Absprung VA02 Position
vor 2 Tagen von gs3rr4 gelöst 3 / 113

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

Feldwerte vergleichen
vor 6 Stunden von wreichelt 2 / 29
Workflow-Datenfluss mit Multi-Line-Container
vor 8 Stunden von ewx gelöst 2 / 83
Mahnung erstellen
vor 12 Stunden von Sebastian82 4 / 114
Absprung VA02 Position
vor 2 Tagen von gs3rr4 gelöst 3 / 113

Unbeantwortete Forenbeiträge

OPD Druck im SPOOL
vor 2 Tagen von Manfred K. 1 / 73
Export von Spools in XLSX
vor einer Woche von abapamateur 1 / 793
Feldberechnung ME32K
vor einer Woche von ZF_SAPler 1 / 1390