SO_NEW_DOCUMENT_ATT_SEND_API1

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

SO_NEW_DOCUMENT_ATT_SEND_API1

Beitrag von SAP_ENTWICKLER (Specialist / 445 / 219 / 6 ) »
Hallo,

ich möchte mit genanntem Baustein ein PDF als Anhang versenden, welches ursprünglich aus einem SmartForm erstellt wird. Die OTF Datei erstelle ich direkt aus der SmartForm Ausgabe.

Im ersten Schritt konvertiere ich OTF nach PDF

i_otf = w_return_mail-otfdata.

CALL FUNCTION 'CONVERT_OTF'
EXPORTING
format = 'PDF'
max_linewidth = 255
IMPORTING
bin_filesize = v_len_in
TABLES
otf = i_otf
lines = i_tline
EXCEPTIONS
err_max_linewidth = 1
err_format = 2
err_conv_not_possible = 3
OTHERS = 4.

IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

REFRESH: i_reclist,
i_objtxt,
i_objbin,
i_objpack.
CLEAR w_objhead.

* Object with PDF.
i_objbin = i_tline.

DESCRIBE TABLE i_objbin LINES v_lines_bin.


Dann hänge ich das PDF an eine Mail. Mit dem Baustein kann ich die Mail auch fehlerfrei incl. Anhang erstellen. Leider kann ich die PDF Datei nicht öffen.Es kommt eine Meldung, dass das Dokument unter Umständen beschädigt sei.

Folgendes Coding erstellt die Mail:

* Object with main text of the mail.
i_objtxt = 'Sehr geehrte Damen und Herren,'.
APPEND i_objtxt.

CLEAR i_objtxt.
APPEND i_objtxt.

i_objtxt = 'Bei Rückfragen stehen wir Ihnen jederzeit zur Verfügung.'.
APPEND i_objtxt.

CLEAR i_objtxt.
APPEND i_objtxt.

DESCRIBE TABLE i_objtxt LINES v_lines_txt.



* Document information.
w_doc_chng-obj_name = 'XXX'.
w_doc_chng-expiry_dat = sy-datum + 10.
w_doc_chng-obj_descr = 'XXX'.
w_doc_chng-sensitivty = '0'.
w_doc_chng-doc_size = ( v_lines_txt - 1 ) * 255 + STRLEN ( i_objtxt ).

CLEAR i_objpack-transf_bin.

i_objpack-head_start = 1.
i_objpack-head_num = 0.
i_objpack-body_start = 1.
i_objpack-body_num = v_lines_txt.
i_objpack-doc_type = 'RAW'.
APPEND i_objpack.

* Packing as PDF.
i_objpack-transf_bin = 'X'.
i_objpack-head_start = 1.
i_objpack-head_num = 1.
i_objpack-body_start = 1.
i_objpack-body_num = v_lines_bin.
i_objpack-doc_type = 'PDF'.
i_objpack-obj_name = 'Smartform'.
CONCATENATE 'XXX' '.pdf'
INTO i_objpack-obj_descr.
i_objpack-doc_size = ( v_lines_bin - 1 ) * 255 + STRLEN( i_objbin ).
APPEND i_objpack.

* Document information.
CLEAR i_reclist.
i_reclist-receiver = ab_kopf-smtp_addr.
i_reclist-express = 'X'.
i_reclist-rec_type = 'U'. "Internet address
APPEND i_reclist.

* Sending mail.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = w_doc_chng
put_in_outbox = 'X'
TABLES
packing_list = i_objpack
object_header = w_objhead
contents_bin = i_objbin
contents_txt = i_objtxt
receivers = i_reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
COMMIT WORK.
ENDIF.
ENDIF.

Ich suche schon eine lange Zeit in diversen Foren.

In der Tabelle SXFORMATG stehen diese Einträge:

004 FAXXYZ PCL FAX
004 FAXXYZ TIF FAX

und auch mit dem FuBa QCE1_CONVERT habe ich schon mein Glück versucht. Den habe ich vor dem SO_NEW_DOCUMENT_ATT_SEND_API1 aufgerufen und die T_TARGET_TAB im SO_NEW_DOCUMENT_ATT_SEND_API1 als CONTENTS_BIN angegeben.

Es hatte keinen Erfolg.

Oder habe ich ein alte PDF Version? SAP ist SAP ECC 6.0 und mein Adobe Reader 9.4.6. Zusätzlich findet die ganze Orgie noch in einem UNICODE Umfeld statt.

Wer hat eine Idee woran es liegt?


Danke und viele Grüße

Norbert

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


Re: SO_NEW_DOCUMENT_ATT_SEND_API1

Beitrag von a-dead-trousers (Top Expert / 4485 / 231 / 1205 ) »
Hi!

Der Fehler liegt hier:
SAP_ENTWICKLER hat geschrieben:* Object with PDF.
i_objbin = i_tline.
Die Tabelle I_TLINE hat eine Struktur mit zwei Spalten die I_OBJBIN hat eine Struktur mit einer Spalte, die aber die gesamte Länge aufnehmen kann. Für die SEND-API dürfen aber die Zeilen keine LEERZEICHEN enthalten.

Was du machen musst ist folgendes:
Alle Zeilen der I_TLINE, OHNE LEERZEICHEN, in die I_OBJBIN übertragen.
Ich verwende dazu immer meine eigenen Methoden Split & Concatenate für Byte bzw.
Split & Concatenate für Text. Es gibt zumindest für die SEND-API auch bereist eine vorgefertige Klassen-Methode(!), die das Auftrennen von bel. Byte-Code in die Struktur von I_OBJBIN erledigt. Einfach hier im Forum mal danach suchen.
Evtl. musst du die Daten aber auch noch zwischen Charlike (I_TLINE) und binär (I_OBJBIN) umwandeln.
Sollte auch dazu hier im Forum was zu finden sein. (Klasse CL_ABAP_CONV_IN_CE bzw. CL_ABAP_CONV_OUT_CE)

Lg ADT

P.S.: Beim posten von CODE wäre es besser diesen in

Code: Alles auswählen.

* Weil lesbarer
zu schreiben.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
SAP_ENTWICKLER

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: SO_NEW_DOCUMENT_ATT_SEND_API1

Beitrag von SAP_ENTWICKLER (Specialist / 445 / 219 / 6 ) »
Hallo,

so geht es.

Code: Alles auswählen.

  i_otf = w_return_mail-otfdata.  <---- From SmartForm Print

  CALL FUNCTION 'CONVERT_OTF'
    EXPORTING
      format                = 'PDF'
      max_linewidth         = 132
    IMPORTING
      bin_filesize          = v_len_in
      bin_file              = w_pdf_daten
    TABLES
      otf                   = i_otf
      lines                 = i_tline
    EXCEPTIONS
      err_max_linewidth     = 1
      err_format            = 2
      err_conv_not_possible = 3
      OTHERS                = 4.

  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CALL METHOD cl_bcs_convert=>xstring_to_solix
    EXPORTING
      iv_xstring = w_pdf_daten
    RECEIVING
      et_solix   = i_record.

* Object with PDF.
  DESCRIBE TABLE i_record LINES v_lines_bin.

    i_objpack-head_start = 1.
    i_objpack-head_num = 0.
    i_objpack-body_start = 1.
    i_objpack-body_num = v_lines_txt.
    i_objpack-doc_type = 'RAW'.
    APPEND i_objpack.

* Packing as PDF.
    i_objpack-transf_bin = 'X'.
    i_objpack-head_start = 1.
    i_objpack-head_num = 1.
    i_objpack-body_start = 1.
    i_objpack-body_num = v_lines_bin.
    i_objpack-doc_type = 'PDF'.
    i_objpack-obj_name = 'Smartform'.
    CONCATENATE 'XXXX' '.pdf'
    INTO i_objpack-obj_descr.
    APPEND i_objpack.

    CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
      EXPORTING
        document_data              = w_doc_chng
        put_in_outbox              = 'X'
      TABLES
        packing_list               = i_objpack
        object_header              = w_objhead
        contents_txt               = i_objtxt
        contents_hex               = i_record
        receivers                  = i_reclist
      EXCEPTIONS
        too_many_receivers         = 1
        document_not_sent          = 2
        document_type_not_exist    = 3
        operation_no_authorization = 4
        parameter_error            = 5
        x_error                    = 6
        enqueue_error              = 7
        OTHERS                     = 8.


Danke und Viele Grüße

Norbert

Seite 1 von 1

Vergleichbare Themen

0
Antw.
3022
Views
Send EXPRES SAP MAIL
von Anita57 » 30.07.2013 13:19 • Verfasst in ABAP® für Anfänger
4
Antw.
4332
Views
Send query as attachment by email
von Fistandantilus » 24.07.2013 08:33 • Verfasst in ABAP® für Anfänger
0
Antw.
4254
Views
DOCUMENT VIEWER
von SAP_ENTWICKLER » 17.01.2015 15:34 • Verfasst in ABAP® Core
0
Antw.
5112
Views
Document Viewer
von joffi68 » 17.07.2007 14:29 • Verfasst in Basis
0
Antw.
3270
Views
SAP Document Builder: Dokumenterzeugung
von robin.heidrich » 11.07.2019 16:53 • Verfasst in ABAP® Core

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

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.